Index: trunk/Ohana/src/opihi/pantasks/pantasks_server.c.in
===================================================================
--- trunk/Ohana/src/opihi/pantasks/pantasks_server.c.in	(revision 27998)
+++ trunk/Ohana/src/opihi/pantasks/pantasks_server.c.in	(revision 27999)
@@ -13,8 +13,10 @@
 */
 
+void special_init (int *argc, char **argv);
+
 /* program-dependent initialization */
 int main (int argc, char **argv) {
   
-  char log_stdout[128], log_stderr[128];
+  char log_stdout[1024], log_stderr[1024];
   pthread_t JobsAndTasksThread;
   pthread_t clientsThread;
@@ -23,14 +25,40 @@
   SockAddress Address;
 
-  general_init (&argc, argv);
+  strcpy (log_stdout, "stdout");
+  strcpy (log_stderr, "stderr");
 
-  // define server output log files
+  special_init (&argc, argv);
+
+  // 
+  stdin = freopen ("/dev/zero", "r", stdin);
+
+  // this block redirects the actual stderr, stdout steams to the output files
   if (VarConfig ("PANTASKS_SERVER_STDOUT", "%s", log_stdout) != NULL) {
-      // redirect stdout to file unless PANTASKS_SERVER_STDOUT is 'stdout'
-      // if (strcmp (log_stdout, "stdout")) {
-      // freopen (log_stdout, 
+    if (strcmp (log_stdout, "stdout")) {
+      stdout = freopen (log_stdout, "a", stdout);
+      if (!stdout) {
+	fprintf (stderr, "failed to open %s for output\n", log_stdout);
+	exit (1);
+      }
+    }
+  }
+  if (VarConfig ("PANTASKS_SERVER_STDERR", "%s", log_stderr) != NULL) {
+    if (strcmp (log_stderr, "stderr")) {
+      stderr = freopen (log_stderr, "a", stderr);
+      if (!stderr) {
+	fprintf (stdout, "failed to open %s for error output\n", log_stderr);
+	exit (1);
+      }
+    }
+  }
+
+  /* init for main (or only) thread */
+  gprintInit ();
+
+  // this block changes the target of the gprint output streams
+  if (strcmp (log_stdout, "stdout")) {
       gprintSetFileThisThread (GP_LOG, log_stdout);
   }
-  if (VarConfig ("PANTASKS_SERVER_STDERR", "%s", log_stderr) != NULL) {
+  if (strcmp (log_stderr, "stderr")) {
       gprintSetFileThisThread (GP_ERR, log_stderr);
   }
@@ -44,4 +72,5 @@
   InitBasic ();
   InitData ();
+  InitAstro ();
   InitPantasksServer ();
 
@@ -108,2 +137,24 @@
 void welcome () { }
 void program_init (int *argc, char **argv) {}
+
+// I need to do things in a different order here to have config / freopen / gprint sequenced correctly
+void special_init (int *argc, char **argv) {
+
+  /* init srand for rnd numbers elsewhere */
+  long A, B;
+  A = time(NULL);
+  for (B = 0; A == time(NULL); B++);
+  srand48(B);
+ 
+  /* set signals */
+  signal (SIGINT, SIG_IGN);
+
+  init_error ();
+
+  /* load config data (.ptolemyrc) */
+  if (!ConfigInit (argc, argv)) {
+    fprintf (stderr, "can't find (.ptolemyrc,ptolemy.rc) config file. some functions will be unavailable\n");
+  }
+
+  return;
+}
