You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@spamassassin.apache.org by da...@apache.org on 2017/05/28 18:31:51 UTC

svn commit: r1796518 [13/19] - in /spamassassin/trunk/build/pga: ./ docs/ examples/ examples/c/ examples/fortran/ examples/mgh/ examples/templates/ include/ lib/ lib/linux/ man/ man/man1/ man/man2/ man/man3/ man/man4/ man/man5/ man/man6/ man/man7/ man/...

Added: spamassassin/trunk/build/pga/source/f2c.c
URL: http://svn.apache.org/viewvc/spamassassin/trunk/build/pga/source/f2c.c?rev=1796518&view=auto
==============================================================================
--- spamassassin/trunk/build/pga/source/f2c.c (added)
+++ spamassassin/trunk/build/pga/source/f2c.c Sun May 28 18:31:49 2017
@@ -0,0 +1,1793 @@
+/*
+COPYRIGHT
+
+The following is a notice of limited availability of the code, and disclaimer
+which must be included in the prologue of the code and in all source listings
+of the code.
+
+(C) COPYRIGHT 2008 University of Chicago
+
+Permission is hereby granted to use, reproduce, prepare derivative works, and
+to redistribute to others. This software was authored by:
+
+D. Levine
+Mathematics and Computer Science Division 
+Argonne National Laboratory Group
+
+with programming assistance of participants in Argonne National 
+Laboratory's SERS program.
+
+GOVERNMENT LICENSE
+
+Portions of this material resulted from work developed under a
+U.S. Government Contract and are subject to the following license: the
+Government is granted for itself and others acting on its behalf a paid-up,
+nonexclusive, irrevocable worldwide license in this computer software to
+reproduce, prepare derivative works, and perform publicly and display
+publicly.
+
+DISCLAIMER
+
+This computer code material was prepared, in part, as an account of work
+sponsored by an agency of the United States Government. Neither the United
+States, nor the University of Chicago, nor any of their employees, makes any
+warranty express or implied, or assumes any legal liability or responsibility
+for the accuracy, completeness, or usefulness of any information, apparatus,
+product, or process disclosed, or represents that its use would not infringe
+privately owned rights.
+*/
+
+/*****************************************************************************
+*     FILE: f2c_interface.c
+*
+*     This file contains routines that are called by the Fortran version of
+*     the PGAPack calls.  They just make the call to the appropriate C
+*     routine.  Issues are:
+*         * Fortran's always passing by reference,
+*         * Using Fortran integers for holding C pointer values
+*         * Fortran's 1,...,n indexing vs. C's 0,...,n-1
+*           (this comes up in population member and allele indices)
+*         * Pointers to functions
+*         * File pointers
+*         * Characters strings
+*         * Variable length argument lists
+*
+*     We assume the Fortran compiler generates one of three symbol names for
+*     the external PGAPack routine, e.g.,  pgasetpopsize,  pgasetpopsize_, or
+*     PGASETPOPSIZE.  We use #ifdef's based on the appropriate routine to
+*     convert the canonical pgasetpopsize_ to the other two.  Since the real
+*     C routine is always mixed case we will never have a conflict.
+*
+*     Authors: David M. Levine, Philip L. Hallstrom, David M. Noelle,
+*              Brian P. Walenz
+*****************************************************************************/
+
+#include "pgapack.h"
+
+#if defined(FORTRANCAP)
+#define pgasetbinaryallele_              PGASETBINARYALLELE
+#define pgagetbinaryallele_              PGAGETBINARYALLELE
+#define pgasetbinaryinitprob_            PGASETBINARYINITPROB
+#define pgagetbinaryinitprob_            PGAGETBINARYINITPROB
+#define pgasetcharacterallele_           PGASETCHARACTERALLELE
+#define pgagetcharacterallele_           PGAGETCHARACTERALLELE
+#define pgasetcharacterinittype_         PGASETCHARACTERINITTYPE
+#define pgacreate_                       PGACREATE
+#define pgasetup_                        PGASETUP
+#define pgasetrandominitflag_            PGASETRANDOMINITFLAG
+#define pgagetrandominitflag_            PGAGETRANDOMINITFLAG
+#define pgacrossover_                    PGACROSSOVER
+#define pgagetcrossovertype_             PGAGETCROSSOVERTYPE
+#define pgagetcrossoverprob_             PGAGETCROSSOVERPROB
+#define pgagetuniformcrossoverprob_      PGAGETUNIFORMCROSSOVERPROB
+#define pgasetcrossovertype_             PGASETCROSSOVERTYPE
+#define pgasetcrossoverprob_             PGASETCROSSOVERPROB
+#define pgasetuniformcrossoverprob_      PGASETUNIFORMCROSSOVERPROB
+#define pgadebugprint_                   PGADEBUGPRINT
+#define pgasetdebuglevel_                PGASETDEBUGLEVEL
+#define pgacleardebuglevel_              PGACLEARDEBUGLEVEL
+#define pgasetdebuglevelbyname_          PGASETDEBUGLEVELBYNAME
+#define pgacleardebuglevelbyname_        PGACLEARDEBUGLEVELBYNAME
+#define pgaduplicate_                    PGADUPLICATE
+#define pgachange_                       PGACHANGE
+#define pgasetnoduplicatesflag_          PGASETNODUPLICATESFLAG
+#define pgagetnoduplicatesflag_          PGAGETNODUPLICATESFLAG
+#define pgasetevaluation_                PGASETEVALUATION
+#define pgagetevaluation_                PGAGETEVALUATION
+#define pgasetevaluationuptodateflag_    PGASETEVALUATIONUPTODATEFLAG
+#define pgagetevaluationuptodateflag_    PGAGETEVALUATIONUPTODATEFLAG
+#define pgagetrealfrombinary_            PGAGETREALFROMBINARY
+#define pgagetrealfromgraycode_          PGAGETREALFROMGRAYCODE
+#define pgaencoderealasbinary_           PGAENCODEREALASBINARY
+#define pgaencoderealasgraycode_         PGAENCODEREALASGRAYCODE
+#define pgagetintegerfrombinary_         PGAGETINTEGERFROMBINARY
+#define pgagetintegerfromgraycode_       PGAGETINTEGERFROMGRAYCODE
+#define pgaencodeintegerasbinary_        PGAENCODEINTEGERASBINARY
+#define pgaencodeintegerasgraycode_      PGAENCODEINTEGERASGRAYCODE
+#define pgafitness_                      PGAFITNESS
+#define pgarank_                         PGARANK
+#define pgagetfitness_                   PGAGETFITNESS
+#define pgagetfitnesstype_               PGAGETFITNESSTYPE
+#define pgagetfitnessmintype_            PGAGETFITNESSMINTYPE
+#define pgagetmaxfitnessrank_            PGAGETMAXFITNESSRANK
+#define pgasetfitnesstype_               PGASETFITNESSTYPE
+#define pgasetfitnessmintype_            PGASETFITNESSMINTYPE
+#define pgasetmaxfitnessrank_            PGASETMAXFITNESSRANK
+#define pgasetfitnesscmaxvalue_          PGASETFITNESSCMAXVALUE
+#define pgagetfitnesscmaxvalue_          PGAGETFITNESSCMAXVALUE
+#define pgahammingdistance_              PGAHAMMINGDISTANCE
+#define pgasetintegerallele_             PGASETINTEGERALLELE
+#define pgagetintegerallele_             PGAGETINTEGERALLELE
+#define pgasetintegerinitpermute_        PGASETINTEGERINITPERMUTE
+#define pgasetintegerinitrange_          PGASETINTEGERINITRANGE
+#define pgagetintegerinittype_           PGAGETINTEGERINITTYPE
+#define pgagetminintegerinitvalue_       PGAGETMININTEGERINITVALUE
+#define pgagetmaxintegerinitvalue_       PGAGETMAXINTEGERINITVALUE
+#define pgamutate_                       PGAMUTATE
+#define pgasetmutationtype_              PGASETMUTATIONTYPE
+#define pgagetmutationtype_              PGAGETMUTATIONTYPE
+#define pgasetmutationrealvalue_         PGASETMUTATIONREALVALUE
+#define pgagetmutationrealvalue_         PGAGETMUTATIONREALVALUE
+#define pgasetmutationintegervalue_      PGASETMUTATIONINTEGERVALUE
+#define pgagetmutationintegervalue_      PGAGETMUTATIONINTEGERVALUE
+#define pgasetmutationboundedflag_       PGASETMUTATIONBOUNDEDFLAG
+#define pgagetmutationboundedflag_       PGAGETMUTATIONBOUNDEDFLAG
+#define pgasetmutationprob_              PGASETMUTATIONPROB
+#define pgagetmutationprob_              PGAGETMUTATIONPROB
+#define pgarungm_                        PGARUNGM
+#define pgaevaluate_                     PGAEVALUATE
+#define pgabuilddatatype_                PGABUILDDATATYPE
+#define pgasendindividual_               PGASENDINDIVIDUAL
+#define pgareceiveindividual_            PGARECEIVEINDIVIDUAL
+#define pgasendreceiveindividual_        PGASENDRECEIVEINDIVIDUAL
+#define pgagetrank_                      PGAGETRANK
+#define pgagetnumprocs_                  PGAGETNUMPROCS
+#define pgasetcommunicator_              PGASETCOMMUNICATOR
+#define pgagetcommunicator_              PGAGETCOMMUNICATOR
+#define pgarun_                          PGARUN
+#define pgarunmutationandcrossover_      PGARUNMUTATIONANDCROSSOVER
+#define pgarunmutationorcrossover_       PGARUNMUTATIONORCROSSOVER
+#define pgaupdategeneration_             PGAUPDATEGENERATION
+#define pgagetdatatype_                  PGAGETDATATYPE
+#define pgagetoptdirflag_                PGAGETOPTDIRFLAG
+#define pgagetstringlength_              PGAGETSTRINGLENGTH
+#define pgagetgaitervalue_               PGAGETGAITERVALUE
+#define pgasetmutationorcrossoverflag_   PGASETMUTATIONORCROSSOVERFLAG
+#define pgasetmutationandcrossoverflag_  PGASETMUTATIONANDCROSSOVERFLAG
+#define pgagetmutationorcrossoverflag_   PGAGETMUTATIONORCROSSOVERFLAG
+#define pgagetmutationandcrossoverflag_  PGAGETMUTATIONANDCROSSOVERFLAG
+#define pgasortpop_                      PGASORTPOP
+#define pgagetpopsize_                   PGAGETPOPSIZE
+#define pgagetnumreplacevalue_           PGAGETNUMREPLACEVALUE
+#define pgagetpopreplacetype_            PGAGETPOPREPLACETYPE
+#define pgagetsortedpopindex_            PGAGETSORTEDPOPINDEX
+#define pgasetpopsize_                   PGASETPOPSIZE
+#define pgasetnumreplacevalue_           PGASETNUMREPLACEVALUE
+#define pgasetpopreplacetype_            PGASETPOPREPLACETYPE
+#define pgarandomflip_                   PGARANDOMFLIP
+#define pgarandominterval_               PGARANDOMINTERVAL
+#define pgarandom01_                     PGARANDOM01
+#define pgarandomuniform_                PGARANDOMUNIFORM
+#define pgarandomgaussian_               PGARANDOMGAUSSIAN
+#define pgagetrandomseed_                PGAGETRANDOMSEED
+#define pgasetrandomseed_                PGASETRANDOMSEED
+#define pgasetrealallele_                PGASETREALALLELE
+#define pgagetrealallele_                PGAGETREALALLELE
+#define pgasetrealinitpercent_           PGASETREALINITPERCENT
+#define pgasetrealinitrange_             PGASETREALINITRANGE
+#define pgagetminrealinitvalue_          PGAGETMINREALINITVALUE
+#define pgagetmaxrealinitvalue_          PGAGETMAXREALINITVALUE
+#define pgagetrealinittype_              PGAGETREALINITTYPE
+#define pgaprintreport_                  PGAPRINTREPORT
+#define pgasetprintoptions_              PGASETPRINTOPTIONS
+#define pgasetprintfrequencyvalue_       PGASETPRINTFREQUENCYVALUE
+#define pgagetprintfrequencyvalue_       PGAGETPRINTFREQUENCYVALUE
+#define pgaprintpopulation_              PGAPRINTPOPULATION
+#define pgaprintindividual_              PGAPRINTINDIVIDUAL
+#define pgaprintstring_                  PGAPRINTSTRING
+#define pgaprintcontextvariable_         PGAPRINTCONTEXTVARIABLE
+#define pgarestart_                      PGARESTART
+#define pgasetrestartflag_               PGASETRESTARTFLAG
+#define pgagetrestartflag_               PGAGETRESTARTFLAG
+#define pgasetrestartfrequencyvalue_     PGASETRESTARTFREQUENCYVALUE
+#define pgagetrestartfrequencyvalue_     PGAGETRESTARTFREQUENCYVALUE
+#define pgasetrestartallelechangeprob_   PGASETRESTARTALLELECHANGEPROB
+#define pgagetrestartallelechangeprob_   PGAGETRESTARTALLELECHANGEPROB
+#define pgaselect_                       PGASELECT
+#define pgaselectnextindex_              PGASELECTNEXTINDEX
+#define pgasetselecttype_                PGASETSELECTTYPE
+#define pgagetselecttype_                PGAGETSELECTTYPE
+#define pgasetptournamentprob_           PGASETPTOURNAMENTPROB
+#define pgagetptournamentprob_           PGAGETPTOURNAMENTPROB
+#define pgadone_                         PGADONE
+#define pgacheckstoppingconditions_      PGACHECKSTOPPINGCONDITIONS
+#define pgasetstoppingruletype_          PGASETSTOPPINGRULETYPE
+#define pgagetstoppingruletype_          PGAGETSTOPPINGRULETYPE
+#define pgasetmaxgaitervalue_            PGASETMAXGAITERVALUE
+#define pgagetmaxgaitervalue_            PGAGETMAXGAITERVALUE
+#define pgasetmaxnochangevalue_          PGASETMAXNOCHANGEVALUE
+#define pgasetmaxsimilarityvalue_        PGASETMAXSIMILARITYVALUE
+#define pgaerror_                        PGAERROR
+#define pgadestroy_                      PGADESTROY
+#define pgagetmaxmachineintvalue_        PGAGETMAXMACHINEINTVALUE
+#define pgagetminmachineintvalue_        PGAGETMINMACHINEINTVALUE
+#define pgagetmaxmachinedoublevalue_     PGAGETMAXMACHINEDOUBLEVALUE
+#define pgagetminmachinedoublevalue_     PGAGETMINMACHINEDOUBLEVALUE
+#define pgausage_                        PGAUSAGE
+#define pgaprintversionnumber_           PGAPRINTVERSIONNUMBER
+#define pgasetuserfunction_              PGASETUSERFUNCTION
+#define pgamean_                         PGAMEAN
+#define pgastddev_                       PGASTDDEV
+#define pgaround_                        PGAROUND
+#define pgacopyindividual_               PGACOPYINDIVIDUAL
+#define pgachecksum_                     PGACHECKSUM
+#define pgagetworstindex_                PGAGETWORSTINDEX
+#define pgagetbestindex_                 PGAGETBESTINDEX
+
+#elif defined(FORTRANTWOUNDERSCORE)
+#define pgasetbinaryallele_              _pgasetbinaryallele_
+#define pgagetbinaryallele_              _pgagetbinaryallele_
+#define pgasetbinaryinitprob_            _pgasetbinaryinitprob_
+#define pgagetbinaryinitprob_            _pgagetbinaryinitprob_
+#define pgasetcharacterallele_           _pgasetcharacterallele_
+#define pgagetcharacterallele_           _pgagetcharacterallele_
+#define pgasetcharacterinittype_         _pgasetcharacterinittype_
+#define pgacreate_                       _pgacreate_
+#define pgasetup_                        _pgasetup_
+#define pgasetrandominitflag_            _pgasetrandominitflag_
+#define pgagetrandominitflag_            _pgagetrandominitflag_
+#define pgacrossover_                    _pgacrossover_
+#define pgagetcrossovertype_             _pgagetcrossovertype_
+#define pgagetcrossoverprob_             _pgagetcrossoverprob_
+#define pgagetuniformcrossoverprob_      _pgagetuniformcrossoverprob_
+#define pgasetcrossovertype_             _pgasetcrossovertype_
+#define pgasetcrossoverprob_             _pgasetcrossoverprob_
+#define pgasetuniformcrossoverprob_      _pgasetuniformcrossoverprob_
+#define pgadebugprint_                   _pgadebugprint_
+#define pgasetdebuglevel_                _pgasetdebuglevel_
+#define pgacleardebuglevel_              _pgacleardebuglevel_
+#define pgasetdebuglevelbyname_          _pgasetdebuglevelbyname_
+#define pgacleardebuglevelbyname_        _pgacleardebuglevelbyname_
+#define pgaduplicate_                    _pgaduplicate_
+#define pgachange_                       _pgachange_
+#define pgasetnoduplicatesflag_          _pgasetnoduplicatesflag_
+#define pgagetnoduplicatesflag_          _pgagetnoduplicatesflag_
+#define pgasetevaluation_                _pgasetevaluation_
+#define pgagetevaluation_                _pgagetevaluation_
+#define pgasetevaluationuptodateflag_    _pgasetevaluationuptodateflag_
+#define pgagetevaluationuptodateflag_    _pgagetevaluationuptodateflag_
+#define pgagetrealfrombinary_            _pgagetrealfrombinary_
+#define pgagetrealfromgraycode_          _pgagetrealfromgraycode_
+#define pgaencoderealasbinary_           _pgaencoderealasbinary_
+#define pgaencoderealasgraycode_         _pgaencoderealasgraycode_
+#define pgagetintegerfrombinary_         _pgagetintegerfrombinary_
+#define pgagetintegerfromgraycode_       _pgagetintegerfromgraycode_
+#define pgaencodeintegerasbinary_        _pgaencodeintegerasbinary_
+#define pgaencodeintegerasgraycode_      _pgaencodeintegerasgraycode_
+#define pgafitness_                      _pgafitness_
+#define pgarank_                         _pgarank_
+#define pgagetfitness_                   _pgagetfitness_
+#define pgagetfitnesstype_               _pgagetfitnesstype_
+#define pgagetfitnessmintype_            _pgagetfitnessmintype_
+#define pgagetmaxfitnessrank_            _pgagetmaxfitnessrank_
+#define pgasetfitnesstype_               _pgasetfitnesstype_
+#define pgasetfitnessmintype_            _pgasetfitnessmintype_
+#define pgasetmaxfitnessrank_            _pgasetmaxfitnessrank_
+#define pgasetfitnesscmaxvalue_          _pgasetfitnesscmaxvalue_
+#define pgagetfitnesscmaxvalue_          _pgagetfitnesscmaxvalue_
+#define pgahammingdistance_              _pgahammingdistance_
+#define pgasetintegerallele_             _pgasetintegerallele_
+#define pgagetintegerallele_             _pgagetintegerallele_
+#define pgasetintegerinitpermute_        _pgasetintegerinitpermute_
+#define pgasetintegerinitrange_          _pgasetintegerinitrange_
+#define pgagetintegerinittype_           _pgagetintegerinittype_
+#define pgagetminintegerinitvalue_       _pgagetminintegerinitvalue_
+#define pgagetmaxintegerinitvalue_       _pgagetmaxintegerinitvalue_
+#define pgamutate_                       _pgamutate_
+#define pgasetmutationtype_              _pgasetmutationtype_
+#define pgagetmutationtype_              _pgagetmutationtype_
+#define pgasetmutationrealvalue_         _pgasetmutationrealvalue_
+#define pgagetmutationrealvalue_         _pgagetmutationrealvalue_
+#define pgasetmutationintegervalue_      _pgasetmutationintegervalue_
+#define pgagetmutationintegervalue_      _pgagetmutationintegervalue_
+#define pgasetmutationboundedflag_       _pgasetmutationboundedflag_
+#define pgagetmutationboundedflag_       _pgagetmutationboundedflag_
+#define pgasetmutationprob_              _pgasetmutationprob_
+#define pgagetmutationprob_              _pgagetmutationprob_
+#define pgarungm_                        _pgarungm_
+#define pgaevaluate_                     _pgaevaluate_
+#define pgabuilddatatype_                _pgabuilddatatype_
+#define pgasendindividual_               _pgasendindividual_
+#define pgareceiveindividual_            _pgareceiveindividual_
+#define pgasendreceiveindividual_        _pgasendreceiveindividual_
+#define pgagetrank_                      _pgagetrank_
+#define pgagetnumprocs_                  _pgagetnumprocs_
+#define pgasetcommunicator_              _pgasetcommunicator_
+#define pgagetcommunicator_              _pgagetcommunicator_
+#define pgarun_                          _pgarun_
+#define pgarunmutationandcrossover_      _pgarunmutationandcrossover_
+#define pgarunmutationorcrossover_       _pgarunmutationorcrossover_
+#define pgaupdategeneration_             _pgaupdategeneration_
+#define pgagetdatatype_                  _pgagetdatatype_
+#define pgagetoptdirflag_                _pgagetoptdirflag_
+#define pgagetstringlength_              _pgagetstringlength_
+#define pgagetgaitervalue_               _pgagetgaitervalue_
+#define pgasetmutationorcrossoverflag_   _pgasetmutationorcrossoverflag_
+#define pgasetmutationandcrossoverflag_  _pgasetmutationandcrossoverflag_
+#define pgagetmutationorcrossoverflag_   _pgagetmutationorcrossoverflag_
+#define pgagetmutationandcrossoverflag_  _pgagetmutationandcrossoverflag_
+#define pgasortpop_                      _pgasortpop_
+#define pgagetpopsize_                   _pgagetpopsize_
+#define pgagetnumreplacevalue_           _pgagetnumreplacevalue_
+#define pgagetpopreplacetype_            _pgagetpopreplacetype_
+#define pgagetsortedpopindex_            _pgagetsortedpopindex_
+#define pgasetpopsize_                   _pgasetpopsize_
+#define pgasetnumreplacevalue_           _pgasetnumreplacevalue_
+#define pgasetpopreplacetype_            _pgasetpopreplacetype_
+#define pgarandomflip_                   _pgarandomflip_
+#define pgarandominterval_               _pgarandominterval_
+#define pgarandom01_                     _pgarandom01_
+#define pgarandomuniform_                _pgarandomuniform_
+#define pgarandomgaussian_               _pgarandomgaussian_
+#define pgagetrandomseed_                _pgagetrandomseed_
+#define pgasetrandomseed_                _pgasetrandomseed_
+#define pgasetrealallele_                _pgasetrealallele_
+#define pgagetrealallele_                _pgagetrealallele_
+#define pgasetrealinitpercent_           _pgasetrealinitpercent_
+#define pgasetrealinitrange_             _pgasetrealinitrange_
+#define pgagetminrealinitvalue_          _pgagetminrealinitvalue_
+#define pgagetmaxrealinitvalue_          _pgagetmaxrealinitvalue_
+#define pgagetrealinittype_              _pgagetrealinittype_
+#define pgaprintreport_                  _pgaprintreport_
+#define pgasetprintoptions_              _pgasetprintoptions_
+#define pgasetprintfrequencyvalue_       _pgasetprintfrequencyvalue_
+#define pgagetprintfrequencyvalue_       _pgagetprintfrequencyvalue_
+#define pgaprintpopulation_              _pgaprintpopulation_
+#define pgaprintindividual_              _pgaprintindividual_
+#define pgaprintstring_                  _pgaprintstring_
+#define pgaprintcontextvariable_         _pgaprintcontextvariable_
+#define pgarestart_                      _pgarestart_
+#define pgasetrestartflag_               _pgasetrestartflag_
+#define pgagetrestartflag_               _pgagetrestartflag_
+#define pgasetrestartfrequencyvalue_     _pgasetrestartfrequencyvalue_
+#define pgagetrestartfrequencyvalue_     _pgagetrestartfrequencyvalue_
+#define pgasetrestartallelechangeprob_   _pgasetrestartallelechangeprob_
+#define pgagetrestartallelechangeprob_   _pgagetrestartallelechangeprob_
+#define pgaselect_                       _pgaselect_
+#define pgaselectnextindex_              _pgaselectnextindex_
+#define pgasetselecttype_                _pgasetselecttype_
+#define pgagetselecttype_                _pgagetselecttype_
+#define pgasetptournamentprob_           _pgasetptournamentprob_
+#define pgagetptournamentprob_           _pgagetptournamentprob_
+#define pgadone_                         _pgadone_
+#define pgacheckstoppingconditions_      _pgacheckstoppingconditions_
+#define pgasetstoppingruletype_          _pgasetstoppingruletype_
+#define pgagetstoppingruletype_          _pgagetstoppingruletype_
+#define pgasetmaxgaitervalue_            _pgasetmaxgaitervalue_
+#define pgagetmaxgaitervalue_            _pgagetmaxgaitervalue_
+#define pgasetmaxnochangevalue_          _pgasetmaxnochangevalue_
+#define pgasetmaxsimilarityvalue_        _pgasetmaxsimilarityvalue_
+#define pgaerror_                        _pgaerror_
+#define pgadestroy_                      _pgadestroy_
+#define pgagetmaxmachineintvalue_        _pgagetmaxmachineintvalue_
+#define pgagetminmachineintvalue_        _pgagetminmachineintvalue_
+#define pgagetmaxmachinedoublevalue_     _pgagetmaxmachinedoublevalue_
+#define pgagetminmachinedoublevalue_     _pgagetminmachinedoublevalue_
+#define pgausage_                        _pgausage_
+#define pgaprintversionnumber_           _pgaprintversionnumber_
+#define pgasetuserfunction_              _pgasetuserfunction_
+#define pgamean_                         _pgamean_
+#define pgastddev_                       _pgastddev_
+#define pgaround_                        _pgaround_
+#define pgacopyindividual_               _pgacopyindividual_
+#define pgachecksum_                     _pgachecksum_
+#define pgagetworstindex_                _pgagetworstindex_
+#define pgagetbestindex_                 _pgagetbestindex_
+
+#elif !defined(FORTRANUNDERSCORE)
+#define pgasetbinaryallele_              pgasetbinaryallele
+#define pgagetbinaryallele_              pgagetbinaryallele
+#define pgasetbinaryinitprob_            pgasetbinaryinitprob
+#define pgagetbinaryinitprob_            pgagetbinaryinitprob
+#define pgasetcharacterallele_           pgasetcharacterallele
+#define pgagetcharacterallele_           pgagetcharacterallele
+#define pgasetcharacterinittype_         pgasetcharacterinittype
+#define pgacreate_                       pgacreate
+#define pgasetup_                        pgasetup
+#define pgasetrandominitflag_            pgasetrandominitflag
+#define pgagetrandominitflag_            pgagetrandominitflag
+#define pgacrossover_                    pgacrossover
+#define pgagetcrossovertype_             pgagetcrossovertype
+#define pgagetcrossoverprob_             pgagetcrossoverprob
+#define pgagetuniformcrossoverprob_      pgagetuniformcrossoverprob
+#define pgasetcrossovertype_             pgasetcrossovertype
+#define pgasetcrossoverprob_             pgasetcrossoverprob
+#define pgasetuniformcrossoverprob_      pgasetuniformcrossoverprob
+#define pgadebugprint_                   pgadebugprint
+#define pgasetdebuglevel_                pgasetdebuglevel
+#define pgacleardebuglevel_              pgacleardebuglevel
+#define pgasetdebuglevelbyname_          pgasetdebuglevelbyname
+#define pgacleardebuglevelbyname_        pgacleardebuglevelbyname
+#define pgaduplicate_                    pgaduplicate
+#define pgachange_                       pgachange
+#define pgasetnoduplicatesflag_          pgasetnoduplicatesflag
+#define pgagetnoduplicatesflag_          pgagetnoduplicatesflag
+#define pgasetevaluation_                pgasetevaluation
+#define pgagetevaluation_                pgagetevaluation
+#define pgasetevaluationuptodateflag_    pgasetevaluationuptodateflag
+#define pgagetevaluationuptodateflag_    pgagetevaluationuptodateflag
+#define pgagetrealfrombinary_            pgagetrealfrombinary
+#define pgagetrealfromgraycode_          pgagetrealfromgraycode
+#define pgaencoderealasbinary_           pgaencoderealasbinary
+#define pgaencoderealasgraycode_         pgaencoderealasgraycode
+#define pgagetintegerfrombinary_         pgagetintegerfrombinary
+#define pgagetintegerfromgraycode_       pgagetintegerfromgraycode
+#define pgaencodeintegerasbinary_        pgaencodeintegerasbinary
+#define pgaencodeintegerasgraycode_      pgaencodeintegerasgraycode
+#define pgafitness_                      pgafitness
+#define pgarank_                         pgarank
+#define pgagetfitness_                   pgagetfitness
+#define pgagetfitnesstype_               pgagetfitnesstype
+#define pgagetfitnessmintype_            pgagetfitnessmintype
+#define pgagetmaxfitnessrank_            pgagetmaxfitnessrank
+#define pgasetfitnesstype_               pgasetfitnesstype
+#define pgasetfitnessmintype_            pgasetfitnessmintype
+#define pgasetmaxfitnessrank_            pgasetmaxfitnessrank
+#define pgasetfitnesscmaxvalue_          pgasetfitnesscmaxvalue
+#define pgagetfitnesscmaxvalue_          pgagetfitnesscmaxvalue
+#define pgahammingdistance_              pgahammingdistance
+#define pgasetintegerallele_             pgasetintegerallele
+#define pgagetintegerallele_             pgagetintegerallele
+#define pgasetintegerinitpermute_        pgasetintegerinitpermute
+#define pgasetintegerinitrange_          pgasetintegerinitrange
+#define pgagetintegerinittype_           pgagetintegerinittype
+#define pgagetminintegerinitvalue_       pgagetminintegerinitvalue
+#define pgagetmaxintegerinitvalue_       pgagetmaxintegerinitvalue
+#define pgamutate_                       pgamutate
+#define pgasetmutationtype_              pgasetmutationtype
+#define pgagetmutationtype_              pgagetmutationtype
+#define pgasetmutationrealvalue_         pgasetmutationrealvalue
+#define pgagetmutationrealvalue_         pgagetmutationrealvalue
+#define pgasetmutationintegervalue_      pgasetmutationintegervalue
+#define pgagetmutationintegervalue_      pgagetmutationintegervalue
+#define pgasetmutationboundedflag_       pgasetmutationboundedflag
+#define pgagetmutationboundedflag_       pgagetmutationboundedflag
+#define pgasetmutationprob_              pgasetmutationprob
+#define pgagetmutationprob_              pgagetmutationprob
+#define pgarungm_                        pgarungm
+#define pgaevaluate_                     pgaevaluate
+#define pgabuilddatatype_                pgabuilddatatype
+#define pgasendindividual_               pgasendindividual
+#define pgareceiveindividual_            pgareceiveindividual
+#define pgasendreceiveindividual_        pgasendreceiveindividual
+#define pgagetrank_                      pgagetrank
+#define pgagetnumprocs_                  pgagetnumprocs
+#define pgasetcommunicator_              pgasetcommunicator
+#define pgagetcommunicator_              pgagetcommunicator
+#define pgarun_                          pgarun
+#define pgarunmutationandcrossover_      pgarunmutationandcrossover
+#define pgarunmutationorcrossover_       pgarunmutationorcrossover
+#define pgaupdategeneration_             pgaupdategeneration
+#define pgagetdatatype_                  pgagetdatatype
+#define pgagetoptdirflag_                pgagetoptdirflag
+#define pgagetstringlength_              pgagetstringlength
+#define pgagetgaitervalue_               pgagetgaitervalue
+#define pgasetmutationorcrossoverflag_   pgasetmutationorcrossoverflag
+#define pgasetmutationandcrossoverflag_  pgasetmutationandcrossoverflag
+#define pgagetmutationorcrossoverflag_   pgagetmutationorcrossoverflag
+#define pgagetmutationandcrossoverflag_  pgagetmutationandcrossoverflag
+#define pgasortpop_                      pgasortpop
+#define pgagetpopsize_                   pgagetpopsize
+#define pgagetnumreplacevalue_           pgagetnumreplacevalue
+#define pgagetpopreplacetype_            pgagetpopreplacetype
+#define pgagetsortedpopindex_            pgagetsortedpopindex
+#define pgasetpopsize_                   pgasetpopsize
+#define pgasetnumreplacevalue_           pgasetnumreplacevalue
+#define pgasetpopreplacetype_            pgasetpopreplacetype
+#define pgarandomflip_                   pgarandomflip
+#define pgarandominterval_               pgarandominterval
+#define pgarandom01_                     pgarandom01
+#define pgarandomuniform_                pgarandomuniform
+#define pgarandomgaussian_               pgarandomgaussian
+#define pgagetrandomseed_                pgagetrandomseed
+#define pgasetrandomseed_                pgasetrandomseed
+#define pgasetrealallele_                pgasetrealallele
+#define pgagetrealallele_                pgagetrealallele
+#define pgasetrealinitpercent_           pgasetrealinitpercent
+#define pgasetrealinitrange_             pgasetrealinitrange
+#define pgagetminrealinitvalue_          pgagetminrealinitvalue
+#define pgagetmaxrealinitvalue_          pgagetmaxrealinitvalue
+#define pgagetrealinittype_              pgagetrealinittype
+#define pgaprintreport_                  pgaprintreport
+#define pgasetprintoptions_              pgasetprintoptions
+#define pgasetprintfrequencyvalue_       pgasetprintfrequencyvalue
+#define pgagetprintfrequencyvalue_       pgagetprintfrequencyvalue
+#define pgaprintpopulation_              pgaprintpopulation
+#define pgaprintindividual_              pgaprintindividual
+#define pgaprintstring_                  pgaprintstring
+#define pgaprintcontextvariable_         pgaprintcontextvariable
+#define pgarestart_                      pgarestart
+#define pgasetrestartflag_               pgasetrestartflag
+#define pgagetrestartflag_               pgagetrestartflag
+#define pgasetrestartfrequencyvalue_     pgasetrestartfrequencyvalue
+#define pgagetrestartfrequencyvalue_     pgagetrestartfrequencyvalue
+#define pgasetrestartallelechangeprob_   pgasetrestartallelechangeprob
+#define pgagetrestartallelechangeprob_   pgagetrestartallelechangeprob
+#define pgaselect_                       pgaselect
+#define pgaselectnextindex_              pgaselectnextindex
+#define pgasetselecttype_                pgasetselecttype
+#define pgagetselecttype_                pgagetselecttype
+#define pgasetptournamentprob_           pgasetptournamentprob
+#define pgagetptournamentprob_           pgagetptournamentprob
+#define pgadone_                         pgadone
+#define pgacheckstoppingconditions_      pgacheckstoppingconditions
+#define pgasetstoppingruletype_          pgasetstoppingruletype
+#define pgagetstoppingruletype_          pgagetstoppingruletype
+#define pgasetmaxgaitervalue_            pgasetmaxgaitervalue
+#define pgagetmaxgaitervalue_            pgagetmaxgaitervalue
+#define pgasetmaxnochangevalue_          pgasetmaxnochangevalue
+#define pgasetmaxsimilarityvalue_        pgasetmaxsimilarityvalue
+#define pgaerror_                        pgaerror
+#define pgadestroy_                      pgadestroy
+#define pgagetmaxmachineintvalue_        pgagetmaxmachineintvalue
+#define pgagetminmachineintvalue_        pgagetminmachineintvalue
+#define pgagetmaxmachinedoublevalue_     pgagetmaxmachinedoublevalue
+#define pgagetminmachinedoublevalue_     pgagetminmachinedoublevalue
+#define pgausage_                        pgausage
+#define pgaprintversionnumber_           pgaprintversionnumber
+#define pgasetuserfunction_              pgasetuserfunction
+#define pgamean_                         pgamean
+#define pgastddev_                       pgastddev
+#define pgaround_                        pgaround
+#define pgacopyindividual_               pgacopyindividual
+#define pgachecksum_                     pgachecksum
+#define pgagetworstindex_                pgagetworstindex
+#define pgagetbestindex_                 pgagetbestindex
+#endif
+
+void pgasetbinaryallele_(PGAContext **ftx, int *p, int *pop, int *i,
+     int *val);
+int pgagetbinaryallele_(PGAContext **ftx, int *p, int *pop, int *i);
+void pgasetbinaryinitprob_(PGAContext **ftx, double *probability);
+double pgagetbinaryinitprob_(PGAContext **ftx);
+void pgasetcharacterallele_(PGAContext **ftx, int *p, int *pop, int *i,
+     char *val);
+void pgagetcharacterallele_(char *retval_ptr, int retval_len, PGAContext **ftx,
+     int *p, int *pop, int *i);
+void pgasetcharacterinittype_(PGAContext **ftx, int *value);
+unsigned long pgacreate_(int *datatype, int *len, int *maxormin);
+void pgasetup_(PGAContext **ftx);
+void pgasetrandominitflag_(PGAContext **ftx, int *RandomBoolean);
+int pgagetrandominitflag_(PGAContext **ftx);
+void pgacrossover_(PGAContext **ftx, int *m1, int *m2, int *oldpop, int *t1,
+     int *t2, int *newpop);
+int pgagetcrossovertype_(PGAContext **ftx);
+double pgagetcrossoverprob_(PGAContext **ftx);
+double pgagetuniformcrossoverprob_(PGAContext **ftx);
+void pgasetcrossovertype_(PGAContext **ftx, int *crossover_type);
+void pgasetcrossoverprob_(PGAContext **ftx, double *crossover_prob);
+void pgasetuniformcrossoverprob_(PGAContext **ftx,
+     double *uniform_cross_prob);
+void pgadebugprint_(PGAContext **ftx, int *level, char *funcname, char *msg,
+     int *datatype, void *data, int len1, int len2);
+void pgasetdebuglevel_(PGAContext **ftx, int *level);
+void pgacleardebuglevel_(PGAContext **ftx, int *level);
+void pgasetdebuglevelbyname_(PGAContext **ftx, char *name, int len);
+void pgacleardebuglevelbyname_(PGAContext **ftx, char *name, int len);
+int pgaduplicate_(PGAContext **ftx, int *j, int *pop1, int *pop2, int *n);
+void pgachange_(PGAContext **ftx, int *j, int *popindex);
+void pgasetnoduplicatesflag_(PGAContext **ftx, int *no_dup);
+int pgagetnoduplicatesflag_(PGAContext **ftx);
+void pgasetevaluation_( PGAContext **ftx, int *p, int *pop, double *val );
+double pgagetevaluation_(PGAContext **ftx, int *p, int *pop);
+void pgasetevaluationuptodateflag_(PGAContext **ftx, int *p, int *pop, int *status);
+int pgagetevaluationuptodateflag_(PGAContext **ftx, int *p, int *pop);
+double pgagetrealfrombinary_(PGAContext **ftx, int *p, int *pop,
+     int *start, int *end, double *lower, double *upper);
+double pgagetrealfromgraycode_(PGAContext **ftx, int *p, int *pop,
+     int *start, int *end, double *lower, double *upper);
+void pgaencoderealasbinary_(PGAContext **ftx, int *p, int *pop,
+     int *start, int *end, double *lower, double *upper,
+     double *value);
+void pgaencoderealasgraycode_(PGAContext **ftx, int *p, int *pop,
+     int *start, int *end, double *lower, double *upper,
+     double *value);
+int pgagetintegerfrombinary_(PGAContext **ftx, int *p, int *pop,
+     int *start, int *end);
+int pgagetintegerfromgraycode_(PGAContext **ftx, int *p, int *pop,
+     int *start, int *end);
+void pgaencodeintegerasbinary_(PGAContext **ftx, int *p, int *pop,
+     int*start, int *end, int *value);
+void pgaencodeintegerasgraycode_(PGAContext **ftx, int *p, int *pop,
+     int*start, int *end, int *value);
+void pgafitness_(PGAContext **ftx, int *popindex);
+int pgarank_(PGAContext **ftx, int *p, int *order, int *n);
+double pgagetfitness_(PGAContext **ftx, int *p, int *pop);
+int pgagetfitnesstype_(PGAContext **ftx);
+int pgagetfitnessmintype_(PGAContext **ftx);
+double pgagetmaxfitnessrank_(PGAContext **ftx);
+void pgasetfitnesstype_(PGAContext **ftx, int *fitness_type);
+void pgasetfitnessmintype_(PGAContext **ftx, int *fitness_type);
+void pgasetmaxfitnessrank_(PGAContext **ftx, double *fitness_rank_max);
+void pgasetfitnesscmaxvalue_(PGAContext **ftx, double *val);
+double pgagetfitnesscmaxvalue_(PGAContext **ftx);
+double pgahammingdistance_(PGAContext **ftx, int *popindex);
+void pgasetintegerallele_(PGAContext **ftx, int *p, int *pop, int *i,
+     int *val);
+int pgagetintegerallele_(PGAContext **ftx, int *p, int *pop, int *i);
+void pgasetintegerinitpermute_(PGAContext **ftx, int *min, int *max);
+void pgasetintegerinitrange_ (PGAContext **ftx, int *min, int *max);
+int pgagetintegerinittype_(PGAContext **ftx);
+int pgagetminintegerinitvalue_ (PGAContext **ftx, int *i);
+int pgagetmaxintegerinitvalue_ (PGAContext **ftx, int *i);
+void pgamutate_(PGAContext **ftx, int *p, int *pop);
+void pgasetmutationtype_(PGAContext **ftx, int *mutation_type);
+int pgagetmutationtype_(PGAContext **ftx);
+void pgasetmutationrealvalue_(PGAContext **ftx, double *val);
+double pgagetmutationrealvalue_(PGAContext **ftx);
+void pgasetmutationintegervalue_(PGAContext **ftx, int *val);
+int pgagetmutationintegervalue_(PGAContext **ftx);
+void pgasetmutationboundedflag_(PGAContext **ftx, int *val);
+int pgagetmutationboundedflag_(PGAContext **ftx);
+void pgasetmutationprob_(PGAContext **ftx, double *mutation_prob);
+double pgagetmutationprob_(PGAContext **ftx);
+void pgarungm_(PGAContext **ftx, double (*f)(PGAContext *, int, int),
+     MPI_Comm *comm);
+void pgaevaluate_(PGAContext **ftx, int *pop,
+     double (*f)(PGAContext *, int, int), MPI_Comm *comm);
+unsigned long pgabuilddatatype_(PGAContext **ftx, int *p, int *pop);
+void pgasendindividual_(PGAContext **ftx, int *p, int *pop, int *dest, int *tag, MPI_Comm *comm);
+void pgareceiveindividual_(PGAContext **ftx, int *p, int *pop, int *source, int *tag, MPI_Comm *comm, MPI_Status *status);
+void pgasendreceiveindividual_(PGAContext **ftx, int *send_p, int *send_pop, int *dest, int *send_tag, int *recv_p, int *recv_pop, int *source, int *recv_tag, MPI_Comm *comm, MPI_Status *status);
+int pgagetrank_(PGAContext **ftx, MPI_Comm *comm);
+int pgagetnumprocs_(PGAContext **ftx, MPI_Comm *comm);
+void pgasetcommunicator_(PGAContext **ftx, MPI_Comm *comm);
+MPI_Comm pgagetcommunicator_(PGAContext **ftx);
+void pgarun_(PGAContext **ftx,
+     double (*evaluate)(PGAContext *c, int p, int pop));
+void pgarunmutationandcrossover_(PGAContext **ftx, int *oldpop,
+     int *newpop);
+void pgarunmutationorcrossover_(PGAContext **ftx, int *oldpop, int *newpop);
+void pgaupdategeneration_(PGAContext **ftx, MPI_Comm *comm);
+int pgagetdatatype_(PGAContext **ftx);
+int pgagetoptdirflag_(PGAContext **ftx);
+int pgagetstringlength_(PGAContext **ftx);
+int pgagetgaitervalue_(PGAContext **ftx);
+void pgasetmutationorcrossoverflag_(PGAContext **ftx, int *flag);
+void pgasetmutationandcrossoverflag_(PGAContext **ftx, int *flag);
+int pgagetmutationorcrossoverflag_(PGAContext **ftx);
+int pgagetmutationandcrossoverflag_(PGAContext **ftx);
+void pgasortpop_(PGAContext **ftx, int *pop);
+int pgagetpopsize_(PGAContext **ftx);
+int pgagetnumreplacevalue_(PGAContext **ftx);
+int pgagetpopreplacetype_(PGAContext **ftx);
+int pgagetsortedpopindex_(PGAContext **ftx, int *n);
+void pgasetpopsize_(PGAContext **ftx, int *popsize);
+void pgasetnumreplacevalue_(PGAContext **ftx, int *pop_replace);
+void pgasetpopreplacetype_(PGAContext **ftx, int *pop_replace);
+int pgarandomflip_(PGAContext **ftx, double *p);
+int pgarandominterval_(PGAContext **ftx, int *start, int *end);
+double pgarandom01_(PGAContext **ftx, int *newseed);
+double pgarandomuniform_(PGAContext **ftx, double *start, double *end);
+double pgarandomgaussian_(PGAContext **ftx, double *mean, double *sigma);
+int pgagetrandomseed_(PGAContext **ftx);
+void pgasetrandomseed_(PGAContext **ftx, int *seed);
+void pgasetrealallele_(PGAContext **ftx, int *p, int *pop, int *i,
+     double *val);
+double pgagetrealallele_(PGAContext **ftx, int *p, int *pop, int *i);
+void pgasetrealinitpercent_(PGAContext **ftx, double *median, double *percent);
+void pgasetrealinitrange_ (PGAContext **ftx, double *min, double *max);
+double pgagetminrealinitvalue_(PGAContext **ftx, int *i);
+double pgagetmaxrealinitvalue_(PGAContext **ftx, int *i);
+int pgagetrealinittype_(PGAContext **ftx);
+void pgaprintreport_(PGAContext **ftx, char *name, int *pop, int len);
+void pgasetprintoptions_(PGAContext **ftx, int *option);
+void pgasetprintfrequencyvalue_(PGAContext **ftx, int *print_freq);
+int pgagetprintfrequencyvalue_(PGAContext **ftx);
+void pgaprintpopulation_(PGAContext **ftx, char *name, int *pop, int len);
+void pgaprintindividual_ (PGAContext **ftx, char *name, int *p,
+     int *pop, int len);
+void pgaprintstring_ (PGAContext **ftx, char *name, int *p,
+     int *pop, int len);
+void pgaprintcontextvariable_(PGAContext **ftx, char *name, int len);
+void pgarestart_(PGAContext **ftx, int *source_pop, int *dest_pop);
+void pgasetrestartflag_(PGAContext **ftx, int *val);
+int pgagetrestartflag_(PGAContext **ftx);
+void pgasetrestartfrequencyvalue_(PGAContext **ftx, int *numiter);
+int pgagetrestartfrequencyvalue_(PGAContext **ftx);
+void pgasetrestartallelechangeprob_(PGAContext **ftx, double *prob);
+double pgagetrestartallelechangeprob_(PGAContext **ftx);
+void pgaselect_(PGAContext **ftx, int *popix);
+int pgaselectnextindex_(PGAContext **ftx);
+void pgasetselecttype_(PGAContext **ftx, int *select_type);
+int pgagetselecttype_(PGAContext **ftx);
+void pgasetptournamentprob_(PGAContext **ftx, double *ptournament_prob);
+double pgagetptournamentprob_(PGAContext **ftx);
+int pgadone_(PGAContext **ftx, MPI_Comm *comm);
+int pgacheckstoppingconditions_(PGAContext **ftx);
+void pgasetstoppingruletype_(PGAContext **ftx, int *stoprule);
+int pgagetstoppingruletype_(PGAContext **ftx);
+void pgasetmaxgaitervalue_(PGAContext **ftx, int *maxiter);
+int pgagetmaxgaitervalue_(PGAContext **ftx);
+void pgasetmaxnochangevalue_(PGAContext **ftx, int *max_no_change);
+void pgasetmaxsimilarityvalue_(PGAContext **ftx, int *max_similarity);
+void pgaerror_(PGAContext **ftx, char *msg, int *level, int *datatype,
+     void **data, int len);
+void pgadestroy_(PGAContext **ftx);
+int pgagetmaxmachineintvalue_(PGAContext **ftx);
+int pgagetminmachineintvalue_(PGAContext **ftx);
+double pgagetmaxmachinedoublevalue_(PGAContext **ftx);
+double pgagetminmachinedoublevalue_(PGAContext **ftx);
+void pgausage_(PGAContext **ftx);
+void pgaprintversionnumber_(PGAContext **ftx);
+void pgasetuserfunction_(PGAContext **ftx, int *constant, void *f);
+double pgamean_(PGAContext **ftx, double *a, int *n);
+double pgastddev_(PGAContext **ftx, double *a, int *n, double *m);
+int pgaround_(PGAContext **ftx, double *x);
+void pgacopyindividual_(PGAContext **ftx, int *i, int *p1, int *j, int *p2);
+int pgachecksum_(PGAContext **ftx, int *p, int *pop);
+int pgagetworstindex_(PGAContext **ftx, int *pop);
+int pgagetbestindex_(PGAContext **ftx, int *pop);
+
+void pgasetbinaryallele_(PGAContext **ftx, int *p, int *pop, int *i,
+     int *val)
+{
+     PGASetBinaryAllele(*ftx,
+	   *p == PGA_TEMP1 || *p == PGA_TEMP2 ? *p : *p - 1,
+	   *pop, *i-1, *val);
+}
+
+int pgagetbinaryallele_(PGAContext **ftx, int *p, int *pop, int *i)
+{
+     return PGAGetBinaryAllele(*ftx,
+		  *p == PGA_TEMP1 || *p == PGA_TEMP2 ? *p : *p - 1,
+		  *pop, *i-1);
+}
+
+void pgasetbinaryinitprob_(PGAContext **ftx, double *probability)
+{
+     PGASetBinaryInitProb  (*ftx, *probability);
+}
+
+double pgagetbinaryinitprob_(PGAContext **ftx)
+{
+     return PGAGetBinaryInitProb  (*ftx);
+}
+
+void pgasetcharacterallele_(PGAContext **ftx, int *p, int *pop, int *i,
+     char *val)
+{
+     PGASetCharacterAllele(*ftx,
+	   *p == PGA_TEMP1 || *p == PGA_TEMP2 ? *p : *p - 1,
+	   *pop, *i-1, *val);
+}
+
+void pgagetcharacterallele_(char *retval_ptr, int retval_len, PGAContext **ftx,
+     int *p, int *pop, int *i)
+{
+     *retval_ptr = PGAGetCharacterAllele(*ftx,
+		  *p == PGA_TEMP1 || *p == PGA_TEMP2 ? *p : *p - 1,
+		  *pop, *i-1);
+}
+
+void pgasetcharacterinittype_(PGAContext **ftx, int *value)
+{
+     PGASetCharacterInitType  (*ftx, *value);
+}
+
+unsigned long pgacreate_(int *datatype, int *len, int *maxormin)
+{
+     int argc;
+     char *argv[1];
+     PGAContext *ctx;
+
+     argv[0] = "pgapack";
+     argc = 1;
+
+     ctx = PGACreate(&argc, argv, *datatype, *len, *maxormin);
+     ctx->sys.UserFortran = PGA_TRUE;
+
+     return (unsigned long)ctx;
+}
+
+void pgasetup_(PGAContext **ftx)
+{
+     PGASetUp  (*ftx);
+}
+
+void pgasetrandominitflag_(PGAContext **ftx, int *RandomBoolean)
+{
+     PGASetRandomInitFlag  (*ftx, *RandomBoolean);
+}
+
+int pgagetrandominitflag_(PGAContext **ftx)
+{
+     return PGAGetRandomInitFlag  (*ftx);
+}
+
+void pgacrossover_(PGAContext **ftx, int *m1, int *m2, int *oldpop, int *t1,
+     int *t2, int *newpop)
+{
+     PGACrossover (*ftx,
+		   *m1 == PGA_TEMP1 || *m1 == PGA_TEMP2 ? *m1 : *m1-1,
+		   *m2 == PGA_TEMP1 || *m2 == PGA_TEMP2 ? *m2 : *m2-1,
+		   *oldpop,
+		   *t1 == PGA_TEMP1 || *t1 == PGA_TEMP2 ? *t1 : *t1-1,
+		   *t2 == PGA_TEMP1 || *t2 == PGA_TEMP2 ? *t2 : *t2-1,
+		   *newpop);
+}
+
+int pgagetcrossovertype_(PGAContext **ftx)
+{
+     return PGAGetCrossoverType  (*ftx);
+}
+
+double pgagetcrossoverprob_(PGAContext **ftx)
+{
+     return PGAGetCrossoverProb  (*ftx);
+}
+
+double pgagetuniformcrossoverprob_(PGAContext **ftx)
+{
+     return PGAGetUniformCrossoverProb  (*ftx);
+}
+
+void pgasetcrossovertype_(PGAContext **ftx, int *crossover_type)
+{
+     PGASetCrossoverType  (*ftx, *crossover_type);
+}
+
+void pgasetcrossoverprob_(PGAContext **ftx, double *crossover_prob)
+{
+     PGASetCrossoverProb  (*ftx, *crossover_prob);
+}
+
+void pgasetuniformcrossoverprob_(PGAContext **ftx,
+     double *uniform_cross_prob)
+{
+     PGASetUniformCrossoverProb  (*ftx, *uniform_cross_prob);
+}
+
+#if OPTIMIZE==0
+void pgadebugprint_(PGAContext **ftx, int *level, char *funcname, char *msg,
+     int *datatype, void *data, int len1, int len2)
+/* FORTRAN implicitly passes the lengths of funcname and msg into len1
+   and len2, respectively */
+{
+     if (funcname[len1] != 0 || msg[len2] != 0)
+	  funcname[len1] = msg[len2] = 0;
+     PGADebugPrint(*ftx, *level, funcname, msg, *datatype, data );
+}
+#else
+void pgadebugprint_(PGAContext **ftx, int *level, char *funcname, char *msg,
+		    int *datatype, void *data, int len1, int len2)
+{
+     printf("PGADebugPrint is not supported in the optimized version of PGAPack.\n");
+}
+#endif
+
+#if OPTIMIZE==0
+void pgasetdebuglevel_(PGAContext **ftx, int *level)
+{
+    PGASetDebugLevel(*ftx, *level);
+}
+#else
+void pgasetdebuglevel_(PGAContext **ftx, int *level)
+{
+    printf("PGASetDebugLevel is not supported in the optimized version of PGAPack.\n");
+}
+#endif
+#if OPTIMIZE==0
+void pgacleardebuglevel_(PGAContext **ftx, int *level)
+{
+    PGAClearDebugLevel(*ftx, *level);
+}
+#else
+void pgacleardebuglevel_(PGAContext **ftx, int *level)
+{
+    printf("PGAClearDebugLevel is not supported in the optimized version of PGAPack.\n");
+}
+#endif
+#if OPTIMIZE==0
+void pgasetdebuglevelbyname_(PGAContext **ftx, char *name, int len)
+{
+    if (name[len] != 0)  name[len] = 0;
+    PGASetDebugLevelByName(*ftx, name);
+}
+#else
+void pgasetdebuglevelbyname_(PGAContext **ftx, char *name, int len)
+{
+    printf("PGASetDebugLevelByName is not supported in the optimized version of PGAPack.\n");
+}
+#endif
+#if OPTIMIZE==0
+void pgacleardebuglevelbyname_(PGAContext **ftx, char *name, int len)
+{
+    if (name[len] != 0)  name[len] = 0;
+    PGAClearDebugLevelByName(*ftx, name);
+}
+#else
+void pgacleardebuglevelbyname_(PGAContext **ftx, char *name, int len)
+{
+    printf("PGAClearDebugLevelByName is not supported in the optimized version of PGAPack.\n");
+}
+#endif
+int pgaduplicate_(PGAContext **ftx, int *j, int *pop1, int *pop2, int *n)
+{
+     return PGADuplicate(*ftx,
+		  *j == PGA_TEMP1 || *j == PGA_TEMP2 ? *j : *j-1,
+		  *pop1, *pop2, *n);
+}
+
+void pgachange_(PGAContext **ftx, int *j, int *popindex)
+{
+     PGAChange(*ftx,
+	   *j == PGA_TEMP1 || *j == PGA_TEMP2 ? *j : *j-1,
+	   *popindex);
+}
+
+void pgasetnoduplicatesflag_(PGAContext **ftx, int *no_dup)
+{
+     PGASetNoDuplicatesFlag  (*ftx, *no_dup);
+}
+
+int pgagetnoduplicatesflag_(PGAContext **ftx)
+{
+     return PGAGetNoDuplicatesFlag  (*ftx);
+}
+
+void pgasetevaluation_( PGAContext **ftx, int *p, int *pop, double *val )
+{
+     PGASetEvaluation(*ftx, *p == PGA_TEMP1 || *p == PGA_TEMP2 ? *p : *p-1,
+           *pop, *val );
+}
+
+double pgagetevaluation_(PGAContext **ftx, int *p, int *pop)
+{
+     return PGAGetEvaluation(*ftx, *p == PGA_TEMP1 || *p == PGA_TEMP2 ? *p : *p-1, *pop);
+}
+
+void pgasetevaluationuptodateflag_(PGAContext **ftx, int *p, int *pop, int *status)
+{
+     PGASetEvaluationUpToDateFlag(*ftx, *p == PGA_TEMP1 || *p == PGA_TEMP2 ? *p : *p-1,
+           *pop, *status);
+}
+
+int pgagetevaluationuptodateflag_(PGAContext **ftx, int *p, int *pop)
+{
+     return PGAGetEvaluationUpToDateFlag(*ftx, *p == PGA_TEMP1 || *p == PGA_TEMP2 ? *p : *p-1, *pop);
+}
+
+double pgagetrealfrombinary_(PGAContext **ftx, int *p, int *pop,
+     int *start, int *end, double *lower, double *upper)
+{
+     return PGAGetRealFromBinary(*ftx,
+          *p == PGA_TEMP1 || *p == PGA_TEMP2 ? *p :
+          *p - 1,
+          *pop, *start-1, *end-1, *lower, *upper);
+}
+
+double pgagetrealfromgraycode_(PGAContext **ftx, int *p, int *pop,
+     int *start, int *end, double *lower, double *upper)
+{
+     return PGAGetRealFromGrayCode(*ftx,
+          *p == PGA_TEMP1 || *p == PGA_TEMP2 ? *p :
+          *p - 1,
+          *pop, *start-1, *end-1, *lower, *upper);
+}
+
+void pgaencoderealasbinary_(PGAContext **ftx, int *p, int *pop,
+     int *start, int *end, double *lower, double *upper,
+     double *value)
+{
+     PGAEncodeRealAsBinary(*ftx,
+          *p == PGA_TEMP1 || *p == PGA_TEMP2 ? *p :
+          *p - 1,
+          *pop, *start-1, *end-1, *lower, *upper, *value);
+}
+
+void pgaencoderealasgraycode_(PGAContext **ftx, int *p, int *pop,
+     int *start, int *end, double *lower, double *upper,
+     double *value)
+{
+     PGAEncodeRealAsGrayCode(*ftx,
+          *p == PGA_TEMP1 || *p == PGA_TEMP2 ? *p :
+          *p - 1,
+          *pop, *start-1, *end-1, *lower, *upper, *value);
+}
+
+int pgagetintegerfrombinary_(PGAContext **ftx, int *p, int *pop,
+     int *start, int *end)
+{
+     return PGAGetIntegerFromBinary(*ftx,
+          *p == PGA_TEMP1 || *p == PGA_TEMP2 ? *p :
+          *p - 1,
+          *pop, *start-1, *end-1);
+}
+
+int pgagetintegerfromgraycode_(PGAContext **ftx, int *p, int *pop,
+     int *start, int *end)
+{
+     return PGAGetIntegerFromGrayCode(*ftx,
+          *p == PGA_TEMP1 || *p == PGA_TEMP2 ? *p :
+          *p - 1,
+          *pop, *start-1, *end-1);
+}
+
+void pgaencodeintegerasbinary_(PGAContext **ftx, int *p, int *pop,
+     int*start, int *end, int *value)
+{
+     PGAEncodeIntegerAsBinary(*ftx,
+          *p == PGA_TEMP1 || *p == PGA_TEMP2 ? *p :
+          *p - 1,
+          *pop, *start-1, *end-1, *value);
+}
+
+void pgaencodeintegerasgraycode_(PGAContext **ftx, int *p, int *pop,
+     int*start, int *end, int *value)
+{
+     PGAEncodeIntegerAsGrayCode(*ftx,
+          *p == PGA_TEMP1 || *p == PGA_TEMP2 ? *p :
+          *p - 1,
+          *pop, *start-1, *end-1, *value);
+}
+
+void pgafitness_(PGAContext **ftx, int *popindex)
+{
+     PGAFitness  (*ftx, *popindex);
+}
+
+int pgarank_(PGAContext **ftx, int *p, int *order, int *n)
+{
+    return PGARank(*ftx, *p-1, order, *n);
+}
+
+double pgagetfitness_(PGAContext **ftx, int *p, int *pop)
+{
+     return PGAGetFitness(*ftx, *p == PGA_TEMP1 || *p == PGA_TEMP2 ? *p : *p-1, *pop);
+}
+
+int pgagetfitnesstype_(PGAContext **ftx)
+{
+     return PGAGetFitnessType  (*ftx);
+}
+
+int pgagetfitnessmintype_(PGAContext **ftx)
+{
+     return PGAGetFitnessMinType  (*ftx);
+}
+
+double pgagetmaxfitnessrank_(PGAContext **ftx)
+{
+     return PGAGetMaxFitnessRank  (*ftx);
+}
+
+void pgasetfitnesstype_(PGAContext **ftx, int *fitness_type)
+{
+     PGASetFitnessType  (*ftx, *fitness_type);
+}
+
+void pgasetfitnessmintype_(PGAContext **ftx, int *fitness_type)
+{
+     PGASetFitnessMinType  (*ftx, *fitness_type);
+}
+
+void pgasetmaxfitnessrank_(PGAContext **ftx, double *fitness_rank_max)
+{
+     PGASetMaxFitnessRank  (*ftx, *fitness_rank_max);
+}
+
+void pgasetfitnesscmaxvalue_(PGAContext **ftx, double *val)
+{
+     PGASetFitnessCmaxValue  (*ftx, *val);
+}
+
+double pgagetfitnesscmaxvalue_(PGAContext **ftx)
+{
+     return PGAGetFitnessCmaxValue  (*ftx);
+}
+
+double pgahammingdistance_(PGAContext **ftx, int *popindex)
+{
+     return PGAHammingDistance  (*ftx, *popindex);
+}
+
+void pgasetintegerallele_(PGAContext **ftx, int *p, int *pop, int *i,
+     int *val)
+{
+     PGASetIntegerAllele(*ftx,
+	   *p == PGA_TEMP1 || *p == PGA_TEMP2 ? *p : *p - 1,
+	   *pop, *i-1, *val);
+}
+
+int pgagetintegerallele_(PGAContext **ftx, int *p, int *pop, int *i)
+{
+     return PGAGetIntegerAllele(*ftx,
+		  *p == PGA_TEMP1 || *p == PGA_TEMP2 ? *p : *p - 1,
+		  *pop, *i-1);
+}
+
+void pgasetintegerinitpermute_(PGAContext **ftx, int *min, int *max)
+{
+     PGASetIntegerInitPermute  (*ftx, *min, *max);
+}
+
+void pgasetintegerinitrange_ (PGAContext **ftx, int *min, int *max)
+{
+     PGASetIntegerInitRange(*ftx, min, max);
+}
+
+int pgagetintegerinittype_(PGAContext **ftx)
+{
+     return PGAGetIntegerInitType  (*ftx);
+}
+
+int pgagetminintegerinitvalue_ (PGAContext **ftx, int *i)
+{
+     return PGAGetMinIntegerInitValue(*ftx, *i-1);
+}
+
+int pgagetmaxintegerinitvalue_ (PGAContext **ftx, int *i)
+{
+     return PGAGetMaxIntegerInitValue(*ftx, *i-1);
+}
+
+void pgamutate_(PGAContext **ftx, int *p, int *pop)
+{
+     PGAMutate(*ftx,
+	   *p == PGA_TEMP1 || *p == PGA_TEMP2 ? *p : *p-1, *pop);
+}
+
+void pgasetmutationtype_(PGAContext **ftx, int *mutation_type)
+{
+     PGASetMutationType  (*ftx, *mutation_type);
+}
+
+int pgagetmutationtype_(PGAContext **ftx)
+{
+     return PGAGetMutationType  (*ftx);
+}
+
+void pgasetmutationrealvalue_(PGAContext **ftx, double *val)
+{
+     PGASetMutationRealValue  (*ftx, *val);
+}
+
+double pgagetmutationrealvalue_(PGAContext **ftx)
+{
+     return PGAGetMutationRealValue  (*ftx);
+}
+
+void pgasetmutationintegervalue_(PGAContext **ftx, int *val)
+{
+     PGASetMutationIntegerValue  (*ftx, *val);
+}
+
+int pgagetmutationintegervalue_(PGAContext **ftx)
+{
+     return PGAGetMutationIntegerValue  (*ftx);
+}
+
+void pgasetmutationboundedflag_(PGAContext **ftx, int *val)
+{
+     PGASetMutationBoundedFlag  (*ftx, *val);
+}
+
+int pgagetmutationboundedflag_(PGAContext **ftx)
+{
+     return PGAGetMutationBoundedFlag  (*ftx);
+}
+
+void pgasetmutationprob_(PGAContext **ftx, double *mutation_prob)
+{
+     PGASetMutationProb  (*ftx, *mutation_prob);
+}
+
+double pgagetmutationprob_(PGAContext **ftx)
+{
+     return PGAGetMutationProb  (*ftx);
+}
+
+void pgarungm_(PGAContext **ftx, double (*f)(PGAContext *, int, int),
+     MPI_Comm *comm)
+{
+     PGARunGM  (*ftx, (*f), *comm);
+}
+
+void pgaevaluate_(PGAContext **ftx, int *pop,
+     double (*f)(PGAContext *, int, int), MPI_Comm *comm)
+{
+     PGAEvaluate  (*ftx, *pop, (*f), *comm);
+}
+
+unsigned long pgabuilddatatype_(PGAContext **ftx, int *p, int *pop)
+{
+     return((unsigned long)PGABuildDatatype(*ftx, 
+                             *p == PGA_TEMP1 || *p == PGA_TEMP2 ? *p : *p - 1,
+                             *pop));
+}
+
+void pgasendindividual_(PGAContext **ftx, int *p, int *pop, int *dest, int *tag, MPI_Comm *comm)
+{
+     PGASendIndividual(*ftx, *p == PGA_TEMP1 || *p == PGA_TEMP2 ? *p : *p - 1,
+                       *pop, *dest, *tag, *comm);
+}
+
+void pgareceiveindividual_(PGAContext **ftx, int *p, int *pop, int *source, int *tag, MPI_Comm *comm, MPI_Status *status)
+{
+     PGAReceiveIndividual(*ftx, *p == PGA_TEMP1 || *p == PGA_TEMP2 ? *p : *p-1,
+                          *pop, *source, *tag, *comm, status);
+}
+
+void pgasendreceiveindividual_(PGAContext **ftx, int *send_p, int *send_pop, int *dest, int *send_tag, int *recv_p, int *recv_pop, int *source, int *recv_tag, MPI_Comm *comm, MPI_Status *status)
+{
+     PGASendReceiveIndividual(*ftx, 
+          *send_p == PGA_TEMP1 || *send_p == PGA_TEMP2 ? *send_p : *send_p - 1,
+          *send_pop, *dest, *send_tag, 
+          *recv_p == PGA_TEMP1 || *recv_p == PGA_TEMP2 ? *recv_p : *recv_p - 1,
+          *recv_pop, *source, *recv_tag, *comm, status);
+}
+
+int pgagetrank_(PGAContext **ftx, MPI_Comm *comm)
+{
+     return PGAGetRank  (*ftx, *comm);
+}
+
+int pgagetnumprocs_(PGAContext **ftx, MPI_Comm *comm)
+{
+     return PGAGetNumProcs  (*ftx, *comm);
+}
+
+void pgasetcommunicator_(PGAContext **ftx, MPI_Comm *comm)
+{
+     PGASetCommunicator  (*ftx, *comm);
+}
+
+MPI_Comm pgagetcommunicator_(PGAContext **ftx)
+{
+     return PGAGetCommunicator  (*ftx);
+}
+
+void pgarun_(PGAContext **ftx,
+     double (*evaluate)(PGAContext *c, int p, int pop))
+{
+     PGARun  (*ftx, (*evaluate));
+}
+
+void pgarunmutationandcrossover_(PGAContext **ftx, int *oldpop,
+     int *newpop)
+{
+     PGARunMutationAndCrossover  (*ftx, *oldpop, *newpop);
+}
+
+void pgarunmutationorcrossover_(PGAContext **ftx, int *oldpop, int *newpop)
+{
+     PGARunMutationOrCrossover  (*ftx, *oldpop, *newpop);
+}
+
+void pgaupdategeneration_(PGAContext **ftx, MPI_Comm *comm)
+{
+     PGAUpdateGeneration  (*ftx, *comm);
+}
+
+int pgagetdatatype_(PGAContext **ftx)
+{
+     return PGAGetDataType  (*ftx);
+}
+
+int pgagetoptdirflag_(PGAContext **ftx)
+{
+     return PGAGetOptDirFlag  (*ftx);
+}
+
+int pgagetstringlength_(PGAContext **ftx)
+{
+     return PGAGetStringLength  (*ftx);
+}
+
+int pgagetgaitervalue_(PGAContext **ftx)
+{
+     return PGAGetGAIterValue  (*ftx);
+}
+
+void pgasetmutationorcrossoverflag_(PGAContext **ftx, int *flag)
+{
+     PGASetMutationOrCrossoverFlag  (*ftx, *flag);
+}
+
+void pgasetmutationandcrossoverflag_(PGAContext **ftx, int *flag)
+{
+     PGASetMutationAndCrossoverFlag  (*ftx, *flag);
+}
+
+int pgagetmutationorcrossoverflag_(PGAContext **ftx)
+{
+     return PGAGetMutationOrCrossoverFlag  (*ftx);
+}
+
+int pgagetmutationandcrossoverflag_(PGAContext **ftx)
+{
+     return PGAGetMutationAndCrossoverFlag  (*ftx);
+}
+
+void pgasortpop_(PGAContext **ftx, int *pop)
+{
+     PGASortPop  (*ftx, *pop);
+}
+
+int pgagetpopsize_(PGAContext **ftx)
+{
+     return PGAGetPopSize  (*ftx);
+}
+
+int pgagetnumreplacevalue_(PGAContext **ftx)
+{
+     return PGAGetNumReplaceValue  (*ftx);
+}
+
+int pgagetpopreplacetype_(PGAContext **ftx)
+{
+     return PGAGetPopReplaceType  (*ftx);
+}
+
+int pgagetsortedpopindex_(PGAContext **ftx, int *n)
+{
+     return PGAGetSortedPopIndex(*ftx, *n-1);
+}
+
+void pgasetpopsize_(PGAContext **ftx, int *popsize)
+{
+     PGASetPopSize  (*ftx, *popsize);
+}
+
+void pgasetnumreplacevalue_(PGAContext **ftx, int *pop_replace)
+{
+     PGASetNumReplaceValue  (*ftx, *pop_replace);
+}
+
+void pgasetpopreplacetype_(PGAContext **ftx, int *pop_replace)
+{
+     PGASetPopReplaceType  (*ftx, *pop_replace);
+}
+
+int pgarandomflip_(PGAContext **ftx, double *p)
+{
+     return PGARandomFlip  (*ftx, *p);
+}
+
+int pgarandominterval_(PGAContext **ftx, int *start, int *end)
+{
+     return PGARandomInterval  (*ftx, *start, *end);
+}
+
+double pgarandom01_(PGAContext **ftx, int *newseed)
+{
+     return PGARandom01  (*ftx, *newseed);
+}
+
+double pgarandomuniform_(PGAContext **ftx, double *start, double *end)
+{
+     return PGARandomUniform  (*ftx, *start, *end);
+}
+
+double pgarandomgaussian_(PGAContext **ftx, double *mean, double *sigma)
+{
+     return PGARandomGaussian  (*ftx, *mean, *sigma);
+}
+
+int pgagetrandomseed_(PGAContext **ftx)
+{
+     return PGAGetRandomSeed  (*ftx);
+}
+
+void pgasetrandomseed_(PGAContext **ftx, int *seed)
+{
+     PGASetRandomSeed  (*ftx, *seed);
+}
+
+void pgasetrealallele_(PGAContext **ftx, int *p, int *pop, int *i,
+     double *val)
+{
+     PGASetRealAllele(*ftx,
+	   *p == PGA_TEMP1 || *p == PGA_TEMP2 ? *p : *p - 1,
+	   *pop, *i-1, *val);
+}
+
+double pgagetrealallele_(PGAContext **ftx, int *p, int *pop, int *i)
+{
+     return PGAGetRealAllele(*ftx,
+		  *p == PGA_TEMP1 || *p == PGA_TEMP2 ? *p : *p - 1,
+		  *pop, *i-1);
+}
+
+void pgasetrealinitpercent_(PGAContext **ftx, double *median, double *percent)
+{
+     PGASetRealInitPercent(*ftx, median, percent);
+}
+
+void pgasetrealinitrange_ (PGAContext **ftx, double *min, double *max)
+{
+     PGASetRealInitRange(*ftx, min, max);
+}
+
+double pgagetminrealinitvalue_(PGAContext **ftx, int *i)
+{
+     return PGAGetMinRealInitValue(*ftx, *i-1);
+}
+
+double pgagetmaxrealinitvalue_(PGAContext **ftx, int *i)
+{
+     return PGAGetMaxRealInitValue(*ftx, *i-1);
+}
+
+int pgagetrealinittype_(PGAContext **ftx)
+{
+     return PGAGetRealInitType  (*ftx);
+}
+
+void pgaprintreport_(PGAContext **ftx, char *name, int *pop, int len)
+/* FORTRAN implicitly passes the length of name into len. */
+{
+     FILE *fp;
+     if (name[len] != 0)
+	  name[len] = 0;
+     if (!strcmp(name, "STDOUT") || !strcmp(name, "stdout"))
+     {
+	  fp = stdout;
+	  PGAPrintReport(*ftx, fp, *pop);
+     }
+     else if (!strcmp(name, "STDERR") || !strcmp(name, "stderr"))
+     {
+	  fp = stderr;
+	  PGAPrintReport(*ftx, fp, *pop);
+     }
+     else
+     {
+	  fp = fopen(name, "a");
+	  if (!fp)
+	       PGAError(*ftx, "PGAPrintReport: Could not open file:",
+			     PGA_FATAL, PGA_CHAR, (void *) name);
+	  else
+	  {
+	       PGAPrintReport(*ftx, fp, *pop);
+	       fclose(fp);
+	  }
+     }
+}
+
+void pgasetprintoptions_(PGAContext **ftx, int *option)
+{
+     PGASetPrintOptions  (*ftx, *option);
+}
+
+void pgasetprintfrequencyvalue_(PGAContext **ftx, int *print_freq)
+{
+     PGASetPrintFrequencyValue  (*ftx, *print_freq);
+}
+
+int pgagetprintfrequencyvalue_(PGAContext **ftx)
+{
+     return PGAGetPrintFrequencyValue  (*ftx);
+}
+
+void pgaprintpopulation_(PGAContext **ftx, char *name, int *pop, int len)
+/* FORTRAN implicitly passes the length of name into len. */
+{
+     FILE *fp;
+     if (name[len] != 0)
+	  name[len] = 0;
+     if (!strcmp(name, "STDOUT") || !strcmp(name, "stdout"))
+     {
+	  fp = stdout;
+	  PGAPrintPopulation(*ftx, fp, *pop);
+     }
+     else if (!strcmp(name, "STDERR") || !strcmp(name, "stderr"))
+     {
+	  fp = stderr;
+	  PGAPrintPopulation(*ftx, fp, *pop);
+     }
+     else
+     {
+	  fp = fopen(name, "a");
+	  if (!fp)
+	       PGAError(*ftx, "PGAPrintPopulation: Could not open file:",
+			     PGA_FATAL, PGA_CHAR, (void *) name);
+	  else
+	  {
+	       PGAPrintPopulation(*ftx, fp, *pop);
+	       fclose(fp);
+	  }
+     }
+}
+
+void pgaprintindividual_ (PGAContext **ftx, char *name, int *p,
+     int *pop, int len)
+          /* FORTRAN implicitly passes the length of name into len. */
+{
+     FILE *fp;
+     if (name[len] != 0)
+	  name[len] = 0;
+     if (!strcmp(name, "STDOUT") || !strcmp(name, "stdout"))
+     {
+	  fp = stdout;
+	  PGAPrintIndividual(*ftx, fp, *p == PGA_TEMP1 || *p == PGA_TEMP2 ? *p : *p - 1,
+		*pop);
+     }
+     else if (!strcmp(name, "STDERR") || !strcmp(name, "stderr"))
+     {
+	  fp = stderr;
+	  PGAPrintIndividual(*ftx, fp, *p == PGA_TEMP1 || *p == PGA_TEMP2 ? *p : *p - 1,
+		*pop);
+     }
+     else
+     {
+	  fp = fopen(name, "a");
+	  if (!fp)
+	       PGAError(*ftx, "PGAPrintIndividual: Could not open file:",
+			     PGA_FATAL, PGA_CHAR, (void *) name);
+	  else
+	  {
+	       PGAPrintIndividual(*ftx, fp, *p == PGA_TEMP1 || *p == PGA_TEMP2 ? *p : *p - 1,
+		     *pop);
+	       fclose(fp);
+	  }
+     }
+}
+
+void pgaprintstring_ (PGAContext **ftx, char *name, int *p,
+     int *pop, int len)
+          /* FORTRAN implicitly passes the length of name into len. */
+{
+     FILE *fp;
+     if (name[len] != 0)
+	  name[len] = 0;
+     if (!strcmp(name, "STDOUT") || !strcmp(name, "stdout"))
+     {
+	  fp = stdout;
+	  PGAPrintString(*ftx, fp, *p == PGA_TEMP1 || *p == PGA_TEMP2 ? *p : *p - 1,
+		*pop);
+     }
+     else if (!strcmp(name, "STDERR") || !strcmp(name, "stderr"))
+     {
+	  fp = stderr;
+	  PGAPrintString(*ftx, fp, *p == PGA_TEMP1 || *p == PGA_TEMP2 ? *p : *p - 1,
+		*pop);
+     }
+     else
+     {
+	  fp = fopen(name, "a");
+	  if (!fp)
+	       PGAError(*ftx, "PGAPrintString: Could not open file:",
+			     PGA_FATAL, PGA_CHAR, (void *) name);
+	  else
+	  {
+	       PGAPrintString(*ftx, fp, *p == PGA_TEMP1 || *p == PGA_TEMP2 ? *p : *p - 1,
+		     *pop);
+	       fclose(fp);
+	  }
+     }
+}
+
+void pgaprintcontextvariable_(PGAContext **ftx, char *name, int len)
+/* FORTRAN implicitly passes the length of name into len. */
+{
+     FILE *fp;
+     if (name[len] != 0)
+	  name[len] = 0;
+     if (!strcmp(name, "STDOUT") || !strcmp(name, "stdout"))
+     {
+	  fp = stdout;
+	  PGAPrintContextVariable(*ftx, fp);
+     }
+     else if (!strcmp(name, "STDERR") || !strcmp(name, "stderr"))
+     {
+	  fp = stderr;
+	  PGAPrintContextVariable(*ftx, fp);
+     }
+     else
+     {
+	  fp = fopen(name, "a");
+	  if (!fp)
+	       PGAError(*ftx, "PGAPrintContextVariable: Could not open file:",
+			     PGA_FATAL, PGA_CHAR, (void *) name);
+	  else
+	  {
+	       PGAPrintContextVariable(*ftx, fp);
+	       fclose(fp);
+	  }
+     }
+}
+
+void pgarestart_(PGAContext **ftx, int *source_pop, int *dest_pop)
+{
+     PGARestart  (*ftx, *source_pop, *dest_pop);
+}
+
+void pgasetrestartflag_(PGAContext **ftx, int *val)
+{
+     PGASetRestartFlag  (*ftx, *val);
+}
+
+int pgagetrestartflag_(PGAContext **ftx)
+{
+     return PGAGetRestartFlag  (*ftx);
+}
+
+void pgasetrestartfrequencyvalue_(PGAContext **ftx, int *numiter)
+{
+     PGASetRestartFrequencyValue  (*ftx, *numiter);
+}
+
+int pgagetrestartfrequencyvalue_(PGAContext **ftx)
+{
+     return PGAGetRestartFrequencyValue  (*ftx);
+}
+
+void pgasetrestartallelechangeprob_(PGAContext **ftx, double *prob)
+{
+     PGASetRestartAlleleChangeProb  (*ftx, *prob);
+}
+
+double pgagetrestartallelechangeprob_(PGAContext **ftx)
+{
+     return PGAGetRestartAlleleChangeProb  (*ftx);
+}
+
+void pgaselect_(PGAContext **ftx, int *popix)
+{
+     PGASelect  (*ftx, *popix);
+}
+
+int pgaselectnextindex_(PGAContext **ftx)
+{
+     return PGASelectNextIndex  (*ftx);
+}
+
+void pgasetselecttype_(PGAContext **ftx, int *select_type)
+{
+     PGASetSelectType  (*ftx, *select_type);
+}
+
+int pgagetselecttype_(PGAContext **ftx)
+{
+     return PGAGetSelectType  (*ftx);
+}
+
+void pgasetptournamentprob_(PGAContext **ftx, double *ptournament_prob)
+{
+     PGASetPTournamentProb  (*ftx, *ptournament_prob);
+}
+
+double pgagetptournamentprob_(PGAContext **ftx)
+{
+     return PGAGetPTournamentProb  (*ftx);
+}
+
+int pgadone_(PGAContext **ftx, MPI_Comm *comm)
+{
+     return PGADone  (*ftx, *comm);
+}
+
+int pgacheckstoppingconditions_(PGAContext **ftx)
+{
+     return PGACheckStoppingConditions  (*ftx);
+}
+
+void pgasetstoppingruletype_(PGAContext **ftx, int *stoprule)
+{
+     PGASetStoppingRuleType  (*ftx, *stoprule);
+}
+
+int pgagetstoppingruletype_(PGAContext **ftx)
+{
+     return PGAGetStoppingRuleType  (*ftx);
+}
+
+void pgasetmaxgaitervalue_(PGAContext **ftx, int *maxiter)
+{
+     PGASetMaxGAIterValue  (*ftx, *maxiter);
+}
+
+int pgagetmaxgaitervalue_(PGAContext **ftx)
+{
+     return PGAGetMaxGAIterValue  (*ftx);
+}
+
+void pgasetmaxnochangevalue_(PGAContext **ftx, int *max_no_change)
+{
+     PGASetMaxNoChangeValue  (*ftx, *max_no_change);
+}
+
+void pgasetmaxsimilarityvalue_(PGAContext **ftx, int *max_similarity)
+{
+     PGASetMaxSimilarityValue  (*ftx, *max_similarity);
+}
+
+void pgaerror_(PGAContext **ftx, char *msg, int *level, int *datatype,
+     void **data, int len)
+/* FORTRAN implicitly passes the length of msg into len. */
+{
+     if (msg[len] != 0)
+	  msg[len] = 0;
+     PGAError (*ftx, msg, *level, *datatype, *data);
+}
+
+void pgadestroy_(PGAContext **ftx)
+{
+     PGADestroy  (*ftx);
+}
+
+int pgagetmaxmachineintvalue_(PGAContext **ftx)
+{
+     return PGAGetMaxMachineIntValue  (*ftx);
+}
+
+int pgagetminmachineintvalue_(PGAContext **ftx)
+{
+     return PGAGetMinMachineIntValue  (*ftx);
+}
+
+double pgagetmaxmachinedoublevalue_(PGAContext **ftx)
+{
+     return PGAGetMaxMachineDoubleValue  (*ftx);
+}
+
+double pgagetminmachinedoublevalue_(PGAContext **ftx)
+{
+     return PGAGetMinMachineDoubleValue  (*ftx);
+}
+
+void pgausage_(PGAContext **ftx)
+{
+     PGAUsage  (*ftx);
+}
+
+void pgaprintversionnumber_(PGAContext **ftx)
+{
+     PGAPrintVersionNumber  (*ftx);
+}
+
+void pgasetuserfunction_(PGAContext **ftx, int *constant, void *f)
+{
+     PGASetUserFunction(*ftx, *constant, f);
+}
+
+double pgamean_(PGAContext **ftx, double *a, int *n)
+{
+     return PGAMean(*ftx, a, *n);
+}
+
+double pgastddev_(PGAContext **ftx, double *a, int *n, double *m)
+{
+     return PGAStddev(*ftx, a, *n, *m);
+}
+
+int pgaround_(PGAContext **ftx, double *x)
+{
+     return PGARound  (*ftx, *x);
+}
+
+void pgacopyindividual_(PGAContext **ftx, int *i, int *p1, int *j, int *p2)
+{
+     PGACopyIndividual(*ftx,
+	   *i == PGA_TEMP1 || *i == PGA_TEMP2 ? *i : *i-1,
+	   *p1,
+	   *j == PGA_TEMP1 || *j == PGA_TEMP2 ? *j : *j-1,
+	   *p2);
+}
+
+int pgachecksum_(PGAContext **ftx, int *p, int *pop)
+{
+     return PGACheckSum(*ftx, *p == PGA_TEMP1 || *p == PGA_TEMP2 ? *p : *p-1, *pop);
+}
+
+int pgagetworstindex_(PGAContext **ftx, int *pop)
+{
+     return PGAGetWorstIndex(*ftx, *pop) + 1;
+}
+
+int pgagetbestindex_(PGAContext **ftx, int *pop)
+{
+     return PGAGetBestIndex(*ftx, *pop) + 1;
+}
+