From f6194ab2522035b39f706fff1608ea5c9b89c57b Mon Sep 17 00:00:00 2001
From: Mark Jenkinson <mark@fmrib.ox.ac.uk>
Date: Tue, 28 Sep 2004 11:12:34 +0000
Subject: [PATCH] minor, but useful, touches

---
 avwcpgeom.c   | 32 +++++++++++++++++++++++---------
 fslchfiletype |  8 +++++---
 fsledithd     |  6 ++++--
 3 files changed, 32 insertions(+), 14 deletions(-)

diff --git a/avwcpgeom.c b/avwcpgeom.c
index 91ce80c..4d031eb 100644
--- a/avwcpgeom.c
+++ b/avwcpgeom.c
@@ -2,7 +2,7 @@
 
 /*  avwcpgeom.c - Copy certain parts of an AVW header
 
-    Stephen Smith, FMRIB Image Analysis Group
+    Mark Jenkinson and Stephen Smith, FMRIB Image Analysis Group
 
     Copyright (C) 2001 University of Oxford  */
 
@@ -36,8 +36,10 @@ int main(argc,argv)
 {
 /*   struct dsr hdr, hdr2; */
   FSLIO *src = NULL, *dest = NULL;
-  short x, y, z, v, copydim=1, t;
+  short x, y, z, v, copydim=1, t, scode, qcode, dt=-1;
   float vx, vy, vz, tr;
+  int filetype;
+  mat44 smat, qmat;
   void *buffer = NULL;
   char desthdrname[10000];
 
@@ -72,9 +74,12 @@ int main(argc,argv)
 
 
   strcpy(desthdrname,dest->niftiptr->fname);
+  /* store the filetype and datatype */
+  filetype = FslGetFileType(dest);
+  FslGetDataType(dest,&dt);
   FslClose(dest);
   /* ...and now reopen destination for writing */
-  dest = FslOpen(desthdrname, "wb");
+  dest = FslXOpen(desthdrname, "wb", filetype);
 
   FslCloneHeader(dest,src);
 
@@ -93,12 +98,18 @@ int main(argc,argv)
 /*     hdr2.dime.dim[i]=hdr.dime.dim[i]; */
 /* } */
 
- FslGetVoxDim(src, &vx, &vy, &vz, &tr);
- FslSetVoxDim(dest, vx, vy, vz, tr);
- if (copydim) {
-   FslGetDim(src, &x, &y, &z, &v);
-   FslSetDim(src, x, y, z, v);
- }
+  scode = FslGetStdXform(src,&smat);
+  FslSetStdXform(dest,scode,smat);
+  qcode = FslGetRigidXform(src,&qmat);
+  FslSetRigidXform(dest,qcode,qmat);
+  
+  FslGetVoxDim(src, &vx, &vy, &vz, &tr);
+  FslSetVoxDim(dest, vx, vy, vz, tr);
+  
+  if (copydim) {
+    FslGetDim(src, &x, &y, &z, &v);
+    FslSetDim(src, x, y, z, v);
+  }
 
 /* }}} */
   /* {{{ write destination */
@@ -106,6 +117,9 @@ int main(argc,argv)
 /* if ( doswap )  */
 /*      swap_hdr(&hdr2); */
 
+  /* Preserve the datatype */ 
+  FslSetDataType(dest,dt);
+
  FslWriteHeader(dest);
  FslWriteVolumes(dest, buffer, v);
  FslClose(dest);
diff --git a/fslchfiletype b/fslchfiletype
index c674d88..73d3216 100755
--- a/fslchfiletype
+++ b/fslchfiletype
@@ -23,10 +23,10 @@ storedval=$FSLOUTPUTTYPE
 FSLOUTPUTTYPE=$1
 export FSLOUTPUTTYPE
 
-oldfile=$2
+oldfile=`$FSLDIR/bin/remove_ext $2`
 
 if [ $# -ge 3 ] ; then
-  newfile=$3
+  newfile=`$FSLDIR/bin/remove_ext $3`
   inplace=0
 else
   newfile=`$FSLDIR/bin/tmpnam`
@@ -49,7 +49,9 @@ fi
 
 # for inplace stuff remove and copy old one
 if [ $inplace = 1 ] ; then
-  $FSLDIR/bin/imrm $oldfile
+  if [ `$FSLDIR/bin/imtest $newfile` = 1 ] ; then 
+      $FSLDIR/bin/imrm $oldfile 
+  fi
   $FSLDIR/bin/immv $newfile $oldfile
 fi
 
diff --git a/fsledithd b/fsledithd
index 8155f14..f0942d4 100755
--- a/fsledithd
+++ b/fsledithd
@@ -23,12 +23,14 @@ if [ _$FSLDIR = _ ] ; then
     export FSLDIR
 fi
 
-EDITOR=pico
+if [ X$EDITOR = X ] ; then
+    EDITOR=pico
+fi
 if [ $# -ge 2 ] ; then
     EDITOR=$2
 fi
 
 tmpbase=`${FSLDIR}/bin/tmpnam`;
-${FSLDIR}/bin/avwhd -x $1 > ${tmpbase}
+${FSLDIR}/bin/avwhd -x $1 > ${tmpbase} || exit
 ${EDITOR} ${tmpbase}
 ${FSLDIR}/bin/avwcreatehd ${tmpbase} $1
-- 
GitLab