Index: trunk/Ohana/src/libfits/Makefile
===================================================================
--- trunk/Ohana/src/libfits/Makefile	(revision 38252)
+++ trunk/Ohana/src/libfits/Makefile	(revision 38255)
@@ -46,5 +46,5 @@
 $(MATR)/F_read_portion.$(ARCH).o		$(MATR)/F_load_M.$(ARCH).o	 \
 $(MATR)/F_matrix.$(ARCH).o                      $(MATR)/F_compress_M.$(ARCH).o   \
-$(MATR)/F_uncompress_data.$(ARCH).o
+$(MATR)/F_uncompress_data.$(ARCH).o             $(MATR)/F_swap_raw.$(ARCH).o
 
 TABLE_OBJ = \
Index: trunk/Ohana/src/libfits/include/gfitsio.h
===================================================================
--- trunk/Ohana/src/libfits/include/gfitsio.h	(revision 38252)
+++ trunk/Ohana/src/libfits/include/gfitsio.h	(revision 38255)
@@ -170,4 +170,5 @@
 int     gfits_distribute_data  	       PROTO((Matrix *matrix, int bitpix, char *data, int Ndata, int *otile, int oblank, int *ztile, int zblank, float zscale, float zzero));
 int     gfits_byteswap_zdata   	       PROTO((char *zdata, int Nzdata, int bitpix));
+int     gfits_swap_raw   	       PROTO((Matrix *matrix));
 int     gfits_extension_is_compressed  PROTO((Header *header));
 off_t   gfits_tile_size                PROTO((Matrix *matrix, int *otile, int *ztile));
Index: trunk/Ohana/src/libfits/matrix/F_swap_raw.c
===================================================================
--- trunk/Ohana/src/libfits/matrix/F_swap_raw.c	(revision 38255)
+++ trunk/Ohana/src/libfits/matrix/F_swap_raw.c	(revision 38255)
@@ -0,0 +1,46 @@
+# include <ohana.h>
+# include <gfitsio.h>
+# define DOSWAP(A,B) { char tmp = A; A = B; B = tmp; }
+
+/*********************** fits convert format ***********************************/
+/* this function is safe in the number of axes (can even be 0) */
+int gfits_swap_raw (Matrix *matrix) {
+
+  off_t i;
+
+  int bytes_per_pixel = (abs(matrix[0].bitpix) / 8);
+
+  off_t Npixels = gfits_npix_matrix (matrix);
+
+  char *byte = matrix[0].buffer;
+
+  switch (bytes_per_pixel) {
+    case 1:
+      break;
+    case 2:
+      for (i = 0; i < Npixels; i++) {
+	DOSWAP(byte[0], byte[1]);
+	byte += 2;
+      }
+      break;
+    case 4:
+      for (i = 0; i < Npixels; i++) {
+	DOSWAP(byte[0], byte[3]);
+	DOSWAP(byte[1], byte[2]);
+	byte += 4;
+      }
+      break;
+    case 8:
+      for (i = 0; i < Npixels; i++) {
+	DOSWAP(byte[0], byte[7]);
+	DOSWAP(byte[1], byte[6]);
+	DOSWAP(byte[2], byte[5]);
+	DOSWAP(byte[3], byte[4]);
+	byte += 8;
+      }
+      break;
+    default:
+      myAbort ("invalid bytes_per_pixel");
+  }
+  return TRUE;
+}
Index: trunk/Ohana/src/opihi/cmd.data/rd.c
===================================================================
--- trunk/Ohana/src/opihi/cmd.data/rd.c	(revision 38252)
+++ trunk/Ohana/src/opihi/cmd.data/rd.c	(revision 38255)
@@ -13,4 +13,10 @@
     remove_argument (N, &argc, argv);
     JustHead = TRUE;
+  }
+
+  int SwapRaw = FALSE;
+  if ((N = get_argument (argc, argv, "-swap-raw"))) {
+    remove_argument (N, &argc, argv);
+    SwapRaw = TRUE;
   }
 
@@ -239,4 +245,8 @@
   gfits_scan (&buf[0].header, "BLANK", "%d", 1, &blank);
 
+  if (SwapRaw) {
+    gfits_swap_raw (&buf[0].matrix);
+  }
+
   /** now - convert the matrix values to floats for internal use **/
   gfits_convert_format (&buf[0].header, &buf[0].matrix, -32, 1.0, 0.0, blank, gfits_get_unsign_mode());
