Index: /branches/dvo-mods-2007-02/Ohana/src/libautocode/def/photcode.d
===================================================================
--- /branches/dvo-mods-2007-02/Ohana/src/libautocode/def/photcode.d	(revision 12320)
+++ /branches/dvo-mods-2007-02/Ohana/src/libautocode/def/photcode.d	(revision 12321)
@@ -2,5 +2,5 @@
 EXTNAME      DVO_PHOTCODE
 TYPE         BINTABLE
-SIZE         77
+SIZE         80
 DESCRIPTION  DVO Photcode Description Table 
 
@@ -9,4 +9,5 @@
 FIELD  name,        NAME,        char[32],	 name for filter combination 
 FIELD  type,        TYPE,        char,	      	 PRI/SEC/DEP/REF 
+FIELD  dummy,       DUMMY,       char[3],        padding
 FIELD  C,           C_LAM,       short,	      	 primary phot calibration terms (millimags) 
 FIELD  dC,          C_LAM_ERR,   short,	      	 primary phot calibration terms (millimags) 
Index: /branches/dvo-mods-2007-02/Ohana/src/libdvo/Makefile
===================================================================
--- /branches/dvo-mods-2007-02/Ohana/src/libdvo/Makefile	(revision 12320)
+++ /branches/dvo-mods-2007-02/Ohana/src/libdvo/Makefile	(revision 12321)
@@ -33,4 +33,6 @@
 $(SRC)/LoadPhotcodesText.$(ARCH).o   \
 $(SRC)/LoadPhotcodesFITS.$(ARCH).o   \
+$(SRC)/SavePhotcodesText.$(ARCH).o   \
+$(SRC)/SavePhotcodesFITS.$(ARCH).o   \
 $(SRC)/imreg_datatypes.$(ARCH).o \
 $(SRC)/mosaic_astrom.$(ARCH).o   \
Index: /branches/dvo-mods-2007-02/Ohana/src/libdvo/include/dvo.h
===================================================================
--- /branches/dvo-mods-2007-02/Ohana/src/libdvo/include/dvo.h	(revision 12320)
+++ /branches/dvo-mods-2007-02/Ohana/src/libdvo/include/dvo.h	(revision 12321)
@@ -279,4 +279,8 @@
 int LoadPhotcodesText (char *filename);
 int LoadPhotcodesFITS (char *filename);
+int SavePhotcodesText (char *filename);
+int SavePhotcodesFITS (char *filename);
+
+void PrintPhotcodeNamebyCode (FILE *f, char *format, int code);
 
 int GetPhotcodeCodebyName (char *name);
Index: /branches/dvo-mods-2007-02/Ohana/src/libdvo/src/LoadPhotcodes.c
===================================================================
--- /branches/dvo-mods-2007-02/Ohana/src/libdvo/src/LoadPhotcodes.c	(revision 12320)
+++ /branches/dvo-mods-2007-02/Ohana/src/libdvo/src/LoadPhotcodes.c	(revision 12321)
@@ -7,5 +7,10 @@
   
   /* next try to load the photcodes from the master text photcode file */
-  if (LoadPhotcodesText (master_file)) return TRUE;
+  /* automatically (or on demand?) save the text file to the FITS version */
+  if (LoadPhotcodesText (master_file)) { 
+      if (!check_file_access (catdir_file, TRUE, TRUE)) return TRUE;
+      SavePhotcodesFITS (catdir_file);
+      return TRUE;
+  }
 
   return FALSE;
Index: /branches/dvo-mods-2007-02/Ohana/src/libdvo/src/LoadPhotcodesFITS.c
===================================================================
--- /branches/dvo-mods-2007-02/Ohana/src/libdvo/src/LoadPhotcodesFITS.c	(revision 12320)
+++ /branches/dvo-mods-2007-02/Ohana/src/libdvo/src/LoadPhotcodesFITS.c	(revision 12321)
@@ -10,5 +10,5 @@
   FITS_DB db;
 
-  int i, code, Ncode, Nsec;
+  int i, code, Ncode, Nsec, Nsecfilt;
 
   /* XXX choose more sensible lock timeouts! */
@@ -52,5 +52,5 @@
 
   /* set up photcode indexes (see dvo_photcode_ops.c) */
-  Nsec = 0;
+  Nsecfilt = 0;
   for (i = 0; i < Ncode; i++) {
     if (photcode[i].type == PHOT_ALT) continue; /* no hashcode for ALT codes */
@@ -65,20 +65,20 @@
     table[0].hashcode[photcode[i].code] = i;
     if (photcode[i].type == PHOT_SEC) {
-      table[0].hashNsec[photcode[i].code] = Nsec;
-      table[0].codeNsec[Nsec] = photcode[i].code;
-      Nsec ++;
+      table[0].hashNsec[photcode[i].code] = Nsecfilt;
+      table[0].codeNsec[Nsecfilt] = photcode[i].code;
+      Nsecfilt ++;
     }
   }
 
-  /* validity check for references */
+  // validity check for references
+  // photcode.equiv of 0 means "undefined"
   for (i = 0; i < Ncode; i++) {
     if (photcode[i].type == PHOT_DEP) {
-      if (photcode[i].equiv) {
-	Nsec = table[0].hashcode[photcode[i].equiv];
-	if ((Nsec >= Ncode) || (Nsec < 0)) {
-	  fprintf (stderr, "reference for dependent photcode is not in photcodes\n");
-	  free (photcode);
-	  return FALSE;
-	}
+      if (photcode[i].equiv == 0) continue;
+      Nsec = table[0].hashcode[photcode[i].equiv];
+      if ((Nsec >= Ncode) || (Nsec < 0)) {
+	fprintf (stderr, "reference for dependent photcode is not in photcodes\n");
+	free (photcode);
+	return FALSE;
       }
       if (photcode[Nsec].type != PHOT_SEC) {
@@ -105,5 +105,5 @@
   table[0].code     = photcode;
   table[0].Ncode    = Ncode;
-  table[0].Nsecfilt = Nsec;
+  table[0].Nsecfilt = Nsecfilt;
 
   return (TRUE);
Index: /branches/dvo-mods-2007-02/Ohana/src/libdvo/src/LoadPhotcodesText.c
===================================================================
--- /branches/dvo-mods-2007-02/Ohana/src/libdvo/src/LoadPhotcodesText.c	(revision 12320)
+++ /branches/dvo-mods-2007-02/Ohana/src/libdvo/src/LoadPhotcodesText.c	(revision 12321)
@@ -9,5 +9,5 @@
 
   FILE *f;
-  int i, Nsec, Ncode, NPHOTCODE, Nfield;
+  int i, Nsecfilt, Nsec, Ncode, NPHOTCODE, Nfield;
   int code;
   char *c;
@@ -60,4 +60,5 @@
     photcode[Ncode].type = 0;
     photcode[Ncode].code = code;
+    memset (photcode[Ncode].name, 0, 32);
     strcpy (photcode[Ncode].name, name);
     if (!strncasecmp (type, "pri", 3)) {
@@ -133,5 +134,5 @@
   
   /* set up photcode indexes (see dvo_photcode_ops.c) */
-  Nsec = 0;
+  Nsecfilt = 0;
   for (i = 0; i < Ncode; i++) {
     if (photcode[i].type == PHOT_ALT) continue; /* no hashcode for ALT codes */
@@ -146,27 +147,25 @@
     table[0].hashcode[photcode[i].code] = i;
     if (photcode[i].type == PHOT_SEC) {
-      table[0].hashNsec[photcode[i].code] = Nsec;
-      table[0].codeNsec[Nsec] = photcode[i].code;
-      Nsec ++;
-    }
-  }
-  table[0].Nsecfilt = Nsec;
-
-  /* validity check for references */
+      table[0].hashNsec[photcode[i].code] = Nsecfilt;
+      table[0].codeNsec[Nsecfilt] = photcode[i].code;
+      Nsecfilt ++;
+    }
+  }
+
+  // validity check for references
+  // photcode.equiv of 0 means "undefined"
   for (i = 0; i < Ncode; i++) {
     if (photcode[i].type == PHOT_DEP) {
-      // photcode.equiv of 0 means "undefined"
-      if (photcode[i].equiv) {
-	Nsec = table[0].hashcode[photcode[i].equiv];
-	if ((Nsec >= Ncode) || (Nsec < 0)) {
-	  fprintf (stderr, "reference for dependent photcode is not a valid photcode\n");
-	  free (photcode);
-	  return (FALSE);
-	}
-	if (photcode[Nsec].type != PHOT_SEC) {
-	  fprintf (stderr, "reference for dependent photcode is not an average photcode\n");
-	  free (photcode);
-	  return (FALSE);
-	}
+      if (photcode[i].equiv == 0) continue;
+      Nsec = table[0].hashcode[photcode[i].equiv];
+      if ((Nsec >= Ncode) || (Nsec < 0)) {
+	fprintf (stderr, "reference for dependent photcode is not a valid photcode\n");
+	free (photcode);
+	return (FALSE);
+      }
+      if (photcode[Nsec].type != PHOT_SEC) {
+	fprintf (stderr, "reference for dependent photcode is not an average photcode\n");
+	free (photcode);
+	return (FALSE);
       }
     }
@@ -185,6 +184,7 @@
     }
   }
-  table[0].code = photcode;
-  table[0].Ncode = Ncode;
+  table[0].code     = photcode;
+  table[0].Ncode    = Ncode;
+  table[0].Nsecfilt = Nsecfilt;
 
   return (TRUE);
