Index: trunk/Ohana/src/libfits/header/F_H_field.c
===================================================================
--- trunk/Ohana/src/libfits/header/F_H_field.c	(revision 41374)
+++ trunk/Ohana/src/libfits/header/F_H_field.c	(revision 41375)
@@ -143,2 +143,27 @@
 }
 
+int gfits_header_append_line_raw (Header *header, char *line) {
+
+  // line: input pointer to string of at least 80 chars
+
+  /* find the END of the header */
+  char *p = gfits_header_field (header, "END", 1);
+  if (p == NULL) return (FALSE); 
+
+  /* is there enough space for 1 more line? */
+  if (header[0].datasize - (p - (header[0].buffer)) < 2*FT_LINE_LENGTH) {
+    header[0].datasize += FT_RECORD_SIZE;
+    REALLOCATE (header[0].buffer, char, header[0].datasize);
+    /* re-find the "END" marker, in case new memory block is used */
+    p = gfits_header_field (header, "END", 1);
+    if (p == NULL) return (FALSE); 
+    // fill in the region after the END line with spaces
+    memset (p + FT_LINE_LENGTH, ' ', FT_RECORD_SIZE);
+  }
+
+  /* push END line back 1 */
+  memmove ((p + FT_LINE_LENGTH), p, FT_LINE_LENGTH);
+  memcpy (p, line, FT_LINE_LENGTH);
+  return TRUE;
+}
+
Index: trunk/Ohana/src/libfits/include/gfitsio.h
===================================================================
--- trunk/Ohana/src/libfits/include/gfitsio.h	(revision 41374)
+++ trunk/Ohana/src/libfits/include/gfitsio.h	(revision 41375)
@@ -128,4 +128,5 @@
 char   *gfits_header_field             PROTO((Header *header, char *field, int N)); 
 char   *gfits_header_lineno            PROTO((Header *header, off_t N)); 
+int     gfits_header_append_line_raw   PROTO((Header *header, char *line));
 char   *gfits_keyword_end              PROTO((char *line));
 int     gfits_copy_header              PROTO((Header *in, Header *out)); 
