Index: /trunk/Ohana/src/addstar/Makefile
===================================================================
--- /trunk/Ohana/src/addstar/Makefile	(revision 5444)
+++ /trunk/Ohana/src/addstar/Makefile	(revision 5445)
@@ -18,5 +18,5 @@
 INCS	= 	-I$(INC) -I$(LINC) -I$(XINC)
 LIBS	= 	-L$(LLIB) -ldvo -lFITS -lohana -lz -lm
-CFLAGS	=	$(INCS) -g
+CFLAGS	=	$(INCS) -g -Wall -Werror
 LFLAGS	=	$(LIBS) 
 
@@ -110,8 +110,4 @@
 $(SRC)/gcatalog.$(ARCH).o \
 $(SRC)/gimages.$(ARCH).o \
-$(SRC)/gregion_image.$(ARCH).o \
-$(SRC)/gregion_match.$(ARCH).o \
-$(SRC)/gregion_patch.$(ARCH).o \
-$(SRC)/gregion_star.$(ARCH).o \
 $(SRC)/image-db.$(ARCH).o \
 $(SRC)/in_image.$(ARCH).o \
@@ -119,7 +115,8 @@
 $(SRC)/load_subpix.$(ARCH).o \
 $(SRC)/mkcatalog.$(ARCH).o \
-$(SRC)/RegionOps.$(ARCH).o \
 $(SRC)/replace_match.$(ARCH).o \
 $(SRC)/SetSignals.$(ARCH).o \
+$(SRC)/SkyRegionUtils.$(ARCH).o \
+$(SRC)/SkyListForStars.$(ARCH).o \
 $(SRC)/sort_lists.$(ARCH).o \
 $(SRC)/update_coords.$(ARCH).o \
Index: /trunk/Ohana/src/addstar/doc/notes.txt
===================================================================
--- /trunk/Ohana/src/addstar/doc/notes.txt	(revision 5444)
+++ /trunk/Ohana/src/addstar/doc/notes.txt	(revision 5445)
@@ -1,2 +1,25 @@
+
+2005.10.24
+
+  I have changed addstar to use the new, more flexible, SkyRegion
+  concept to define the sky layout rather than just the GSCRegion
+  files.  This includes the ability to subdivide the existing
+  GSCRegion concept, and to have a more flexible sky table
+  arrangement.  
+
+  Names of catalog files are a bit tricky.  The SkyRegion functions
+  return base names without fullpath or extensions (ie, n0000/0012).
+  There are a few places in addstar which need the fullname:
+
+  SkyListExitingSubset () requires the path and adds .cpt
+
+  load_pt_catalog () takes the path and adds .cpt.  it also allocates
+  a filename entry for catalog, which is freed later in the loop in
+  addstars
+
+  mkcatalog uses the name in the catalog structure and replaces .cpt
+  with .cpm, .cpn, .cps as needed.
+
+  
 
 todo:
Index: /trunk/Ohana/src/addstar/include/addstar.h
===================================================================
--- /trunk/Ohana/src/addstar/include/addstar.h	(revision 5444)
+++ /trunk/Ohana/src/addstar/include/addstar.h	(revision 5445)
@@ -39,5 +39,7 @@
 char   HOSTNAME[80];
 int    NVALID, *VALID_IP;
+char   SKY_TABLE[256];
 int    SKY_DEPTH;  /** XXX EAM : depth of catalog tables, fix usage */
+SkyTable *ServerSky;
 
 /* used to select entries from header (gstars or parse_time) (KEEP) */
@@ -71,5 +73,5 @@
 int    VERBOSE;
 
-/* modify server behavoir (make this an addstar cleanup mode?) */
+/* modify server behavior (make this an addstar cleanup mode?) */
 int    FORCE_READ;
 
@@ -115,5 +117,5 @@
 void       help                   PROTO(());
 int        in_image               PROTO((double r, double d, Image *image));
-int        load_pt_catalog        PROTO((Catalog *catalog, SkyRegion *region));  /*** choose new name ***/
+int        load_pt_catalog        PROTO((Catalog *catalog, SkyRegion *region, char *path));  /*** choose new name ***/
 void       load_subpix            PROTO(());
 void       lock_image_db          PROTO((FITS_DB *db, char *filename));
@@ -132,5 +134,4 @@
 time_t     short_date_to_sec      PROTO((char *date));
 void       sort_lists             PROTO((float *X, float *Y, int *S, int N));
-void       sort_regions           PROTO((GSCRegion *region, int N));
 void       sort_stars             PROTO((Stars *stars, int N));
 int        str_to_radec           PROTO((double *ra, double *dec, char *str1, char *str2));
@@ -154,4 +155,6 @@
 Missing *sort_missing (Average *average, int Naverage, Missing *missing, int Nmissing, int *next_miss);
 
+/* functions which use GSCRegion, now deprecated */
+void       sort_regions           PROTO((GSCRegion *region, int N));
 GSCRegion *LoadRegions            PROTO((int *nregions));
 int        FindDecBand            PROTO((double dec, double *DEC0, double *DEC1));
@@ -193,7 +196,8 @@
 int UpdateDatabase_Image (AddstarClientOptions *options, Image *image, Coords *mosaic, Stars *stars, int Nstars);
 int UpdateDatabase_Reflist (AddstarClientOptions *options, Stars *stars, int Nstars);
-int UpdateDatabase_Refcat (AddstarClientOptions *options, GSCRegion *UserPatch, char *refcat);
+int UpdateDatabase_Refcat (AddstarClientOptions *options, SkyRegion *UserPatch, char *refcat);
 
 SkyList *SkyListForStars (SkyTable *table, int depth, Stars *stars, int Nstars);
-SkyList *SkyListExistingSubset (SkyList *input);
+SkyList *SkyListExistingSubset (SkyList *input, char *path);
 int SkyListSetPath (SkyList *list, char *path);
+SkyTable *SkyTableLoadOptimal ();
Index: /trunk/Ohana/src/addstar/src/ConfigInit.c
===================================================================
--- /trunk/Ohana/src/addstar/src/ConfigInit.c	(revision 5444)
+++ /trunk/Ohana/src/addstar/src/ConfigInit.c	(revision 5445)
@@ -58,4 +58,7 @@
   if (!ScanConfig (config, "SKY_DEPTH",         "%d",  0, &SKY_DEPTH)) {
     SKY_DEPTH = 2;
+  }
+  if (!ScanConfig (config, "SKY_TABLE",         "%s",  0, SKY_TABLE)) {
+    SKY_TABLE[0] = 0;
   }
 
Index: /trunk/Ohana/src/addstar/src/NewRefcat.c
===================================================================
--- /trunk/Ohana/src/addstar/src/NewRefcat.c	(revision 5444)
+++ /trunk/Ohana/src/addstar/src/NewRefcat.c	(revision 5445)
@@ -6,5 +6,5 @@
   AddstarClientOptions *options;
   IOBuffer message;
-  GSCRegion *patch;
+  SkyRegion *patch;
 
   /* accept incoming data set */
@@ -18,5 +18,5 @@
   }
 
-  if (!Recv_GSCRegion (BindSocket, &patch, &N)) {
+  if (!Recv_SkyRegion (BindSocket, &patch, &N)) {
     fprintf (stderr, "error: problem receiving patch\n");
     goto reject;
Index: /trunk/Ohana/src/addstar/src/SkyRegionUtils.c
===================================================================
--- /trunk/Ohana/src/addstar/src/SkyRegionUtils.c	(revision 5444)
+++ /trunk/Ohana/src/addstar/src/SkyRegionUtils.c	(revision 5445)
@@ -1,7 +1,8 @@
 # include "addstar.h"
 
-SkyList *SkyListExistingSubset (SkyList *input) {
+SkyList *SkyListExistingSubset (SkyList *input, char *path) {
   
   int i, status, Nsubset, NSUBSET;
+  char filename[256];
   SkyList *subset;
   struct stat filestats;
@@ -14,5 +15,6 @@
   /* match the basename against the GSCRegion file names */
   for (i = 0; i < input[0].Nregions; i++) {
-    status = stat (input[0].regions[i][0].name, &filestats);
+    sprintf (filename, "%s/%s.cpt", path, input[0].regions[i][0].name);
+    status = stat (filename, &filestats);
     if ((status == -1) && (errno == ENOENT)) continue;
     /* give an error for other conditions? */
@@ -41,2 +43,69 @@
   return (TRUE);
 }
+
+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);
+}
+
+SkyTable *SkyTableLoadOptimal () {
+
+  char filename[256];
+  struct stat filestat;
+  SkyTable *sky;
+  int status;
+
+  /* first option: CATDIR/SkyTable.fits */
+  sprintf (filename, "%s/SkyTable.fits", CATDIR);
+  check_permissions (filename);
+
+  /* check for file existance */
+  status = stat (filename, &filestat);
+  if (status == 0) { /* file exists, are permissions OK? */
+    sky = SkyTableLoad (filename, VERBOSE);
+    if (sky == NULL) {
+      fprintf (stderr, "error loading sky table\n");
+      exit (1);
+    }
+    return (sky);
+  }
+
+  /* first option: SKY_TABLE */
+  if (SKY_TABLE[0]) {
+    status = stat (SKY_TABLE, &filestat);
+    if (status == 0) { /* file exists, are permissions OK? */
+      sky = SkyTableLoad (SKY_TABLE, VERBOSE);
+      if (sky == NULL) {
+	fprintf (stderr, "error loading sky table\n");
+	exit (1);
+      }
+      SkyTableSetDepth (sky, SKY_DEPTH);
+
+      /* write CATDIR copy */
+      sprintf (filename, "%s/SkyTable.fits", CATDIR);
+      check_permissions (filename);
+      SkyTableSave (sky, filename);
+      fits_convert_SkyRegion (sky[0].regions, sizeof (SkyTable), sky[0].Nregions);
+      return (sky);
+    }
+  }
+
+  sky = SkyTableFromGSC (GSCFILE, SKY_DEPTH, VERBOSE);
+  if (sky == NULL) {
+    fprintf (stderr, "error loading sky table\n");
+    exit (1);
+  }
+
+  /* write CATDIR copy */
+  sprintf (filename, "%s/SkyTable.fits", CATDIR);
+  check_permissions (filename);
+  SkyTableSave (sky, filename);
+  fits_convert_SkyRegion (sky[0].regions, sizeof (SkyRegion), sky[0].Nregions);
+
+  return (sky);
+}
Index: /trunk/Ohana/src/addstar/src/UpdateDatabase_Image.c
===================================================================
--- /trunk/Ohana/src/addstar/src/UpdateDatabase_Image.c	(revision 5444)
+++ /trunk/Ohana/src/addstar/src/UpdateDatabase_Image.c	(revision 5445)
@@ -3,8 +3,12 @@
 int UpdateDatabase_Image (AddstarClientOptions *options, Image *image, Coords *mosaic, Stars *stars, int Nstars) {
 
-  int i, Noverlap, Nregions;
+  int i, Noverlap;
   Image *overlap;
   Catalog catalog;
-  GSCRegion *regions;
+  SkyList *skylist;
+
+  /* this should be loaded by addstard on start -- keep static? */
+  /* need to load the correct sky table (GSC default or local verison) */
+  // sky = SkyTableFromGSC (GSCFILE, SKY_DEPTH, VERBOSE);
 
   if (options[0].update) {
@@ -14,6 +18,4 @@
   }
   
-  regions = NULL;
-
   if (options[0].mode != M_IMAGE) {
     fprintf (stderr, "error: expecting only IMAGE mode\n");
@@ -42,15 +44,19 @@
 
   /* find correpsonding regions for image */
-  regions = gregion_image (image, mosaic, &Nregions);
+  skylist = SkyListByImage (ServerSky, -1, image, mosaic);
 
   /* reduce regions to existing subset, if necessary */
+  SkyListSetPath (skylist, CATDIR);
   if (options[0].only_match || options[0].existing_regions) {
-    regions = gregion_match (regions, &Nregions);
+    SkyList *tmp;
+    tmp = SkyListExistingSubset (skylist);
+    SkyListFree (skylist);
+    skylist = tmp;
   }
-  if (VERBOSE) fprintf (stderr, "writing to %d regions\n", Nregions);
+  if (VERBOSE) fprintf (stderr, "writing to %d regions\n", skylist[0].Nregions);
 
-  for (i = 0; i < Nregions; i++) {
+  for (i = 0; i < skylist[0].Nregions; i++) {
 
-    load_pt_catalog (&catalog, &regions[i]);
+    load_pt_catalog (&catalog, skylist[0].regions[i]);
 
     /* for only_match, skip empty catalogs XXX EAM : this leaves behind empty files */
@@ -61,7 +67,7 @@
 
     if (options[0].closest) {
-      find_matches_closest (&regions[i], stars, Nstars, &catalog, image, overlap, Noverlap, mosaic, options[0]);
+      find_matches_closest (skylist[0].regions[i], stars, Nstars, &catalog, image, overlap, Noverlap, mosaic, options[0]);
     } else {
-      find_matches (&regions[i], stars, Nstars, &catalog, image, overlap, Noverlap, mosaic, options[0]);
+      find_matches (skylist[0].regions[i], stars, Nstars, &catalog, image, overlap, Noverlap, mosaic, options[0]);
     }
 
Index: /trunk/Ohana/src/addstar/src/UpdateDatabase_Refcat.c
===================================================================
--- /trunk/Ohana/src/addstar/src/UpdateDatabase_Refcat.c	(revision 5444)
+++ /trunk/Ohana/src/addstar/src/UpdateDatabase_Refcat.c	(revision 5445)
@@ -1,10 +1,16 @@
 # include "addstar.h"
 
-int UpdateDatabase_Refcat (AddstarClientOptions *options, GSCRegion *patch, char *refcat) {
+int UpdateDatabase_Refcat (AddstarClientOptions *options, SkyRegion *patch, char *refcat) {
 
-  int i, Nstars, Nsubset, Nregions;
+  int i, Nstars, Nsubset;
   Catalog catalog;
-  GSCRegion *regions;
   Stars *stars, **subset;
+  // SkyTable *sky;
+  SkyList *skylist;
+
+  /* this should be loaded by addstard on start -- keep static? */
+  /* need to load the correct sky table (GSC default or local verison) */
+  /* XXX EAM : check on memory usage */
+  // sky = SkyTableFromGSC (GSCFILE, SKY_DEPTH, VERBOSE);
 
   if (options[0].update) {
@@ -39,15 +45,19 @@
   
   /* find correpsonding regions for image */
-  regions = gregion_patch (patch, &Nregions);
+  skylist = SkyListByPatch (ServerSky, -1, patch);
 
   /* reduce regions to existing subset, if necessary */
+  SkyListSetPath (skylist, CATDIR);
   if (options[0].only_match || options[0].existing_regions) {
-    regions = gregion_match (regions, &Nregions);
+    SkyList *tmp;
+    tmp = SkyListExistingSubset (skylist);
+    SkyListFree (skylist);
+    skylist = tmp;
   }
-  if (VERBOSE) fprintf (stderr, "writing to %d regions\n", Nregions);
+  if (VERBOSE) fprintf (stderr, "writing to %d regions\n", skylist[0].Nregions);
 
-  for (i = 0; i < Nregions; i++) {
+  for (i = 0; i < skylist[0].Nregions; i++) {
 
-    load_pt_catalog (&catalog, &regions[i]);
+    load_pt_catalog (&catalog, skylist[0].regions[i]);
 
     /* for only_match, skip empty catalogs XXX EAM : this leaves behind empty files */
@@ -58,8 +68,8 @@
 
     /* load stars from corresponding catalog */
-    stars = grefcat (refcat, &regions[i], options[0].photcode, &Nstars);
+    stars = grefcat (refcat, skylist[0].regions[i], options[0].photcode, &Nstars);
 
-    subset = find_subset (&regions[i], stars, Nstars, &Nsubset);
-    find_matches_refstars (&regions[i], subset, Nsubset, &catalog, options[0]);
+    subset = find_subset (skylist[0].regions[i], stars, Nstars, &Nsubset);
+    find_matches_refstars (skylist[0].regions[i], subset, Nsubset, &catalog, options[0]);
     if (Nsubset) free (subset);
 
Index: /trunk/Ohana/src/addstar/src/UpdateDatabase_Reflist.c
===================================================================
--- /trunk/Ohana/src/addstar/src/UpdateDatabase_Reflist.c	(revision 5444)
+++ /trunk/Ohana/src/addstar/src/UpdateDatabase_Reflist.c	(revision 5445)
@@ -3,8 +3,12 @@
 int UpdateDatabase_Reflist (AddstarClientOptions *options, Stars *stars, int Nstars) {
 
-  int i, Nsubset, Nregions;
+  int i, Nsubset;
   Catalog catalog;
-  GSCRegion *regions;
   Stars **subset;
+  SkyList *skylist;
+
+  /* this should be loaded by addstard on start -- keep static? */
+  /* need to load the correct sky table (GSC default or local verison) */
+  // sky = SkyTableFromGSC (GSCFILE, SKY_DEPTH, VERBOSE);
 
   if (options[0].update) {
@@ -19,5 +23,5 @@
   }
 
-  /* check on directory, create if needed */
+  /* check on directory, create if needed XXX : move to utils */
   { 
     int status, cmode;
@@ -39,15 +43,19 @@
   
   /* find correpsonding regions for image */
-  regions = gregion_stars (stars, Nstars, &Nregions);
+  skylist = SkyListForStars (ServerSky, -1, stars, Nstars);
 
   /* reduce regions to existing subset, if necessary */
+  SkyListSetPath (skylist, CATDIR);
   if (options[0].only_match || options[0].existing_regions) {
-    regions = gregion_match (regions, &Nregions);
+    SkyList *tmp;
+    tmp = SkyListExistingSubset (skylist);
+    SkyListFree (skylist);
+    skylist = tmp;
   }
-  if (VERBOSE) fprintf (stderr, "writing to %d regions\n", Nregions);
+  if (VERBOSE) fprintf (stderr, "writing to %d regions\n", skylist[0].Nregions);
 
-  for (i = 0; i < Nregions; i++) {
+  for (i = 0; i < skylist[0].Nregions; i++) {
 
-    load_pt_catalog (&catalog, &regions[i]);
+    load_pt_catalog (&catalog, skylist[0].regions[i]);
 
     /* for only_match, skip empty catalogs XXX EAM : this leaves behind empty files */
@@ -57,6 +65,6 @@
     }
 
-    subset = find_subset (&regions[i], stars, Nstars, &Nsubset);
-    find_matches_refstars (&regions[i], subset, Nsubset, &catalog, options[0]);
+    subset = find_subset (skylist[0].regions[i], stars, Nstars, &Nsubset);
+    find_matches_refstars (skylist[0].regions[i], subset, Nsubset, &catalog, options[0]);
     if (Nsubset) free (subset);
 
Index: /trunk/Ohana/src/addstar/src/addstar.c
===================================================================
--- /trunk/Ohana/src/addstar/src/addstar.c	(revision 5444)
+++ /trunk/Ohana/src/addstar/src/addstar.c	(revision 5445)
@@ -4,5 +4,5 @@
 
   int Nm, Na, Ns;
-  int i, Nstars, Noverlap, Nregions, Nsubset, Naverage, Nmeasure;
+  int i, Nstars, Noverlap, Nsubset, Naverage, Nmeasure;
   Stars *stars, **subset;
   Image image, *overlap;
@@ -13,5 +13,4 @@
   SkyTable *sky;
   SkyList *skylist;
-  SkyRegion *regions;
 
   double dtime;
@@ -24,9 +23,8 @@
   options = args (argc, argv, options);
 
-  sky = SkyTableFromGSC (GSCFILE, SKY_DEPTH, VERBOSE);
-
+  sky = SkyTableLoadOptimal ();
+  
   stars = NULL;
   overlap = NULL;
-  regions = NULL;
   set_db (&db);
   if (options.update) {
@@ -57,8 +55,7 @@
     break;
   }
-  SkyListSetPath (skylist, CATDIR);
   if (options.only_match || options.existing_regions) {
     SkyList *tmp;
-    tmp = SkyListExistingSubset (skylist);
+    tmp = SkyListExistingSubset (skylist, CATDIR);
     SkyListFree (skylist);
     skylist = tmp;
@@ -75,9 +72,10 @@
     gettimeofday (&t1, NULL);
 
-    load_pt_catalog (&catalog, skylist[0].regions[i]);
+    load_pt_catalog (&catalog, skylist[0].regions[i], CATDIR);
 
     /* for only_match, skip empty catalogs XXX EAM : this leaves behind empty files */
     if ((catalog.Nave_disk == 0) && options.only_match) {
       unlock_catalog (&catalog);
+      free (catalog.filename);
       continue;
     }
@@ -128,4 +126,5 @@
       unlock_catalog (&catalog);
     }
+    free (catalog.filename);
 
     gettimeofday (&t2, NULL);
Index: /trunk/Ohana/src/addstar/src/addstarc.c
===================================================================
--- /trunk/Ohana/src/addstar/src/addstarc.c	(revision 5444)
+++ /trunk/Ohana/src/addstar/src/addstarc.c	(revision 5445)
@@ -47,5 +47,5 @@
       SendCommand (BindSocket, 5, "REFCT");
       Send_AddstarClientOptions (BindSocket, &options, 1, TRUE);
-      Send_GSCRegion (BindSocket, &UserPatch, 1, TRUE);
+      Send_SkyRegion (BindSocket, &UserPatch, 1, TRUE);
       SendMessage (BindSocket, argv[1]);
       break;
Index: /trunk/Ohana/src/addstar/src/addstard.c
===================================================================
--- /trunk/Ohana/src/addstar/src/addstard.c	(revision 5444)
+++ /trunk/Ohana/src/addstar/src/addstard.c	(revision 5445)
@@ -10,4 +10,7 @@
   options = ConfigInit (&argc, argv);
   args_server (argc, argv);
+
+  /* store the sky table in a global? */
+  ServerSky = SkyTableLoadOptimal ();
 
   /* if we separate the incoming data from db update, spawn db thread here */
Index: /trunk/Ohana/src/addstar/src/args_client.c
===================================================================
--- /trunk/Ohana/src/addstar/src/args_client.c	(revision 5444)
+++ /trunk/Ohana/src/addstar/src/args_client.c	(revision 5445)
@@ -27,17 +27,17 @@
   /*** provide additional data ***/ 
   /* restrict to a portion of the sky? (REFCAT only) */
-  UserPatch.RA[0] = 0;
-  UserPatch.RA[1] = 360;
-  UserPatch.DEC[0] = -90;
-  UserPatch.DEC[1] = +90;
+  UserPatch.Rmin = 0;
+  UserPatch.Rmax= 360;
+  UserPatch.Dmin = -90;
+  UserPatch.Dmax = +90;
   if ((N = get_argument (argc, argv, "-region"))) {
     remove_argument (N, &argc, argv);
-    UserPatch.RA[0] = atof (argv[N]);
-    remove_argument (N, &argc, argv);
-    UserPatch.RA[1] = atof (argv[N]);
-    remove_argument (N, &argc, argv);
-    UserPatch.DEC[0] = atof (argv[N]);
-    remove_argument (N, &argc, argv);
-    UserPatch.DEC[1] = atof (argv[N]);
+    UserPatch.Rmin = atof (argv[N]);
+    remove_argument (N, &argc, argv);
+    UserPatch.Rmax = atof (argv[N]);
+    remove_argument (N, &argc, argv);
+    UserPatch.Dmin = atof (argv[N]);
+    remove_argument (N, &argc, argv);
+    UserPatch.Dmax = atof (argv[N]);
     remove_argument (N, &argc, argv);
   }
Index: /trunk/Ohana/src/addstar/src/args_server.c
===================================================================
--- /trunk/Ohana/src/addstar/src/args_server.c	(revision 5444)
+++ /trunk/Ohana/src/addstar/src/args_server.c	(revision 5445)
@@ -13,17 +13,17 @@
 
   /* restrict to a portion of the sky? (REFCAT only) */
-  UserPatch.RA[0] = 0;
-  UserPatch.RA[1] = 360;
-  UserPatch.DEC[0] = -90;
-  UserPatch.DEC[1] = +90;
+  UserPatch.Rmin = 0;
+  UserPatch.Rmax = 360;
+  UserPatch.Dmin = -90;
+  UserPatch.Dmax = +90;
   if ((N = get_argument (argc, argv, "-region"))) {
     remove_argument (N, &argc, argv);
-    UserPatch.RA[0] = atof (argv[N]);
+    UserPatch.Rmin = atof (argv[N]);
     remove_argument (N, &argc, argv);
-    UserPatch.RA[1] = atof (argv[N]);
+    UserPatch.Rmax = atof (argv[N]);
     remove_argument (N, &argc, argv);
-    UserPatch.DEC[0] = atof (argv[N]);
+    UserPatch.Dmin = atof (argv[N]);
     remove_argument (N, &argc, argv);
-    UserPatch.DEC[1] = atof (argv[N]);
+    UserPatch.Dmax = atof (argv[N]);
     remove_argument (N, &argc, argv);
   }
Index: /trunk/Ohana/src/addstar/src/getgsc.c
===================================================================
--- /trunk/Ohana/src/addstar/src/getgsc.c	(revision 5444)
+++ /trunk/Ohana/src/addstar/src/getgsc.c	(revision 5445)
@@ -8,10 +8,9 @@
 Stars *getgsc (SkyRegion *patch, int *NSTARS) {
   
-  int i, Ngsc, Nregions, Nstars; 
+  int i, Ngsc, Nstars; 
   Stars *gsc;
   Stars *stars;
   SkyList *skylist;
   SkyTable *sky;
-  char *tmp;
 
   NAMED_PHOTCODE (GSC_M, "GSC_M");
Index: /trunk/Ohana/src/addstar/src/load_pt_catalog.c
===================================================================
--- /trunk/Ohana/src/addstar/src/load_pt_catalog.c	(revision 5444)
+++ /trunk/Ohana/src/addstar/src/load_pt_catalog.c	(revision 5445)
@@ -1,11 +1,14 @@
 # include "addstar.h"
 
-int load_pt_catalog (Catalog *catalog, SkyRegion *region) {
+int load_pt_catalog (Catalog *catalog, SkyRegion *region, char *path) {
   
-  check_permissions (region[0].name);
+  char filename[256];
 
-  /* don't free region before catalog! */
-  catalog[0].filename = region[0].name;
-  if (VERBOSE) fprintf (stderr, "adding to %s\n", region[0].name);
+  sprintf (filename, "%s/%s.cpt", path, region[0].name);
+
+  check_permissions (filename);
+  if (VERBOSE) fprintf (stderr, "adding to %s\n", filename);
+
+  catalog[0].filename = strcreate (filename);
     
   switch (lock_catalog (catalog, LCK_XCLD)) {
Index: /trunk/Ohana/src/addstar/src/mkcatalog.c
===================================================================
--- /trunk/Ohana/src/addstar/src/mkcatalog.c	(revision 5444)
+++ /trunk/Ohana/src/addstar/src/mkcatalog.c	(revision 5445)
@@ -7,5 +7,5 @@
   time_t now;
 
-  if (VERBOSE) fprintf (stderr, "new catalog file: %s\n", region[0].name);
+  if (VERBOSE) fprintf (stderr, "new catalog file: %s\n", catalog[0].filename);
 
   /* set the recommended CATFORMAT */
Index: /trunk/Ohana/src/libautocode/def/SkyRegion.d
===================================================================
--- /trunk/Ohana/src/libautocode/def/SkyRegion.d	(revision 5444)
+++ /trunk/Ohana/src/libautocode/def/SkyRegion.d	(revision 5445)
@@ -2,5 +2,5 @@
 EXTNAME SKY_REGION
 TYPE    BINTABLE
-SIZE    292
+SIZE    56
 
 FIELD   Rmin,	   R_MIN,	   float, 
@@ -15,3 +15,3 @@
 FIELD   child,	   CHILD,	   char,          does this entry have children?
 FIELD   table,	   TABLE,	   char,          does this entry have a table?
-FIELD   name,      NAME,           char[257],     name / filename
+FIELD   name,      NAME,           char[21],      name / filename
Index: /trunk/Ohana/src/libdvo/src/skyregion_io.c
===================================================================
--- /trunk/Ohana/src/libdvo/src/skyregion_io.c	(revision 5444)
+++ /trunk/Ohana/src/libdvo/src/skyregion_io.c	(revision 5445)
@@ -29,5 +29,5 @@
     return (NULL);
   }
-  if (!fits_fread_ftable (f, &ftable, "SKY_REGIONS")) {
+  if (!fits_fread_ftable (f, &ftable, "SKY_REGION")) {
     if (VERBOSE) fprintf (stderr, "can't read Sky Region table\n");
     fits_free_header (&header);
@@ -47,8 +47,34 @@
 }
 
-int SkyTableSave (SkyTable *table, char *filename) {
+int SkyTableSave (SkyTable *skytable, char *filename) {
 
-  fprintf (stderr, "not yet defined\n");
+  Header header;
+  Matrix matrix;
+  Header theader;
+  FTable ftable;
+  FILE *f;
 
+  /* make phu header (no matrix needed) */
+  ftable.header = &theader;
+  fits_init_header (&header);
+  header.extend = TRUE;
+  fits_create_header (&header);
+  fits_create_matrix (&header, &matrix);
+
+  fits_table_set_SkyRegion (&ftable, skytable[0].regions, skytable[0].Nregions);
+
+  f = fopen (filename, "w");
+  if (f == (FILE *) NULL) { 
+    fprintf (stderr, "cannot open %s for output\n", filename);
+    exit (1);
+  }
+  
+  fits_fwrite_header  (f, &header);
+  fits_fwrite_matrix  (f, &matrix);
+  fits_fwrite_Theader (f, &theader);
+  fits_fwrite_table  (f, &ftable);
+  fclose (f);
+
+  return (TRUE);
 }
 
