/* If you are using a C++ compiler, append the following to f2c.h
   for compiling libF77 and libI77. */

#ifdef __cplusplus
extern "C"
{
  extern int abort_ (void);
  extern double c_abs (complex *);
  extern void c_cos (complex *, complex *);
  extern void c_div (complex *, complex *, complex *);
  extern void c_exp (complex *, complex *);
  extern void c_log (complex *, complex *);
  extern void c_sin (complex *, complex *);
  extern void c_sqrt (complex *, complex *);
  extern double d_abs (double *);
  extern double d_acos (double *);
  extern double d_asin (double *);
  extern double d_atan (double *);
  extern double d_atn2 (double *, double *);
  extern void d_cnjg (doublecomplex *, doublecomplex *);
  extern double d_cos (double *);
  extern double d_cosh (double *);
  extern double d_dim (double *, double *);
  extern double d_exp (double *);
  extern double d_imag (doublecomplex *);
  extern double d_int (double *);
  extern double d_lg10 (double *);
  extern double d_log (double *);
  extern double d_mod (double *, double *);
  extern double d_nint (double *);
  extern double d_prod (float *, float *);
  extern double d_sign (double *, double *);
  extern double d_sin (double *);
  extern double d_sinh (double *);
  extern double d_sqrt (double *);
  extern double d_tan (double *);
  extern double d_tanh (double *);
  extern double derf_ (double *);
  extern double derfc_ (double *);
  extern integer do_fio (ftnint *, char *, ftnlen);
  extern integer do_lio (ftnint *, ftnint *, char *, ftnlen);
  extern integer do_uio (ftnint *, char *, ftnlen);
  extern integer e_rdfe (void);
  extern integer e_rdue (void);
  extern integer e_rsfe (void);
  extern integer e_rsfi (void);
  extern integer e_rsle (void);
  extern integer e_rsli (void);
  extern integer e_rsue (void);
  extern integer e_wdfe (void);
  extern integer e_wdue (void);
  extern integer e_wsfe (void);
  extern integer e_wsfi (void);
  extern integer e_wsle (void);
  extern integer e_wsli (void);
  extern integer e_wsue (void);
  extern int ef1asc_ (ftnint *, ftnlen *, ftnint *, ftnlen *);
  extern integer ef1cmc_ (ftnint *, ftnlen *, ftnint *, ftnlen *);
  extern double erf (double);
  extern double erf_ (float *);
  extern double erfc (double);
  extern double erfc_ (float *);
  extern integer f_back (alist *);
  extern integer f_clos (cllist *);
  extern integer f_end (alist *);
  extern void f_exit (void);
  extern integer f_inqu (inlist *);
  extern integer f_open (olist *);
  extern integer f_rew (alist *);
  extern int flush_ (void);
  extern void getarg_ (integer *, char *, ftnlen);
  extern void getenv_ (char *, char *, ftnlen, ftnlen);
  extern short h_abs (short *);
  extern short h_dim (short *, short *);
  extern short h_dnnt (double *);
  extern short h_indx (char *, char *, ftnlen, ftnlen);
  extern short h_len (char *, ftnlen);
  extern short h_mod (short *, short *);
  extern short h_nint (float *);
  extern short h_sign (short *, short *);
  extern short hl_ge (char *, char *, ftnlen, ftnlen);
  extern short hl_gt (char *, char *, ftnlen, ftnlen);
  extern short hl_le (char *, char *, ftnlen, ftnlen);
  extern short hl_lt (char *, char *, ftnlen, ftnlen);
  extern integer i_abs (integer *);
  extern integer i_dim (integer *, integer *);
  extern integer i_dnnt (double *);
  extern integer i_indx (char *, char *, ftnlen, ftnlen);
  extern integer i_len (char *, ftnlen);
  extern integer i_mod (integer *, integer *);
  extern integer i_nint (float *);
  extern integer i_sign (integer *, integer *);
  extern integer iargc_ (void);
  extern ftnlen l_ge (char *, char *, ftnlen, ftnlen);
  extern ftnlen l_gt (char *, char *, ftnlen, ftnlen);
  extern ftnlen l_le (char *, char *, ftnlen, ftnlen);
  extern ftnlen l_lt (char *, char *, ftnlen, ftnlen);
  extern void pow_ci (complex *, complex *, integer *);
  extern double pow_dd (double *, double *);
  extern double pow_di (double *, integer *);
  extern short pow_hh (short *, shortint *);
  extern integer pow_ii (integer *, integer *);
  extern double pow_ri (float *, integer *);
  extern void pow_zi (doublecomplex *, doublecomplex *, integer *);
  extern void pow_zz (doublecomplex *, doublecomplex *, doublecomplex *);
  extern double r_abs (float *);
  extern double r_acos (float *);
  extern double r_asin (float *);
  extern double r_atan (float *);
  extern double r_atn2 (float *, float *);
  extern void r_cnjg (complex *, complex *);
  extern double r_cos (float *);
  extern double r_cosh (float *);
  extern double r_dim (float *, float *);
  extern double r_exp (float *);
  extern double r_imag (complex *);
  extern double r_int (float *);
  extern double r_lg10 (float *);
  extern double r_log (float *);
  extern double r_mod (float *, float *);
  extern double r_nint (float *);
  extern double r_sign (float *, float *);
  extern double r_sin (float *);
  extern double r_sinh (float *);
  extern double r_sqrt (float *);
  extern double r_tan (float *);
  extern double r_tanh (float *);
  extern void s_cat (char *, char **, integer *, integer *, ftnlen);
  extern integer s_cmp (char *, char *, ftnlen, ftnlen);
  extern void s_copy (char *, char *, ftnlen, ftnlen);
  extern int s_paus (char *, ftnlen);
  extern integer s_rdfe (cilist *);
  extern integer s_rdue (cilist *);
  extern integer s_rnge (char *, integer, char *, integer);
  extern integer s_rsfe (cilist *);
  extern integer s_rsfi (icilist *);
  extern integer s_rsle (cilist *);
  extern integer s_rsli (icilist *);
  extern integer s_rsne (cilist *);
  extern integer s_rsni (icilist *);
  extern integer s_rsue (cilist *);
  extern int s_stop (char *, ftnlen);
  extern integer s_wdfe (cilist *);
  extern integer s_wdue (cilist *);
  extern integer s_wsfe (cilist *);
  extern integer s_wsfi (icilist *);
  extern integer s_wsle (cilist *);
  extern integer s_wsli (icilist *);
  extern integer s_wsne (cilist *);
  extern integer s_wsni (icilist *);
  extern integer s_wsue (cilist *);
  extern void sig_die (char *, int);
  extern integer signal_ (integer *, void (*)(int));
  extern integer system_ (char *, ftnlen);
  extern double z_abs (doublecomplex *);
  extern void z_cos (doublecomplex *, doublecomplex *);
  extern void z_div (doublecomplex *, doublecomplex *, doublecomplex *);
  extern void z_exp (doublecomplex *, doublecomplex *);
  extern void z_log (doublecomplex *, doublecomplex *);
  extern void z_sin (doublecomplex *, doublecomplex *);
  extern void z_sqrt (doublecomplex *, doublecomplex *);
}
#endif
