/*

-Header_File f2cMang.h ( f2c external symbol mangling )

-Abstract

   Define macros that mangle the external symbols in the f2c F77 and I77
   libraries.
      
-Disclaimer

   THIS SOFTWARE AND ANY RELATED MATERIALS WERE CREATED BY THE
   CALIFORNIA INSTITUTE OF TECHNOLOGY (CALTECH) UNDER A U.S.
   GOVERNMENT CONTRACT WITH THE NATIONAL AERONAUTICS AND SPACE
   ADMINISTRATION (NASA). THE SOFTWARE IS TECHNOLOGY AND SOFTWARE
   PUBLICLY AVAILABLE UNDER U.S. EXPORT LAWS AND IS PROVIDED "AS-IS"
   TO THE RECIPIENT WITHOUT WARRANTY OF ANY KIND, INCLUDING ANY
   WARRANTIES OF PERFORMANCE OR MERCHANTABILITY OR FITNESS FOR A
   PARTICULAR USE OR PURPOSE (AS SET FORTH IN UNITED STATES UCC
   SECTIONS 2312-2313) OR FOR ANY PURPOSE WHATSOEVER, FOR THE
   SOFTWARE AND RELATED MATERIALS, HOWEVER USED.

   IN NO EVENT SHALL CALTECH, ITS JET PROPULSION LABORATORY, OR NASA
   BE LIABLE FOR ANY DAMAGES AND/OR COSTS, INCLUDING, BUT NOT
   LIMITED TO, INCIDENTAL OR CONSEQUENTIAL DAMAGES OF ANY KIND,
   INCLUDING ECONOMIC DAMAGE OR INJURY TO PROPERTY AND LOST PROFITS,
   REGARDLESS OF WHETHER CALTECH, JPL, OR NASA BE ADVISED, HAVE
   REASON TO KNOW, OR, IN FACT, SHALL KNOW OF THE POSSIBILITY.

   RECIPIENT BEARS ALL RISK RELATING TO QUALITY AND PERFORMANCE OF
   THE SOFTWARE AND ANY RELATED MATERIALS, AND AGREES TO INDEMNIFY
   CALTECH AND NASA FOR ALL THIRD-PARTY CLAIMS RESULTING FROM THE
   ACTIONS OF RECIPIENT IN THE USE OF THE SOFTWARE.

-Required_Reading

   None.
   
-Particulars

   This header supports linking CSPICE into executables that
   also link in objects compiled from Fortran, in particular
   ones that perform Fortran I/O.  To enable this odd mix,
   one defines the  preprocessor flag

      MIX_C_AND_FORTRAN

   This macro is undefined by default, since the action it invokes
   is usually not desirable.  When the flag is defined, this header
   defines macros that mangle the f2c library external symbols:
   the symbol

      xxx

   gets mapped to 

      xxx_f2c

   This mangling prevents name collisions between the f2c 
   implementations of the F77 and I77 library routines and those 
   in the corresponding Fortran libraries on a host system.
   
   The set of external symbols defined in the f2c libraries can
   be determined by combining objects from both F77 and I77 into
   a single Unix archive libarary, then running the Unix utility
   nm on the that archive.  If available, an nm option that selects
   only external symbols should be invoked.

-Literature_References

   None.

-Author_and_Institution

   N.J. Bachman       (JPL)
   
-Restrictions

   1) It is recommended that use of the features implemented by this
      header be avoided if at all possible.  There are robustness and
      portability problems associated with linking Fortran and C objects
      together in one executable.

   2) When f2c external symbol name mangling is invoked, objects
      derived from C code translated from Fortran by f2c won't
      link against CSPICE any longer, if these objects reference
      the standard f2c external symbols.

   3) The features implemented by this header have been tested only
      under the Sun Solaris GCC, Sun Solaris native ANSI C, and
      PC/Linux/gcc environments.

-Version

   -CSPICE Version 2.0.1, 07-MAR-2009 (NJB)

       Restrictions header section was updated to note successful
       testing on the PC/Linux/gcc platform.

   -CSPICE Version 2.0.0, 19-DEC-2001 (NJB)

*/


   /*
   Define masking macros for f2c external symbols.
   */
   #ifdef  MIX_C_AND_FORTRAN

      /*
      Define the macros only once, if they need to be defined.
      */
      #ifndef F2C_MANGLING_DONE

         #define F77_aloc  F77_aloc_f2c 
         #define F_err  F_err_f2c 
         #define L_len  L_len_f2c 
         #define abort_  abort__f2c 
         #define b_char  b_char_f2c 
         #define c_abs  c_abs_f2c 
         #define c_cos  c_cos_f2c 
         #define c_dfe  c_dfe_f2c 
         #define c_div  c_div_f2c 
         #define c_due  c_due_f2c 
         #define c_exp  c_exp_f2c 
         #define c_le  c_le_f2c 
         #define c_log  c_log_f2c 
         #define c_sfe  c_sfe_f2c 
         #define c_si  c_si_f2c 
         #define c_sin  c_sin_f2c 
         #define c_sqrt  c_sqrt_f2c 
         #define c_sue  c_sue_f2c 
         #define d_abs  d_abs_f2c 
         #define d_acos  d_acos_f2c 
         #define d_asin  d_asin_f2c 
         #define d_atan  d_atan_f2c 
         #define d_atn2  d_atn2_f2c 
         #define d_cnjg  d_cnjg_f2c 
         #define d_cos  d_cos_f2c 
         #define d_cosh  d_cosh_f2c 
         #define d_dim  d_dim_f2c 
         #define d_exp  d_exp_f2c 
         #define d_imag  d_imag_f2c 
         #define d_int  d_int_f2c 
         #define d_lg10  d_lg10_f2c 
         #define d_log  d_log_f2c 
         #define d_mod  d_mod_f2c 
         #define d_nint  d_nint_f2c 
         #define d_prod  d_prod_f2c 
         #define d_sign  d_sign_f2c 
         #define d_sin  d_sin_f2c 
         #define d_sinh  d_sinh_f2c 
         #define d_sqrt  d_sqrt_f2c 
         #define d_tan  d_tan_f2c 
         #define d_tanh  d_tanh_f2c 
         #define derf_  derf__f2c 
         #define derfc_  derfc__f2c 
         #define do_fio  do_fio_f2c 
         #define do_lio  do_lio_f2c 
         #define do_ud  do_ud_f2c 
         #define do_uio  do_uio_f2c 
         #define do_us  do_us_f2c 
         #define dtime_  dtime__f2c 
         #define e_rdfe  e_rdfe_f2c 
         #define e_rdue  e_rdue_f2c 
         #define e_rsfe  e_rsfe_f2c 
         #define e_rsfi  e_rsfi_f2c 
         #define e_rsle  e_rsle_f2c 
         #define e_rsli  e_rsli_f2c 
         #define e_rsue  e_rsue_f2c 
         #define e_wdfe  e_wdfe_f2c 
         #define e_wdue  e_wdue_f2c 
         #define e_wsfe  e_wsfe_f2c 
         #define e_wsfi  e_wsfi_f2c 
         #define e_wsle  e_wsle_f2c 
         #define e_wsli  e_wsli_f2c 
         #define e_wsue  e_wsue_f2c 
         #define ef1asc_  ef1asc__f2c 
         #define ef1cmc_  ef1cmc__f2c 
         #define en_fio  en_fio_f2c 
         #define erf_  erf__f2c 
         #define erfc_  erfc__f2c 
         #define err__fl  err__fl_f2c 
         #define etime_  etime__f2c 
         #define exit_  exit__f2c 
         #define f__Aquote  f__Aquote_f2c 
         #define f__buflen  f__buflen_f2c 
         #define f__cabs  f__cabs_f2c 
         #define f__canseek  f__canseek_f2c 
         #define f__cblank  f__cblank_f2c 
         #define f__cf  f__cf_f2c 
         #define f__cnt  f__cnt_f2c 
         #define f__cp  f__cp_f2c 
         #define f__cplus  f__cplus_f2c 
         #define f__cursor  f__cursor_f2c 
         #define f__curunit  f__curunit_f2c 
         #define f__doed  f__doed_f2c 
         #define f__doend  f__doend_f2c 
         #define f__doned  f__doned_f2c 
         #define f__donewrec  f__donewrec_f2c 
         #define f__dorevert  f__dorevert_f2c 
         #define f__elist  f__elist_f2c 
         #define f__external  f__external_f2c 
         #define f__fatal  f__fatal_f2c 
         #define f__fmtbuf  f__fmtbuf_f2c 
         #define f__formatted  f__formatted_f2c 
         #define f__getn  f__getn_f2c 
         #define f__hiwater  f__hiwater_f2c 
         #define f__icend  f__icend_f2c 
         #define f__icnum  f__icnum_f2c 
         #define f__icptr  f__icptr_f2c 
         #define f__icvt  f__icvt_f2c 
         #define f__init  f__init_f2c 
         #define f__inode  f__inode_f2c 
         #define f__lchar  f__lchar_f2c 
         #define f__lcount  f__lcount_f2c 
         #define f__lioproc  f__lioproc_f2c 
         #define f__lquit  f__lquit_f2c 
         #define f__ltab  f__ltab_f2c 
         #define f__ltype  f__ltype_f2c 
         #define f__lx  f__lx_f2c 
         #define f__ly  f__ly_f2c 
         #define f__nonl  f__nonl_f2c 
         #define f__nowreading  f__nowreading_f2c 
         #define f__nowwriting  f__nowwriting_f2c 
         #define f__parenlvl  f__parenlvl_f2c 
         #define f__pc  f__pc_f2c 
         #define f__putbuf  f__putbuf_f2c 
         #define f__putn  f__putn_f2c 
         #define f__r_mode  f__r_mode_f2c 
         #define f__reading  f__reading_f2c 
         #define f__reclen  f__reclen_f2c 
         #define f__recloc  f__recloc_f2c 
         #define f__recpos  f__recpos_f2c 
         #define f__ret  f__ret_f2c 
         #define f__revloc  f__revloc_f2c 
         #define f__rp  f__rp_f2c 
         #define f__scale  f__scale_f2c 
         #define f__sequential  f__sequential_f2c 
         #define f__svic  f__svic_f2c 
         #define f__typesize  f__typesize_f2c 
         #define f__units  f__units_f2c 
         #define f__w_mode  f__w_mode_f2c 
         #define f__workdone  f__workdone_f2c 
         #define f_back  f_back_f2c 
         #define f_clos  f_clos_f2c 
         #define f_end  f_end_f2c 
         #define f_exit  f_exit_f2c 
         #define f_init  f_init_f2c 
         #define f_inqu  f_inqu_f2c 
         #define f_open  f_open_f2c 
         #define f_rew  f_rew_f2c 
         #define fk_open  fk_open_f2c 
         #define flush_  flush__f2c 
         #define fmt_bg  fmt_bg_f2c 
         #define fseek_  fseek__f2c 
         #define ftell_  ftell__f2c 
         #define g_char  g_char_f2c 
         #define getenv_  getenv__f2c 
         #define h_abs  h_abs_f2c 
         #define h_dim  h_dim_f2c 
         #define h_dnnt  h_dnnt_f2c 
         #define h_indx  h_indx_f2c 
         #define h_len  h_len_f2c 
         #define h_mod  h_mod_f2c 
         #define h_nint  h_nint_f2c 
         #define h_sign  h_sign_f2c 
         #define hl_ge  hl_ge_f2c 
         #define hl_gt  hl_gt_f2c 
         #define hl_le  hl_le_f2c 
         #define hl_lt  hl_lt_f2c 
         #define i_abs  i_abs_f2c 
         #define i_dim  i_dim_f2c 
         #define i_dnnt  i_dnnt_f2c 
         #define i_indx  i_indx_f2c 
         #define i_len  i_len_f2c 
         #define i_mod  i_mod_f2c 
         #define i_nint  i_nint_f2c 
         #define i_sign  i_sign_f2c 
         #define iw_rev  iw_rev_f2c 
         #define l_eof  l_eof_f2c 
         #define l_ge  l_ge_f2c 
         #define l_getc  l_getc_f2c 
         #define l_gt  l_gt_f2c 
         #define l_le  l_le_f2c 
         #define l_lt  l_lt_f2c 
         #define l_read  l_read_f2c 
         #define l_ungetc  l_ungetc_f2c 
         #define l_write  l_write_f2c 
         #define lbit_bits  lbit_bits_f2c 
         #define lbit_cshift  lbit_cshift_f2c 
         #define lbit_shift  lbit_shift_f2c 
         #define mk_hashtab  mk_hashtab_f2c 
         #define nml_read  nml_read_f2c 
         #define pars_f  pars_f_f2c 
         #define pow_ci  pow_ci_f2c 
         #define pow_dd  pow_dd_f2c 
         #define pow_di  pow_di_f2c 
         #define pow_hh  pow_hh_f2c 
         #define pow_ii  pow_ii_f2c 
         #define pow_ri  pow_ri_f2c 
         #define pow_zi  pow_zi_f2c 
         #define pow_zz  pow_zz_f2c 
         #define r_abs  r_abs_f2c 
         #define r_acos  r_acos_f2c 
         #define r_asin  r_asin_f2c 
         #define r_atan  r_atan_f2c 
         #define r_atn2  r_atn2_f2c 
         #define r_cnjg  r_cnjg_f2c 
         #define r_cos  r_cos_f2c 
         #define r_cosh  r_cosh_f2c 
         #define r_dim  r_dim_f2c 
         #define r_exp  r_exp_f2c 
         #define r_imag  r_imag_f2c 
         #define r_int  r_int_f2c 
         #define r_lg10  r_lg10_f2c 
         #define r_log  r_log_f2c 
         #define r_mod  r_mod_f2c 
         #define r_nint  r_nint_f2c 
         #define r_sign  r_sign_f2c 
         #define r_sin  r_sin_f2c 
         #define r_sinh  r_sinh_f2c 
         #define r_sqrt  r_sqrt_f2c 
         #define r_tan  r_tan_f2c 
         #define r_tanh  r_tanh_f2c 
         #define rd_ed  rd_ed_f2c 
         #define rd_ned  rd_ned_f2c 
         #define s_cat  s_cat_f2c 
         #define s_cmp  s_cmp_f2c 
         #define s_copy  s_copy_f2c 
         #define s_paus  s_paus_f2c 
         #define s_rdfe  s_rdfe_f2c 
         #define s_rdue  s_rdue_f2c 
         #define s_rnge  s_rnge_f2c 
         #define s_rsfe  s_rsfe_f2c 
         #define s_rsfi  s_rsfi_f2c 
         #define s_rsle  s_rsle_f2c 
         #define s_rsli  s_rsli_f2c 
         #define s_rsne  s_rsne_f2c 
         #define s_rsni  s_rsni_f2c 
         #define s_rsue  s_rsue_f2c 
         #define s_stop  s_stop_f2c 
         #define s_wdfe  s_wdfe_f2c 
         #define s_wdue  s_wdue_f2c 
         #define s_wsfe  s_wsfe_f2c 
         #define s_wsfi  s_wsfi_f2c 
         #define s_wsle  s_wsle_f2c 
         #define s_wsli  s_wsli_f2c 
         #define s_wsne  s_wsne_f2c 
         #define s_wsni  s_wsni_f2c 
         #define s_wsue  s_wsue_f2c 
         #define sig_die  sig_die_f2c 
         #define signal_  signal__f2c 
         #define system_  system__f2c 
         #define t_getc  t_getc_f2c 
         #define t_runc  t_runc_f2c 
         #define w_ed  w_ed_f2c 
         #define w_ned  w_ned_f2c 
         #define wrt_E  wrt_E_f2c 
         #define wrt_F  wrt_F_f2c 
         #define wrt_L  wrt_L_f2c 
         #define x_endp  x_endp_f2c 
         #define x_getc  x_getc_f2c 
         #define x_putc  x_putc_f2c 
         #define x_rev  x_rev_f2c 
         #define x_rsne  x_rsne_f2c 
         #define x_wSL  x_wSL_f2c 
         #define x_wsne  x_wsne_f2c 
         #define xrd_SL  xrd_SL_f2c 
         #define y_getc  y_getc_f2c 
         #define y_rsk  y_rsk_f2c 
         #define z_abs  z_abs_f2c 
         #define z_cos  z_cos_f2c 
         #define z_div  z_div_f2c 
         #define z_exp  z_exp_f2c 
         #define z_getc  z_getc_f2c 
         #define z_log  z_log_f2c 
         #define z_putc  z_putc_f2c 
         #define z_rnew  z_rnew_f2c 
         #define z_sin  z_sin_f2c 
         #define z_sqrt  z_sqrt_f2c 
         #define z_wnew  z_wnew_f2c 

         #define F2C_MANGLING_DONE

      #endif


   #endif

