/***********************************************************************
*                                                                      *
* This file is part of CARAT.                                          *
* Copyright (C) 2015  Tilman Schulz                                    *
*                                                                      *
* CARAT 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 3 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, see <http://www.gnu.org/licenses/> *
*                                                                      *
***********************************************************************/
#ifdef __cplusplus
extern "C" {
#endif


#ifndef _AUTGRP_H_
#define _AUTGRP_H_

#ifndef _CARAT_TYPEDEF_H_
#include"typedef.h"
#endif

#ifdef __STDC__
/*-------------------------------------------------------------*\
| FILE:  autgrp.c
\*-------------------------------------------------------------*/
extern bravais_TYP *autgrp( matrix_TYP **Fo, 
    int Foanz,
    matrix_TYP *SV,
    matrix_TYP **Erz,
    int Erzanz,
    int *options);

extern bravais_TYP *perfect_normal_autgrp( matrix_TYP *Fo,
    matrix_TYP *SV,
    matrix_TYP **Erz,
    int Erzanz,
    int * options,
    matrix_TYP **P, 
    int Panz,
    matrix_TYP **Pbase,
    int Pdim);

/*-------------------------------------------------------------*\
| FILE:  isometry.c
\*-------------------------------------------------------------*/
extern matrix_TYP *isometry(matrix_TYP **F1,
     matrix_TYP **F2,
     int Fanz, 
     matrix_TYP *SV1,
     matrix_TYP *SV2,
     matrix_TYP **Erz,
     int Erzanz,
     int *options);

extern matrix_TYP *perfect_normal_isometry(matrix_TYP *F1,
      matrix_TYP *F2,
      matrix_TYP *SV1,
      matrix_TYP *SV2,
      matrix_TYP **Erz,
      int Erzanz,
      int *options,
      matrix_TYP **P,
      int Panz, 
      matrix_TYP **base,
      int Pdim);

/*-------------------------------------------------------------*\
| FILE:  pr_aut.c
\*-------------------------------------------------------------*/
extern bravais_TYP *pr_aut(matrix_TYP **Fo,
      int Foanz,
      matrix_TYP **Erz,
      int Erzanz,
      int *options);

/*-------------------------------------------------------------*\
| FILE:  pr_isom.c
\*-------------------------------------------------------------*/
extern matrix_TYP *pr_isom(matrix_TYP **F1,
      matrix_TYP **F2,
      int Fanz,
      matrix_TYP **Erz,
      int Erzanz,
      int *options);

#else
/*-------------------------------------------------------------*\
| FILE:  autgrp.c
\*-------------------------------------------------------------*/
extern bravais_TYP *autgrp();

extern bravais_TYP *perfect_normal_autgrp();

/*-------------------------------------------------------------*\
| FILE:  isometry.c
\*-------------------------------------------------------------*/
extern matrix_TYP *isometry();

extern matrix_TYP *perfect_normal_isometry();

/*-------------------------------------------------------------*\
| FILE:  pr_aut.c
\*-------------------------------------------------------------*/
extern bravais_TYP *pr_aut();

/*-------------------------------------------------------------*\
| FILE:  pr_isom.c
\*-------------------------------------------------------------*/
extern matrix_TYP *pr_isom();
#endif
#endif

#ifdef __cplusplus
}
#endif


