#include "mrilib.h"

/*-----------------------------------------------------------------------------*/

char * approximate_number_string( double val )
{
   static char sval[128] ;
   double aval=fabs(val) , tval ;
   int    lv , qv ;

   if( aval == 0.0 ){ strcpy(sval,"Zero"); return; }

   if( val < 0.0 ){ strcpy(sval,"-"); } else { sval[0] = '\0'; }

   lv   = (int) floor(log10(aval)/3.0) ;
   tval = pow(10.0,(double)(3*lv)) ;
   qv   = (int) rint(aval/tval) ;
   sprintf( sval+strlen(sval) , "%d" , qv ) ;

   switch( lv ){

     case 0: break ;

     case 1: strcat(sval+strlen(sval)," thousand")    ; break ;
     case 2: strcat(sval+strlen(sval)," million" )    ; break ;
     case 3: strcat(sval+strlen(sval)," billion" )    ; break ;
     case 4: strcat(sval+strlen(sval)," trillion")    ; break ;
     case 5: strcat(sval+strlen(sval)," quadrillion") ; break ;
     case 6: strcat(sval+strlen(sval)," quintillion") ; break ;
     case 7: strcat(sval+strlen(sval)," sextillion")  ; break ;
     case 8: strcat(sval+strlen(sval)," septillion")  ; break ;
     case 9: strcat(sval+strlen(sval)," octillion")   ; break ;

     case -1: strcat(sval+strlen(sval)," thousand-ths")   ; break ;
     case -2: strcat(sval+strlen(sval)," million-ths")    ; break ;
     case -3: strcat(sval+strlen(sval)," billion-ths")    ; break ;
     case -4: strcat(sval+strlen(sval)," trillion-ths")   ; break ;
     case -5: strcat(sval+strlen(sval)," quadrillion-ths"); break ;
     case -6: strcat(sval+strlen(sval)," quintillion-ths"); break ;
     case -7: strcat(sval+strlen(sval)," sextillion-ths") ; break ;
     case -8: strcat(sval+strlen(sval)," septillion-ths") ; break ;
     case -9: strcat(sval+strlen(sval)," octillion-ths")  ; break ;

     default:
       strcat(sval+strlen(sval)," gazillion") ;
       if( lv < 0 ) strcat(sval+strlen(sval),"-ths") ;
     break ;
   }

   return (char *)sval ;
}

/*-----------------------------------------------------------------------------*/

int strcmp_aboot( char *a , char *b )  /* 12 Mar 2007 */
{
   char *aa , *bb , *qq ; int ii ;
   if( a == b    ) return  0 ;
   if( a == NULL ) return -1 ;
   if( b == NULL ) return  1 ;
   aa = strchr(a,' '); if( aa == NULL ) aa = strchr(a,'_');   /* if no blanks */
   bb = strchr(b,' '); if( bb == NULL ) bb = strchr(b,'_'); /* or underscores */
   if( aa == NULL && bb == NULL ) return strcmp(a,b) ;    /* do normal strcmp */
   aa = strdup(a) ;
   for( qq=aa ; *qq != '\0' ; qq++ )
     if( *qq == ' ' || *qq == '_' ) *qq = '-' ;  /* get rid of blanks */
   bb = strdup(b) ;                              /* and underscores  */
   for( qq=bb ; *qq != '\0' ; qq++ )
     if( *qq == ' ' || *qq == '_' ) *qq = '-' ;
   ii = strcmp(aa,bb) ;                          /* and compare THESE strings */
   free(bb); free(aa); return ii;
}


syntax highlighted by Code2HTML, v. 0.9.1