Index: trunk/Ohana/src/libdvo/include/dvo.h
===================================================================
--- trunk/Ohana/src/libdvo/include/dvo.h	(revision 5448)
+++ trunk/Ohana/src/libdvo/include/dvo.h	(revision 5451)
@@ -335,17 +335,20 @@
 
 /* skyregion APIs */
-int SkyTableSave (SkyTable *table, char *filename);
-SkyTable *SkyTableLoad (char *filename, int VERBOSE);
-SkyTable *SkyTableFromGSC (char *filename, int depth, int VERBOSE);
-SkyTable *SkyTableLoadOptimal (char *catdir, char *SKY_TABLE, char *GSCFILE, int VERBOSE);
-SkyRegion *SkyRegionByPoint (SkyTable *table, int depth, double ra, double dec);
-SkyList *SkyListByPoint (SkyTable *table, double ra, double dec);
-SkyList *SkyListByRadius (SkyTable *table, int depth, double RA, double DEC, double radius);
-SkyList *SkyListByPatch (SkyTable *table, int depth, SkyRegion *patch);
-SkyList *SkyListByImage (SkyTable *table, int depth, Image *image, Coords *mosaic);
-SkyList *SkyListByBounds (SkyTable *table, int depth, double Rmin, double Rmax, double Dmin, double Dmax);
-SkyList *SkyListChildrenByBounds (SkyTable *table, int No, int depth, double Rmin, double Rmax, double Dmin, double Dmax);
-int SkyListFree (SkyList *list);
-int SkyTableFree (SkyTable *table);
+int        SkyTableSave        	   PROTO((SkyTable *table, char *filename));
+SkyTable  *SkyTableLoad        	   PROTO((char *filename, int VERBOSE));
+SkyTable  *SkyTableFromGSC     	   PROTO((char *filename, int depth, int VERBOSE));
+SkyTable  *SkyTableLoadOptimal 	   PROTO((char *catdir, char *SKYFILE, char *GSCFILE, int depth, int VERBOSE));
+int        SkyTableSetDepth    	   PROTO((SkyTable *sky, int depth));
+SkyRegion *SkyRegionByPoint    	   PROTO((SkyTable *table, int depth, double ra, double dec));
+SkyList   *SkyListByPoint      	   PROTO((SkyTable *table, double ra, double dec));
+SkyList   *SkyListByRadius     	   PROTO((SkyTable *table, int depth, double RA, double DEC, double radius));
+SkyList   *SkyListByPatch      	   PROTO((SkyTable *table, int depth, SkyRegion *patch));
+SkyList   *SkyListByImage      	   PROTO((SkyTable *table, int depth, Image *image));
+SkyList   *SkyListByBounds     	   PROTO((SkyTable *table, int depth, double Rmin, double Rmax, double Dmin, double Dmax));
+SkyList   *SkyListChildrenByBounds PROTO((SkyTable *table, int No, int depth, double Rmin, double Rmax, double Dmin, double Dmax));
+int        SkyListFree             PROTO((SkyList *list, int ELEMENTS));
+int        SkyTableFree            PROTO((SkyTable *table));
+int        SkyListSetFilenames     PROTO((SkyList *list, char *path, char *ext));
+int        SkyTableSetFilenames    PROTO((SkyTable *sky, char *path, char *ext));
 
 # endif
Index: trunk/Ohana/src/libdvo/src/skyregion_gsc.c
===================================================================
--- trunk/Ohana/src/libdvo/src/skyregion_gsc.c	(revision 5448)
+++ trunk/Ohana/src/libdvo/src/skyregion_gsc.c	(revision 5451)
@@ -3,14 +3,12 @@
 # define NDIV 4
 
-int DecLines[] = {593, 584, 551, 530, 522, 465, 406, 362, 280, 198, 123, 24, 0,
-                  597, 578, 574, 577, 534, 499, 442, 376, 294, 212, 144, 48, 0};
-
-double DecBands[] = {0.0, +7.5, +15.0, +22.5, +30.0, +37.5, +45.0, +52.5, +60.0, +67.5, +75.0, +82.5, +90.0,
-                     0.0, -7.5, -15.0, -22.5, -30.0, -37.5, -45.0, -52.5, -60.0, -67.5, -75.0, -82.5, -90.0};
-
-char *DecNames[] = {
-  "n0000", "n0730", "n1500", "n2230", "n3000", "n3730", "n4500", "n5230", "n6000", "n6730", "n7500", "n8230", "none",
-  "s0000", "s0730", "s1500", "s2230", "s3000", "s3730", "s4500", "s5230", "s6000", "s6730", "s7500", "s8230", "none",
-};
+static int DecLines[] = {593, 584, 551, 530, 522, 465, 406, 362, 280, 198, 123, 24, 0,
+			 597, 578, 574, 577, 534, 499, 442, 376, 294, 212, 144, 48, 0};
+
+static double DecBands[] = {0.0, +7.5, +15.0, +22.5, +30.0, +37.5, +45.0, +52.5, +60.0, +67.5, +75.0, +82.5, +90.0,
+			    0.0, -7.5, -15.0, -22.5, -30.0, -37.5, -45.0, -52.5, -60.0, -67.5, -75.0, -82.5, -90.0};
+
+static char *DecNames[] = {"n0000", "n0730", "n1500", "n2230", "n3000", "n3730", "n4500", "n5230", "n6000", "n6730", "n7500", "n8230", "none",
+			   "s0000", "s0730", "s1500", "s2230", "s3000", "s3730", "s4500", "s5230", "s6000", "s6730", "s7500", "s8230", "none"};
 
 SkyTable *SkyTableFromGSC (char *filename, int depth, int VERBOSE) {
@@ -61,5 +59,5 @@
   regions[Nr].child  	=  TRUE;
   regions[Nr].table  	=  (depth == 0);
-  regions[Nr].filename  =  NULL;
+  regions[Nr].filename  =  (e_void) NULL;
   strcpy (regions[Nr].name, "fullsky");
   
@@ -81,5 +79,5 @@
     regions[Nr].child  	  =  TRUE;
     regions[Nr].table  	  =  (depth == 1);
-    regions[Nr].filename  =  NULL;
+    regions[Nr].filename  =  (e_void) NULL;
     strcpy (regions[Nr].name, DecNames[i]);
   }
@@ -95,5 +93,5 @@
     regions[Nr].child  	  =  TRUE;
     regions[Nr].table  	  =  (depth == 1);
-    regions[Nr].filename  =  NULL;
+    regions[Nr].filename  =  (e_void) NULL;
     strcpy (regions[Nr].name, DecNames[i+13]);
   }
@@ -143,5 +141,5 @@
       regions[Nr].child    =  TRUE;
       regions[Nr].table    =  (depth == 2);
-      regions[Nr].filename =  NULL;
+      regions[Nr].filename =  (e_void) NULL;
       regions[Nr].childS   =  0;
       regions[Nr].childE   =  0;
@@ -181,5 +179,5 @@
 	regions[Nr].child    =  FALSE;
 	regions[Nr].table    =  (depth == 3);
-	regions[Nr].filename =  NULL;
+	regions[Nr].filename =  (e_void) NULL;
 	regions[Nr].childS   =  0;
 	regions[Nr].childE   =  0;
Index: trunk/Ohana/src/libdvo/src/skyregion_io.c
===================================================================
--- trunk/Ohana/src/libdvo/src/skyregion_io.c	(revision 5448)
+++ trunk/Ohana/src/libdvo/src/skyregion_io.c	(revision 5451)
@@ -9,4 +9,5 @@
   SkyTable *skytable;
   FILE *f;
+  int i;
   
   f = fopen (filename, "r");
@@ -40,5 +41,5 @@
   skytable[0].regions = fits_table_get_SkyRegion (&ftable, &skytable[0].Nregions, NULL);
   for (i = 0; i < skytable[0].Nregions; i++) {
-    skytable[0].regions[i].filename = NULL;
+    skytable[0].regions[i].filename = (e_void) NULL;
   }
   
@@ -82,5 +83,5 @@
 }
 
-SkyTable *SkyTableLoadOptimal (char *catdir, char *SKY_TABLE, char *GSCFILE, int SKY_DEPTH, int VERBOSE) {
+SkyTable *SkyTableLoadOptimal (char *catdir, char *skyfile, char *gscfile, int depth, int verbose) {
 
   char filename[256];
@@ -89,12 +90,12 @@
   int status;
 
-  /* first option: CATDIR/SkyTable.fits */
-  sprintf (filename, "%s/SkyTable.fits", CATDIR);
-  check_permissions (filename);
+  /* first option: catdir/SkyTable.fits */
+  sprintf (filename, "%s/SkyTable.fits", catdir);
+  check_file_access (filename, FALSE, verbose);
 
   /* check for file existence */
   status = stat (filename, &filestat);
   if (status == 0) { /* file exists, are permissions OK? */
-    sky = SkyTableLoad (filename, VERBOSE);
+    sky = SkyTableLoad (filename, verbose);
     if (sky == NULL) {
       fprintf (stderr, "error loading sky table\n");
@@ -105,17 +106,17 @@
 
   /* first option: SKY_TABLE */
-  if ((SKY_TABLE != NULL) && (SKY_TABLE[0] != 0)) {
-    status = stat (SKY_TABLE, &filestat);
+  if ((skyfile != NULL) && (skyfile[0] != 0)) {
+    status = stat (skyfile, &filestat);
     if (status == 0) { /* file exists, are permissions OK? */
-      sky = SkyTableLoad (SKY_TABLE, VERBOSE);
+      sky = SkyTableLoad (skyfile, verbose);
       if (sky == NULL) {
 	fprintf (stderr, "error loading sky table\n");
 	exit (1);
       }
-      SkyTableSetDepth (sky, SKY_DEPTH);
+      SkyTableSetDepth (sky, depth);
 
       /* write CATDIR copy */
-      sprintf (filename, "%s/SkyTable.fits", CATDIR);
-      check_permissions (filename);
+      sprintf (filename, "%s/SkyTable.fits", catdir);
+      check_file_access (filename, FALSE, verbose);
       SkyTableSave (sky, filename);
       fits_convert_SkyRegion (sky[0].regions, sizeof (SkyTable), sky[0].Nregions);
@@ -124,5 +125,5 @@
   }
 
-  sky = SkyTableFromGSC (GSCFILE, SKY_DEPTH, VERBOSE);
+  sky = SkyTableFromGSC (gscfile, depth, verbose);
   if (sky == NULL) {
     fprintf (stderr, "error loading sky table\n");
@@ -131,6 +132,6 @@
 
   /* write CATDIR copy */
-  sprintf (filename, "%s/SkyTable.fits", CATDIR);
-  check_permissions (filename);
+  sprintf (filename, "%s/SkyTable.fits", catdir);
+  check_file_access (filename, FALSE, verbose);
   SkyTableSave (sky, filename);
   fits_convert_SkyRegion (sky[0].regions, sizeof (SkyRegion), sky[0].Nregions);
@@ -147,5 +148,5 @@
   for (i = 0; i < list[0].Nregions; i++) {
     sprintf (line, "%s/%s.%s", path, list[0].regions[i][0].name, ext);
-    list[0].regions[i][0].filename = strcreate (line);
+    list[0].regions[i][0].filename = (e_void) strcreate (line);
   }
 
@@ -153,2 +154,16 @@
 }
 
+int SkyTableSetFilenames (SkyTable *sky, char *path, char *ext) {
+
+  int i;
+  char line[256];
+
+  // this generates the names, be sure to free when not needed
+  for (i = 0; i < sky[0].Nregions; i++) {
+    sprintf (line, "%s/%s.%s", path, sky[0].regions[i].name, ext);
+    sky[0].regions[i].filename = (e_void) strcreate (line);
+  }
+
+  return (TRUE);
+}
+
Index: trunk/Ohana/src/libdvo/src/skyregion_ops.c
===================================================================
--- trunk/Ohana/src/libdvo/src/skyregion_ops.c	(revision 5448)
+++ trunk/Ohana/src/libdvo/src/skyregion_ops.c	(revision 5451)
@@ -121,5 +121,5 @@
 SkyList *SkyListByImage (SkyTable *table, int depth, Image *image) {
 
-  int i, j;
+  int j;
   SkyList *list;
   double r, d, X[4], Y[4];
@@ -172,5 +172,5 @@
     }
     list[0].Nregions += extra[0].Nregions;
-    SkyListFree (extra);
+    SkyListFree (extra, FALSE);
   } else {
     list = SkyListChildrenByBounds (table, -1, depth, Rmin, Rmax, Dmin, Dmax);
@@ -226,5 +226,5 @@
       }
       Nnew += children[0].Nregions;
-      SkyListFree (children);
+      SkyListFree (children, FALSE);
     } else {
       list[0].regions[Nnew] = &region[i];
@@ -254,8 +254,28 @@
 }
 
-int SkyListFree (SkyList *list) {
+int SkyTableSetDepth (SkyTable *sky, int depth) {
+
+  int i;
+
+  for (i = 0; i < sky[0].Nregions; i++) {
+    sky[0].regions[i].table = (sky[0].regions[i].depth == depth);
+  }
+  return (TRUE);
+}
+
+int SkyListFree (SkyList *list, int ELEMENTS) {
+
+  int i;
 
   if (list == NULL) return (TRUE);
   if (list[0].regions != NULL) {
+    if (ELEMENTS) {
+      for (i = 0; i < list[0].Nregions; i++) {
+	if (list[0].regions[i][0].filename != (e_void) NULL) {
+	  free ((size_t *) list[0].regions[i][0].filename);
+	}
+	free (list[0].regions[i]);
+      }
+    }
     free (list[0].regions);
   }
@@ -267,9 +287,11 @@
 int SkyTableFree (SkyTable *table) {
 
+  int i;
+
   if (table == NULL) return (TRUE);
   if (table[0].regions != NULL) {
     for (i = 0; i < table[0].Nregions; i++) {
-      if (table[0].regions[i].filename != NULL) {
-	free (table[0].regions[i].filename);
+      if (table[0].regions[i].filename != (e_void) NULL) {
+	free ((size_t *) table[0].regions[i].filename);
       }
     }
