Skip to content

AFNI/NIfTI Server

Sections
Personal tools
You are here: Home » AFNI » Documentation

Doxygen Source Code Documentation


Main Page   Alphabetical List   Data Structures   File List   Data Fields   Globals   Search  

mri_swapbytes.c

Go to the documentation of this file.
00001 /*****************************************************************************
00002    Major portions of this software are copyrighted by the Medical College
00003    of Wisconsin, 1994-2000, and are released under the Gnu General Public
00004    License, Version 2.  See the file README.Copyright for details.
00005 ******************************************************************************/
00006    
00007 #include "mrilib.h"
00008 
00009 /*** 7D SAFE ***/
00010 
00011 #define SWAB16(x) ( ( ((x)&0x00ffU)<<8 ) | ( ((x)&0xff00U)>>8 ) )
00012 
00013 void mri_swapbytes( MRI_IMAGE *im )
00014 {
00015    register int ii , npix ;
00016 
00017 ENTRY("mri_swapbytes") ;
00018 
00019    if( im->kind != MRI_short ){
00020      fprintf( stderr , "mri_swapbytes called with non-short image kind\n" ) ;
00021      EXRETURN ;
00022    }
00023 
00024    npix = im->nvox ;
00025 
00026    for( ii=0 ; ii < npix ; ii++ )
00027      im->im.short_data[ii] = SWAB16( im->im.short_data[ii] ) ;
00028 
00029    EXRETURN ;
00030 }
00031 
00032 /*---------------------------------------------------------------------
00033    Routines to swap byte arrays in pairs and tetrads -- 14 Sep 1998
00034 -----------------------------------------------------------------------*/
00035 
00036 typedef struct { unsigned char a,b ; } twobytes ;
00037 
00038 void swap_twobytes( int n , void * ar )
00039 {
00040    register int ii ;
00041    register twobytes * tb = (twobytes *) ar ;
00042    register unsigned char tt ;
00043 
00044    for( ii=0 ; ii < n ; ii++ ){
00045       tt       = tb[ii].a ;
00046       tb[ii].a = tb[ii].b ;
00047       tb[ii].b = tt ;
00048    }
00049 }
00050 
00051 typedef struct { unsigned char a,b,c,d ; } fourbytes ;
00052 
00053 void swap_fourbytes( int n , void * ar )
00054 {
00055    register int ii ;
00056    register fourbytes * tb = (fourbytes *) ar ;
00057    register unsigned char tt ;
00058 
00059    for( ii=0 ; ii < n ; ii++ ){
00060       tt       = tb[ii].a ;
00061       tb[ii].a = tb[ii].d ;
00062       tb[ii].d = tt ;
00063       tt       = tb[ii].b ;
00064       tb[ii].b = tb[ii].c ;
00065       tb[ii].c = tt ;
00066    }
00067 }
00068 
00069 typedef struct { unsigned char a,b,c,d , D,C,B,A ; } eightbytes ;
00070 
00071 void swap_eightbytes( int n , void * ar )
00072 {
00073    register int ii ;
00074    register eightbytes * tb = (eightbytes *) ar ;
00075    register unsigned char tt ;
00076 
00077    for( ii=0 ; ii < n ; ii++ ){
00078       tt = tb[ii].a ; tb[ii].a = tb[ii].A ; tb[ii].A = tt ;
00079       tt = tb[ii].b ; tb[ii].b = tb[ii].B ; tb[ii].B = tt ;
00080       tt = tb[ii].c ; tb[ii].c = tb[ii].C ; tb[ii].C = tt ;
00081       tt = tb[ii].d ; tb[ii].d = tb[ii].D ; tb[ii].D = tt ;
00082    }
00083 }
 

Powered by Plone

This site conforms to the following standards: