/*****************************************************************************
#   Copyright (C) 1994-2008 by David Gordon.
#   All rights reserved.                           
#                                                                           
#   This software is part of a beta-test version of the Consed/Autofinish
#   package.  It should not be redistributed or
#   used for any commercial purpose, including commercially funded
#   sequencing, without written permission from the author and the
#   University of Washington.
#   
#   This software is provided ``AS IS'' and any express or implied
#   warranties, including, but not limited to, the implied warranties of
#   merchantability and fitness for a particular purpose, are disclaimed.
#   In no event shall the authors or the University of Washington be
#   liable for any direct, indirect, incidental, special, exemplary, or
#   consequential damages (including, but not limited to, procurement of
#   substitute goods or services; loss of use, data, or profits; or
#   business interruption) however caused and on any theory of liability,
#   whether in contract, strict liability, or tort (including negligence
#   or otherwise) arising in any way out of the use of this software, even
#   if advised of the possibility of such damage.
#
#   Building Consed from source is error prone and not simple which is
#   why I provide executables.  Due to time limitations I cannot
#   provide any assistance in building Consed.  Even if you do not
#   modify the source, you may introduce errors due to using a
#   different version of the compiler, a different version of motif,
#   different versions of other libraries than I used, etc.  For this
#   reason, if you discover Consed bugs, I can only offer help with
#   those bugs if you first reproduce those bugs with an executable
#   provided by me--not an executable you have built.
# 
#   Modifying Consed is also difficult.  Although Consed is modular,
#   some modules are used by many other modules.  Thus making a change
#   in one place can have unforeseen effects on many other features.
#   It may takes months for you to notice these other side-effects
#   which may not seen connected at all.  It is not feasable for me to
#   provide help with modifying Consed sources because of the
#   potentially huge amount of time involved.
#
#*****************************************************************************/
//
// numutil.cpp
//
// implementation for numutil.h
//
// chrisa 2-Dec-94
//




#include <stdlib.h>
#include <time.h>

#include "sysdepend.h"
#include "numutil.h"
#include "assert.h"
#include "mbt_errors.h"
#include <string.h>

//
// random number generation is not currently in use
// beware bit decay, test it first.
//

// the random number generator starts unseeded
bool bRandGenSeeded = false;
// returns a random integer within passed range
// seeds rand() first time
int randIntWithin(const int nLb, const int nUb) {
   assert (nLb <= nUb);

   if (! bRandGenSeeded) {
      // init the random number generator
      srand48( (int )time(NULL));
      bRandGenSeeded = true;
   }

   return (int )((drand48() * (nUb - nLb)) + 0.5 + nLb);
}



////////////////////////////////////////////////////////////
//
// PURPOSE:  converts an ascii string to an int and returns
//      an error code if the string cannot be converted.  This
//      is better than sscanf( "%d" ) which will not give an error
//      for strings such as "123And Some Garbage After the Number"
//
// REV: (David Gordon) March 9, 1995
//
////////////////////////////////////////////////////////////

int nAToIWithError( const char* szNumber, int&    nNumber )
{
   char *psz;
   int  nError;
   
   nNumber = (int) strtol( szNumber, &psz, 10);
   if (strlen( psz ) != 0) 
      nError = ERR_CONVERSION;
   else
      nError = NO_ERROR;

   return( nError );
}