#ifndef _sprngf_h_
#define SPRNG_DEFAULT 0
#define CRAYLCG 0
#define DRAND48 1
#define FISH1 2
#define FISH2 3
#define FISH3 4
#define FISH4 5
#define FISH5 6
#define LECU1 0
#define LECU2 1
#define LECU3 2
#define LAG1279 0
#define LAG17 1
#define LAG31 2
#define LAG55 3
#define LAG63 4
#define LAG127 5
#define LAG521 6
#define LAG521B 7
#define LAG607 8
#define LAG607B 9
#define LAG1279B 10
#ifdef CHECK_POINTERS
#define CHECK 1
#else
#define CHECK 0
#endif /* ifdef CHECK_POINTERS */
#define MAX_PACKED_LENGTH 24000
#ifdef POINTER_SIZE
#if POINTER_SIZE == 8
#define SPRNG_POINTER integer*8
#else
#define SPRNG_POINTER integer*4
#endif
#else
#define SPRNG_POINTER integer*4
#endif /* ifdef POINTER_SIZE */
#ifdef USE_MPI
#define make_sprng_seed fseed_mpi
#else
#define make_sprng_seed fmake_new_seed
#endif
#endif /* ifdef _sprng_h */
#ifdef USE_MPI
external fseed_mpi
integer fseed_mpi
#else
external fmake_new_seed
integer fmake_new_seed
#endif
#ifndef DEFAULTINT
#define DEFAULTINT
#endif
#ifndef FLOAT_GEN
#define DBLGEN
#endif
#if defined(SIMPLE_SPRNG)
#undef DEFAULTINT
#ifndef _sprngf_h_
#define pack_sprng fpack_rng_simple
#define unpack_sprng funpack_rng_simple
#ifdef USE_MPI
#define isprng fget_rn_int_simmpi
#define init_sprng finit_rng_simmpi
#else
#define isprng fget_rn_int_sim
#define init_sprng finit_rng_sim
#endif /* ifdef USE_MPI */
#define print_sprng fprint_rng_simple
#if defined(FLOAT_GEN) && defined(USE_MPI)
#define sprng fget_rn_flt_simmpi
#endif
#if defined(FLOAT_GEN) && !defined(USE_MPI)
#define sprng fget_rn_flt_sim
#endif
#if defined(DBLGEN) && defined(USE_MPI)
#define sprng fget_rn_dbl_simmpi
#endif
#if defined(DBLGEN) && !defined(USE_MPI)
#define sprng fget_rn_dbl_sim
#endif
#endif /* ifdef _sprng_h */
external isprng
external fget_rn_dbl_sim, fget_rn_flt_sim
external init_sprng, fpack_rng_simple
external funpack_rng_simple, fprint_rng_simple
#ifdef USE_MPI
external fget_rn_flt_simmpi, fget_rn_dbl_simmpi
real*4 fget_rn_flt_simmpi
real*8 fget_rn_dbl_simmpi
#endif
integer isprng,fpack_rng_simple,fprint_rng_simple
SPRNG_POINTER init_sprng, funpack_rng_simple
real*4 fget_rn_flt_sim
real*8 fget_rn_dbl_sim
#endif
#if defined(CHECK_POINTERS)
#undef DEFAULTINT
external fget_rn_int_ptr, fget_rn_flt_ptr, fget_rn_dbl_ptr
external fspawn_rng_ptr, ffree_rng_ptr, finit_rng_ptr
external fpack_rng_ptr, funpack_rng_ptr, fprint_rng_ptr
integer fget_rn_int_ptr, ffree_rng_ptr, fpack_rng_ptr
SPRNG_POINTER finit_rng_ptr, funpack_rng_ptr
integer fspawn_rng_ptr, fprint_rng_ptr
real*4 fget_rn_flt_ptr
real*8 fget_rn_dbl_ptr
#ifndef _sprngf_h_
#define isprng fget_rn_int_ptr
#define free_sprng ffree_rng_ptr
#define spawn_sprng(A,B,C) fspawn_rng_ptr(A,B,C,CHECK)
#define pack_sprng fpack_rng_ptr
#define unpack_sprng funpack_rng_ptr
#define init_sprng finit_rng_ptr
#define print_sprng fprint_rng_ptr
#ifdef FLOAT_GEN
#define sprng fget_rn_flt_ptr
#else
#define sprng fget_rn_dbl_ptr
#endif
#endif
#endif
#if defined(DEFAULTINT)
external fget_rn_int, fget_rn_flt, fget_rn_dbl
external fspawn_rng, ffree_rng, finit_rng
external fpack_rng, funpack_rng, fprint_rng
integer fget_rn_int, ffree_rng, fpack_rng
SPRNG_POINTER finit_rng, funpack_rng
integer fspawn_rng, fprint_rng
real*4 fget_rn_flt
real*8 fget_rn_dbl
#ifndef _sprngf_h_
#define isprng fget_rn_int
#define free_sprng ffree_rng
#define spawn_sprng(A,B,C) fspawn_rng(A,B,C,CHECK)
#define pack_sprng fpack_rng
#define unpack_sprng funpack_rng
#define init_sprng finit_rng
#define print_sprng fprint_rng
#ifdef FLOAT_GEN
#define sprng fget_rn_flt
#else
#define sprng fget_rn_dbl
#endif
#endif
#endif
#ifndef _sprngf_h_
#define _sprngf_h_
#endif