Index: /trunk/Ohana/src/addstar/Makefile
===================================================================
--- /trunk/Ohana/src/addstar/Makefile	(revision 33718)
+++ /trunk/Ohana/src/addstar/Makefile	(revision 33719)
@@ -29,7 +29,7 @@
 mkcmf       : $(BIN)/mkcmf.$(ARCH)
 
-all: addstar sedstar load2mass skycells mkcmf loadwise loadsupercos
-
-INSTALL = addstar sedstar load2mass skycells mkcmf loadwise loadsupercos
+all: addstar sedstar load2mass skycells mkcmf loadwise loadsupercos dumpskycells
+
+INSTALL = addstar sedstar load2mass skycells mkcmf loadwise loadsupercos dumpskycells
 
 # I need to fix the client/server version of addstar now that I have dropped Stars
@@ -275,4 +275,11 @@
 $(SRC)/sky_tessalation.$(ARCH).o
 
+DUMPSKYCELLS = \
+$(SRC)/dumpskycells.$(ARCH).o \
+$(SRC)/skycells_to_mdc.$(ARCH).o \
+$(SRC)/ConfigInit_skycells.$(ARCH).o \
+$(SRC)/Shutdown.$(ARCH).o \
+$(SRC)/SetSignals.$(ARCH).o \
+
 $(ADDSTARC)   : $(INC)/addstar.h
 $(ADDSTARD)   : $(INC)/addstar.h
@@ -280,4 +287,5 @@
 $(ADDSTAR)    : $(INC)/addstar.h
 $(SKYCELLS)   : $(INC)/addstar.h
+$(DUMPSKYCELLS): $(INC)/addstar.h
 $(LOAD-2MASS) : $(INC)/addstar.h $(INC)/2mass.h
 $(LOAD-WISE)  : $(INC)/addstar.h $(INC)/WISE.h
@@ -294,4 +302,5 @@
 $(BIN)/loadsupercos.$(ARCH): $(LOAD-SUPERCOS)
 $(BIN)/skycells.$(ARCH)    : $(SKYCELLS)
+$(BIN)/dumpskycells.$(ARCH) : $(DUMPSKYCELLS)
 $(BIN)/mkcmf.$(ARCH)       : $(MKCMF)
 
Index: /trunk/Ohana/src/addstar/include/skycells.h
===================================================================
--- /trunk/Ohana/src/addstar/include/skycells.h	(revision 33718)
+++ /trunk/Ohana/src/addstar/include/skycells.h	(revision 33719)
@@ -71,4 +71,6 @@
 int    LEVEL;
 char   PROJECTION_NUMBER[8];
+char   *SKYCELLS_MDC;
+int    READONLY;
 
 double CENTER_RA, CENTER_DEC;
@@ -109,4 +111,7 @@
 Point        sky_divide_edge           	    PROTO((Point v1, Point v2));
 
+void         skycells_to_mdc                PROTO((FILE *output, int simple, char *tess_id, FITS_DB *db)); 
+
 // XXX migrate to libdvo eventually
 int dvo_image_clear_vtable             PROTO((FITS_DB *db));
+
Index: /trunk/Ohana/src/addstar/src/ConfigInit_skycells.c
===================================================================
--- /trunk/Ohana/src/addstar/src/ConfigInit_skycells.c	(revision 33718)
+++ /trunk/Ohana/src/addstar/src/ConfigInit_skycells.c	(revision 33719)
@@ -55,5 +55,5 @@
   /* XXX this does not yet write out the master photcode table */
   sprintf (CatdirPhotcodeFile, "%s/Photcodes.dat", CATDIR);
-  if (!LoadPhotcodes (CatdirPhotcodeFile, MasterPhotcodeFile, TRUE)) {
+  if (!LoadPhotcodes (CatdirPhotcodeFile, MasterPhotcodeFile, !READONLY)) {
     fprintf (stderr, "error loading photcode table %s or master file %s\n", CatdirPhotcodeFile, MasterPhotcodeFile);
     exit (1);
Index: /trunk/Ohana/src/addstar/src/dumpskycells.c
===================================================================
--- /trunk/Ohana/src/addstar/src/dumpskycells.c	(revision 33719)
+++ /trunk/Ohana/src/addstar/src/dumpskycells.c	(revision 33719)
@@ -0,0 +1,71 @@
+# include "skycells.h"
+# include <libgen.h>
+
+int main (int argc, char **argv) {
+
+  int status;
+  FITS_DB db;
+  int simple = 0;
+  char *tess_id = NULL;
+
+  SetSignals ();
+  // prevent creation of CATDIR if it doesn't exist
+  READONLY = 1;
+  ConfigInit_skycells (&argc, argv);
+  
+  int N;
+  if ((N = get_argument (argc, argv, "-tess_id"))) {
+    remove_argument (N, &argc, argv);
+    tess_id = argv[N];
+    remove_argument (N, &argc, argv);
+  }
+  if ((N = get_argument (argc, argv, "-simple"))) {
+    remove_argument (N, &argc, argv);
+    simple = 1;
+  }
+
+  if (argc > 2) {
+    fprintf(stderr, "usage: dumpskycells <filename> -D CATDIR <catdir>\n");
+    exit(1);
+  }
+  char *filename = argc == 2 ? argv[1] : NULL;
+  FILE *mdcfile;
+  int closefile = 1;
+  if (!filename || !strcmp(filename, "-")) {
+    mdcfile = stdout;
+    closefile = 0;
+  } else {
+    mdcfile = fopen(filename, "w");
+  }
+  if (!mdcfile) {
+    fprintf(stderr, "failed to open %s\n", argv[1]);
+    exit(1);
+  }
+
+
+  /*** open the image table ***/
+  /* setup image table format and lock */
+  db.mode   = dvo_catalog_catmode (CATMODE);
+  db.format = dvo_catalog_catformat (CATFORMAT);
+  status    = dvo_image_lock (&db, ImageCat, 3600.0, LCK_SOFT);  // shorter timeout?
+  if (!status) Shutdown ("ERROR: failure to lock image catalog %s", db.filename);
+
+  /* load or create the image table */
+  if (db.dbstate == LCK_EMPTY) {
+    fprintf(stderr, "failed to find %s\n", ImageCat);
+    exit(1);
+  } else {
+    if (!dvo_image_load (&db, VERBOSE, FALSE)) {
+      Shutdown ("can't read image catalog %s", db.filename);
+    }
+  }
+
+  skycells_to_mdc(mdcfile, simple, tess_id, &db);
+
+  if (closefile) {
+    fclose(mdcfile);
+  }
+
+  dvo_image_unlock (&db);
+  exit (0);
+}
Index: /trunk/Ohana/src/addstar/src/sky_tessalation.c
===================================================================
--- /trunk/Ohana/src/addstar/src/sky_tessalation.c	(revision 33718)
+++ /trunk/Ohana/src/addstar/src/sky_tessalation.c	(revision 33719)
@@ -266,4 +266,5 @@
     if (!ring) continue;
 
+
     // subdivide each image (Nx x Ny subcells)
     Nimage = NX_SUB*NY_SUB*Nring;
@@ -272,4 +273,5 @@
       // convert the SkyRectangles to Images for output
       sky_subdivide_image (&image[j*NX_SUB*NY_SUB], &ring[j], NX_SUB, NY_SUB);
+      printf("%s %8.2f %8.2f\n", ring[j].name, ring[j].coords.crval1, ring[j].coords.crval2);
     }
 
Index: /trunk/Ohana/src/addstar/src/skycells_to_mdc.c
===================================================================
--- /trunk/Ohana/src/addstar/src/skycells_to_mdc.c	(revision 33719)
+++ /trunk/Ohana/src/addstar/src/skycells_to_mdc.c	(revision 33719)
@@ -0,0 +1,58 @@
+# include "skycells.h"
+# include <libgen.h>
+
+void skycells_to_mdc(FILE *mdcfile, int simple, char * tess_id, FITS_DB *db) {
+    // Convert FITS_DB to images structure
+    off_t NdbImages;
+    Image *dbImages = gfits_table_get_Image(&db->ftable, &NdbImages, &db->swapped);
+
+    // If tess_id was not supplied assume that it is the basename of the CATDIR
+    if (tess_id == NULL) {
+        // basename modifies string so make a copy
+        char *catdir = strdup(CATDIR);
+        tess_id = basename(catdir);
+    }
+
+    CoordTransform *celestial_to_galactic = InitTransform(COORD_CELESTIAL, COORD_GALACTIC);
+
+    if (!simple) {
+        fprintf(mdcfile, "Skycell MULTI\n");
+    }
+
+    int i;
+    for (i = 0; i < NdbImages; i++) {
+        Image *skycell = &dbImages[i];
+        double xCenter = skycell->NX / 2.;
+        double yCenter = skycell->NY / 2.;
+        double raCenter, decCenter;
+
+        if (!XY_to_RD(&raCenter, &decCenter, xCenter, yCenter, &skycell->coords)) {
+            fprintf(stderr, "failed to transform center of image %d\n", (int) i);
+            exit(1);
+        }
+
+        double glonCenter;
+        double glatCenter;
+        ApplyTransform(&glonCenter, &glatCenter, raCenter, decCenter, celestial_to_galactic);
+
+        // width and height of skycell in degrees
+        double width  = skycell->coords.cdelt1 * skycell->NX;
+        double height = skycell->coords.cdelt2 * skycell->NY;
+
+        if (simple) {
+            fprintf(mdcfile, "%s %s %f %f %f %f %f %f\n", tess_id, skycell->name, raCenter, decCenter, glonCenter, glatCenter, width, height);
+        } else {
+            fprintf(mdcfile, "\nSkycell METADATA\n");
+            fprintf(mdcfile, "    tess_id\tSTR\t%s\n", tess_id);
+            fprintf(mdcfile, "    skycell_id\tSTR\t%s\n", skycell->name);
+            fprintf(mdcfile, "    radeg\tF32\t%f\n", raCenter);
+            fprintf(mdcfile, "    decdeg\tF32\t%f\n", decCenter);
+            fprintf(mdcfile, "    glonCenter\tF32\t%f\n", glonCenter);
+            fprintf(mdcfile, "    glatCenter\tF32\t%f\n", glatCenter);
+            fprintf(mdcfile, "    width\tF32\t%f\n", width);
+            fprintf(mdcfile, "    height\tF32\t%f\n", height);
+            fprintf(mdcfile, "END\n");
+        }
+
+    }
+}
