Index: /trunk/psLib/src/dataManip/psRandom.c
===================================================================
--- /trunk/psLib/src/dataManip/psRandom.c	(revision 3000)
+++ /trunk/psLib/src/dataManip/psRandom.c	(revision 3001)
@@ -10,6 +10,6 @@
 *  @author GLG, MHPCC
 *
-*  @version $Revision: 1.3 $ $Name: not supported by cvs2svn $
-*  @date $Date: 2005-01-14 21:22:55 $
+*  @version $Revision: 1.4 $ $Name: not supported by cvs2svn $
+*  @date $Date: 2005-01-14 23:34:46 $
 *
 *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
@@ -20,4 +20,5 @@
 #include <float.h>
 #include <math.h>
+#include <time.h>
 #include <gsl/gsl_rng.h>
 #include <gsl/gsl_randist.h>
@@ -32,35 +33,47 @@
 #include "psDataManipErrors.h"
 
-/*
- typedef enum {
-     PS_RANDOM_TAUS
- } psRandomType;
- 
- typedef struct {
-     psRandomType type;
-     gsl_rng *gsl;
- } psRandom;
-*/
+psU64 p_psRandomGetSystemSeed()
+{
+    FILE*  fd;
+    psU64  seedVal = 0;
+    time_t timeVal;
 
+    fd = fopen("/dev/urandom","r");
+    if(fd == NULL) {
+        // Read system clock to get seed
+        seedVal = (psU64)time(&timeVal);
+    } else {
+        // Read urandom to get seed
+        fread(&seedVal, sizeof(psU64),1,fd);
+        // Close file
+        fclose(fd);
+    }
+
+    return seedVal;
+}
 
 psRandom *psRandomAlloc(psRandomType type,
                         psU64 seed)
 {
-    gsl_rng *r = NULL;
-    psRandom *myRNG = (psRandom *) psAlloc(sizeof(psRandom));
+    gsl_rng   *r      = NULL;
+    psRandom  *myRNG  = NULL;
 
     switch (type) {
     case PS_RANDOM_TAUS:
+        myRNG = (psRandom*)psAlloc(sizeof(psRandom));
         r = gsl_rng_alloc(gsl_rng_taus);
         myRNG->gsl = r;
-        return(myRNG);
+        if(seed == 0) {
+            gsl_rng_set(myRNG->gsl,p_psRandomGetSystemSeed());
+        }
+        break;
 
     default:
-        psFree(myRNG);
         psError(PS_ERR_UNEXPECTED_NULL,
                 true,
                 PS_ERRORTEXT_psRandom_UNKNOWN_RANDFOM_NUMBER_GENERATOR_TYPE);
+        break;
     }
-    return(NULL);
+    return(myRNG);
 }
 
Index: /trunk/psLib/src/math/psRandom.c
===================================================================
--- /trunk/psLib/src/math/psRandom.c	(revision 3000)
+++ /trunk/psLib/src/math/psRandom.c	(revision 3001)
@@ -10,6 +10,6 @@
 *  @author GLG, MHPCC
 *
-*  @version $Revision: 1.3 $ $Name: not supported by cvs2svn $
-*  @date $Date: 2005-01-14 21:22:55 $
+*  @version $Revision: 1.4 $ $Name: not supported by cvs2svn $
+*  @date $Date: 2005-01-14 23:34:46 $
 *
 *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
@@ -20,4 +20,5 @@
 #include <float.h>
 #include <math.h>
+#include <time.h>
 #include <gsl/gsl_rng.h>
 #include <gsl/gsl_randist.h>
@@ -32,35 +33,47 @@
 #include "psDataManipErrors.h"
 
-/*
- typedef enum {
-     PS_RANDOM_TAUS
- } psRandomType;
- 
- typedef struct {
-     psRandomType type;
-     gsl_rng *gsl;
- } psRandom;
-*/
+psU64 p_psRandomGetSystemSeed()
+{
+    FILE*  fd;
+    psU64  seedVal = 0;
+    time_t timeVal;
 
+    fd = fopen("/dev/urandom","r");
+    if(fd == NULL) {
+        // Read system clock to get seed
+        seedVal = (psU64)time(&timeVal);
+    } else {
+        // Read urandom to get seed
+        fread(&seedVal, sizeof(psU64),1,fd);
+        // Close file
+        fclose(fd);
+    }
+
+    return seedVal;
+}
 
 psRandom *psRandomAlloc(psRandomType type,
                         psU64 seed)
 {
-    gsl_rng *r = NULL;
-    psRandom *myRNG = (psRandom *) psAlloc(sizeof(psRandom));
+    gsl_rng   *r      = NULL;
+    psRandom  *myRNG  = NULL;
 
     switch (type) {
     case PS_RANDOM_TAUS:
+        myRNG = (psRandom*)psAlloc(sizeof(psRandom));
         r = gsl_rng_alloc(gsl_rng_taus);
         myRNG->gsl = r;
-        return(myRNG);
+        if(seed == 0) {
+            gsl_rng_set(myRNG->gsl,p_psRandomGetSystemSeed());
+        }
+        break;
 
     default:
-        psFree(myRNG);
         psError(PS_ERR_UNEXPECTED_NULL,
                 true,
                 PS_ERRORTEXT_psRandom_UNKNOWN_RANDFOM_NUMBER_GENERATOR_TYPE);
+        break;
     }
-    return(NULL);
+    return(myRNG);
 }
 
