/Users/huttone/Devel/sedflux-new/sedflux/trunk/ew/utils/eh_misc.c

Go to the documentation of this file.
00001 //---
00002 //
00003 // This file is part of sedflux.
00004 //
00005 // sedflux is free software; you can redistribute it and/or modify
00006 // it under the terms of the GNU General Public License as published by
00007 // the Free Software Foundation; either version 2 of the License, or
00008 // (at your option) any later version.
00009 //
00010 // sedflux is distributed in the hope that it will be useful,
00011 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00012 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00013 // GNU General Public License for more details.
00014 //
00015 // You should have received a copy of the GNU General Public License
00016 // along with sedflux; if not, write to the Free Software
00017 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00018 //
00019 //---
00020 
00021 #include <eh_utils.h>
00022 #include <math.h>
00023 #include <stdlib.h>
00024 
00025 void eh_init_glib( void )
00026 {
00027 #if defined( USE_MY_VTABLE )
00028    static GMemVTable my_vtable;
00029 
00030    my_vtable.malloc      = &eh_malloc_c_style;
00031    my_vtable.realloc     = &eh_realloc_c_style;
00032    my_vtable.free        = &eh_free_c_style;
00033    my_vtable.calloc      = &eh_calloc_c_style;
00034    my_vtable.try_malloc  = &eh_malloc_c_style;
00035    my_vtable.try_realloc = &eh_realloc_c_style;
00036 
00037    g_mem_set_vtable( &my_vtable );
00038 #else
00039 //   g_mem_set_vtable( glib_mem_profiler_table );
00040 #endif
00041 }
00042 
00043 void
00044 eh_exit( int code )
00045 {
00046    fprintf( stderr , "Exiting program.  " );
00047 
00048 //   fprintf( stderr , "Looking for memory leaks...\n" );
00049 //   eh_walk_heap( );
00050 
00051 #ifdef G_PLATFORM_WIN32
00052    fprintf( stderr , "Hit enter to continue..." );
00053 
00054    fflush( stdin );
00055    while ( '\n' != getchar() )
00056    {
00057    }
00058 #endif
00059    fprintf( stderr , "\n" );
00060 
00061    exit( code );
00062 }
00063 
00064 void
00065 eh_exit_on_error( GError* error , const gchar* format , ... )
00066 {
00067    if ( error )
00068    {
00069       gchar* err_s;
00070       va_list ap;
00071       va_start( ap , format );
00072 
00073       err_s = g_strdup_vprintf( format , ap );
00074       eh_error( eh_render_error_str( error , err_s ) );
00075       eh_exit( EXIT_FAILURE );
00076 
00077       va_end(ap);
00078       eh_free( err_s );
00079    }
00080 }
00081 
00082 gchar* brief_copyleft_msg[] =
00083 {
00084 "Copywrite (C) 2006 Eric Hutton." ,
00085 "This is free software; see the source for copying conditions.  This is NO" ,
00086 "warranty;  not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." ,
00087 NULL
00088 };
00089 
00090 gint
00091 eh_fprint_version_info( FILE*        fp   ,
00092                         const gchar* prog ,
00093                         gint         maj  ,
00094                         gint         min  ,
00095                         gint         micro )
00096 {
00097    gint n = 0;
00098 
00099    if ( fp )
00100    {
00101       n += fprintf( fp , "%s %d.%d.%d\n" , prog , maj , min , micro );
00102 
00103       n += fprintf( fp , "Written by Eric Hutton <eric.hutton@colorado.edu>.\n" );
00104       n += fprintf( fp , "\n" );
00105 
00106       n += eh_print_message( fp , brief_copyleft_msg );
00107    }
00108    return n;
00109 }
00110 
00120 gboolean
00121 eh_is_in_domain( gssize n_i , gssize n_j , gssize i , gssize j )
00122 {
00123    return i>=0 && j>=0 && i<n_i && j<n_j;
00124 }
00125 
00126 double
00127 eh_date_to_years( Eh_date_t* d )
00128 {
00129    eh_require( d );
00130    return   d->year
00131           + d->month/12.
00132           + d->day/365.;
00133 }
00134 
00147 double sigma( double s , double t , double p )
00148 {
00149    double ans;
00150    double t_2 = pow( t , 2 );
00151    double t_3 = t_2*t;
00152    double t_4 = t_3*t;
00153    double t_5 = t_4*t;
00154    double s_2 = pow( s , 2 );
00155    double s_3 = s_2*s;
00156    double s_1 = sqrt( s_3 );
00157    double p_2 = pow( p , 2 );
00158    double rho, sbmk;
00159 
00160    rho = 6.793952e-2*t   - 9.095290e-3*t_2 + 1.001685e-4*t_3
00161        - 1.120083e-6*t_4 + 6.536332e-9*t_5
00162        + s   * (   8.24493e-1  - 4.0899e-3*t + 7.6438e-5*t_2
00163                  - 8.2467e-7*t_3  + 5.3875e-9*t_4 )
00164        + s_1 * ( - 5.72466e-3  + 1.0227e-4*t - 1.6546e-6*t_2 )
00165        + 4.8314e-4*s_2;
00166 
00167    sbmk =  19652.21
00168         + 148.4206*t - 2.327105*t_2   + 1.360477e-2*t_3 - 5.155288e-5*t_4
00169         + p     * (   3.239908    + 1.43713e-3*t  + 1.16092e-4*t_2
00170                     - 5.77905e-7*t_3)
00171         + p_2   * ( 8.50935e-5 - 6.12293e-6*t + 5.2787e-8*t_2 )
00172         + s     * ( 54.6746    - 0.603459*t   + 1.09987e-2*t_2 - 6.1670e-5*t_3 )
00173         + s_1   * ( 7.944e-2   + 1.6483e-2*t  - 5.3009e-4*t_2  + 1.91075e-4*p )
00174         + p*s   * ( 2.2838e-3  - 1.0981e-5*t  - 1.6078e-6*t_2 )
00175         + p_2*s * ( -9.9348e-7 + 2.0816e-8*t  + 9.1697e-10*t_2 );
00176 
00177    ans = 1.e-3*( rho + 999.842594*p/sbmk )/( 1.0-p/sbmk );
00178 
00179    return ans*1e3+1000;
00180 }
00181 
00182 void
00183 eh_test_function( const char *func_name , Eh_test_func f )
00184 {
00185    gboolean result;
00186 
00187    fprintf( stdout , "Testing %s ... " , func_name );
00188    fflush( stdout );
00189 
00190    result = (*f)();
00191 
00192    fprintf( stdout, "\nDONE.\n" );
00193    if ( result == TRUE )
00194       fprintf( stdout, "ok.\n" );
00195    else
00196       fprintf( stdout , "FAIL.\n" );
00197    fflush( stdout );
00198 
00199    return;
00200 }
00201 
00202 gboolean
00203 eh_check_to_s( gboolean assert , const gchar* str , gchar*** str_list )
00204 {
00205    if ( !assert && str_list ) eh_strv_append( str_list , g_strconcat( "FAILED: " , str , NULL ) );
00206 
00207    return assert;
00208 }
00209 
00210 void
00211 eh_set_error_strv( GError** error , GQuark domain , gint code , gchar** err_s )
00212 {
00213    if ( err_s && *err_s )
00214    {
00215       gchar* str = g_strjoinv( "\n" , err_s );
00216 
00217       g_set_error( error , domain , code , "%s" , str );
00218 
00219       eh_free( str );
00220    }
00221 
00222    return;
00223 }
00224 
00225 gchar*
00226 eh_render_error_str( GError* error , const gchar* err_str )
00227 {
00228    gchar* new_str = NULL;
00229 
00230    if ( error )
00231    {
00232       if ( err_str )
00233          new_str = g_strdup_printf( "Error %d: %s: %s: %s"        ,
00234                                     error->code                   ,
00235                                     g_quark_to_string(error->domain) ,
00236                                     err_str                       ,
00237                                     error->message );
00238       else
00239          new_str = g_strdup_printf( "Error %d: %s: %s"            ,
00240                                     error->code                   ,
00241                                     g_quark_to_string(error->domain) ,
00242                                     error->message );
00243    }
00244 
00245    return new_str;
00246 }
00247 
00248 gchar*
00249 eh_render_command_str( int argc , char* argv[] )
00250 {
00251    gchar* str = NULL;
00252 
00253    eh_require( argv!=NULL );
00254 
00255    if ( argv )
00256    {
00257       gint    i;
00258       gchar** str_array = NULL;
00259 
00260       for ( i=0 ; i<argc ; i++ )
00261          eh_strv_append( &str_array , argv[i] );
00262 
00263       str = g_strjoinv( " " , str_array );
00264       
00265       eh_free( str_array );
00266    }
00267 
00268    return str;
00269 }
00270 

Generated on Fri Jan 4 18:04:16 2008 for sedflux by  doxygen 1.5.2