/*  init.c  */

#include "../Drand.h"

/*--------------------------------------------------------------------*/
/*
   ---------------------------
   initialize the Drand object

   created -- 96may26, cca
   ---------------------------
*/
void
Drand_init (
   Drand   *drand
) {
/*
   ---------------
   check the input
   ---------------
*/
if ( drand == NULL ) {
   fprintf(stderr, "\n fatal error in Drand_init(%p)"
           "\n bad input\n", drand) ;
   exit(-1) ;
}
/*
   ----------------------
   set the default fields
   ----------------------
*/
Drand_setDefaultFields(drand) ;

return ; }

/*--------------------------------------------------------------------*/
/*
   ----------------------------------
   set the seeds using one input seed

   created -- 96may26, cca
   ----------------------------------
*/
void
Drand_setSeed (
   Drand   *drand,
   int     u
) {
if ( drand == NULL || u <= 0 || u >= drand->base1 ) {
   fprintf(stderr, "\n fatal error in Drand_setSeed(%p,%d)"
           "\n first seed must in in (0,%.0f)", 
           drand, u, drand->base1) ;
   exit(-1) ;
}
drand->seed1 = u ;
drand->seed2 = fmod(2718.*u, drand->base2) ;

return ; }

/*--------------------------------------------------------------------*/
/*
   -----------------------------------
   set the seeds using two input seeds

   created -- 96may26, cca
   -----------------------------------
*/
void
Drand_setSeeds (
   Drand   *drand,
   int     u,
   int     v
) {
if (  drand == NULL
   || u <= 0 || u >= drand->base1 
   || v <= 0 || v >= drand->base2 ) {
   fprintf(stderr, "\n fatal error in Drand_setSeeds(%p,%d,%d)"
           "\n first seed must in in (0,%.0f)"
           "\n second seed must in in (0,%.0f)\n",
           drand, u, v, drand->base1, drand->base2) ;
   exit(-1) ;
}
drand->seed1 = u ;
drand->seed2 = v ;

return ; }

/*--------------------------------------------------------------------*/
/*
   --------------------------------------------
   set the mode to be uniform in [lower, upper]

   created -- 96may26, cca
   --------------------------------------------
*/
void
Drand_setUniform (
   Drand    *drand,
   double   lower,
   double   upper
) {
/*
   ---------------
   check the input
   ---------------
*/
if ( drand == NULL || lower > upper ) {
   fprintf(stderr, "\n fatal error in Drand_setUniform(%p,%f,%f)"
           "\n bad input\n", drand, lower, upper) ;
   exit(-1) ;
}
drand->mode  =   1   ;
drand->lower = lower ;
drand->upper = upper ;

return ; }

/*--------------------------------------------------------------------*/
/*
   --------------------------------------
   set the mode to be normal(mean, sigma)

   created -- 96may26, cca
   --------------------------------------
*/
void
Drand_setNormal (
   Drand    *drand,
   double   mean,
   double   sigma
) {
/*
   ---------------
   check the input
   ---------------
*/
if ( drand == NULL || sigma <= 0 ) {
   fprintf(stderr, "\n fatal error in Drand_setNormal(%p,%f,%f)"
           "\n bad input\n", drand, mean, sigma) ;
   exit(-1) ;
}
drand->mode  =   2   ;
drand->mean  = mean  ;
drand->sigma = sigma ;

return ; }

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


syntax highlighted by Code2HTML, v. 0.9.1