Index: trunk/ppImage/configure.ac
===================================================================
--- trunk/ppImage/configure.ac	(revision 40452)
+++ trunk/ppImage/configure.ac	(revision 40453)
@@ -16,4 +16,11 @@
 AC_PROG_LIBTOOL
 AC_SYS_LARGEFILE
+
+dnl ------------------------------------------------------------
+
+AC_PATH_PROG([ERRORCODES], [psParseErrorCodes], [missing])
+if test "$ERRORCODES" = "missing" ; then
+  AC_MSG_ERROR([psParseErrorCodes is required])
+fi
 
 PKG_CHECK_MODULES([PSLIB],    [pslib >= 1.0.0])
Index: trunk/ppImage/src/Makefile.am
===================================================================
--- trunk/ppImage/src/Makefile.am	(revision 40452)
+++ trunk/ppImage/src/Makefile.am	(revision 40453)
@@ -1,6 +1,5 @@
 bin_PROGRAMS = ppImage
 
-noinst_HEADERS = \
-	ppImage.h
+noinst_HEADERS  = ppImage.h ppImageErrorCodes.h
 
 # Force recompilation of ppImageVersion.c, since it gets the version information
@@ -10,5 +9,5 @@
 FORCE: ;
 
-BUILT_SOURCES = ppImageVersionDefinitions.h
+BUILT_SOURCES = ppImageErrorCodes.h ppImageErrorCodes.c ppImageVersionDefinitions.h
 
 ppImage_CFLAGS = $(PPIMAGE_CFLAGS) $(PPSTATS_CFLAGS) $(PSASTRO_CFLAGS) $(PSPHOT_CFLAGS) $(PSMODULE_CFLAGS) $(PSLIB_CFLAGS)
@@ -27,4 +26,5 @@
 	ppImageDetrendFree.c \
 	ppImageDetrendPattern.c \
+	ppImageErrorCodes.c \
 	ppImageRebinReadout.c \
 	ppImageMosaic.c \
@@ -55,5 +55,8 @@
 	ppImageBurntoolApply.c
 
-CLEANFILES = *~
+CLEANFILES = *~ ppImageErrorCodes.h ppImageErrorCodes.c
+
+EXTRA_DIST = ppImageErrorCodes.dat ppImageErrorCodes.c.in ppImageErrorCodes.h.in
+
 
 clean-local:
@@ -62,2 +65,8 @@
 tags:
 	etags `find . -name \*.[ch] -print`
+
+ppImageErrorCodes.h : ppImageErrorCodes.dat ppImageErrorCodes.h.in
+	$(ERRORCODES) --data=ppImageErrorCodes.dat --outdir=. ppImageErrorCodes.h
+
+ppImageErrorCodes.c : ppImageErrorCodes.dat ppImageErrorCodes.c.in ppImageErrorCodes.h
+	$(ERRORCODES) --data=ppImageErrorCodes.dat --outdir=. ppImageErrorCodes.c
Index: trunk/ppImage/src/ppImage.h
===================================================================
--- trunk/ppImage/src/ppImage.h	(revision 40452)
+++ trunk/ppImage/src/ppImage.h	(revision 40453)
@@ -15,4 +15,5 @@
 #include "psastro.h"
 #include "ppStats.h"
+#include "ppImageErrorCodes.h"
 
 #define RECIPE_NAME "PPIMAGE"           // Name of the recipe to use
Index: trunk/ppImage/src/ppImageErrorCodes.c.in
===================================================================
--- trunk/ppImage/src/ppImageErrorCodes.c.in	(revision 40452)
+++ trunk/ppImage/src/ppImageErrorCodes.c.in	(revision 40453)
@@ -18,5 +18,5 @@
     for (int i = 0; i < nerror; i++) {
        psErrorDescription *tmp = psAlloc(sizeof(psErrorDescription));
-       p_psMemSetPersistent(tmp, true);
+       psMemSetPersistent(tmp, true);
        *tmp = errors[i];
        psErrorRegister(tmp, 1);
Index: trunk/ppImage/src/ppImageErrorCodes.dat
===================================================================
--- trunk/ppImage/src/ppImageErrorCodes.dat	(revision 40452)
+++ trunk/ppImage/src/ppImageErrorCodes.dat	(revision 40453)
@@ -9,2 +9,4 @@
 PROG                    Programming error
 DATA                    invalid data
+UNKNOWN			unspecified error, not defined
+NO_PIXELS  		No good pixels in image
Index: trunk/ppImage/src/ppImageMaskStats.c
===================================================================
--- trunk/ppImage/src/ppImageMaskStats.c	(revision 40452)
+++ trunk/ppImage/src/ppImageMaskStats.c	(revision 40453)
@@ -89,4 +89,11 @@
             (float) Npix_dynamic / Npix_valid, (float) Npix_magic / Npix_valid,
             (float) Npix_advisory / Npix_valid);
+
+  if ((Npix_valid == 0)||(Npix_static + Npix_dynamic >= Npix_valid)) {
+    if (psMetadataLookupS32(NULL, stats, "QUALITY") == 0) {
+      psMetadataAddS32(stats, PS_LIST_TAIL, "QUALITY", PS_META_REPLACE, "No good pixels in image.", PPIMAGE_ERR_NO_PIXELS);
+    }
+  }
+  
   return(true);
 }
