#define MAX_STR_LEN     1024

#define MOD_INVALID       -1
#define MOD_STR            0
#define MOD_CHAR           1            /* char mods */
#define MOD_U1            21            /* int mods  */
#define MOD_S1            22
#define MOD_U2            23
#define MOD_S2            24
#define MOD_U4            25
#define MOD_S4            26
#define MOD_F4            30            /* real mods */
#define MOD_F8            31

#define SCR_SHOW_BAD_BS 0x01            /* script display */
#define SCR_SHOW_FILE   0x02            /* script display */

#define SCR_MOD_BADBS   0x10            /* script mods  */
#define SCR_MOD_FILE    0x20            /* script mods  */

#define USE_SHORT          0
#define USE_LONG           1
#define USE_VERSION        2
#define USE_GE             3
#define USE_HISTORY        4

/* GE diplay bit values */
#define GE_NONE            0
#define GE_ALL          0xff
#define GE_HEADER       0x01
#define GE_EXTRAS       0x02
#define GE_UV17         0x10
#define GE_OFF          0x20

#define NDISP_NONE         0
#define NDISP_INT2      0x01
#define NDISP_INT4      0x02
#define NDISP_REAL4     0x04
#define NDISP_ALL       0xff

#define CHECK_NULL_STR(str) ( str ? str : "(nil)" )

                                  /* from Ifile.c ...                  */
typedef struct                    /* stuff extracted from GE 5.x image */
{
  int   good;                     /* is this a good image?             */
  int   nx, ny;                   /* image matrix                      */
  int   uv17;                     /* apparently codes for scan index   */
  float dx,dy,dz, zoff, tr,te;    /* various dimensions                */
  char  orients[8];               /* orientation string                */
} ge_header_info;

typedef struct                    /* extra stuff from mri_read.c       */
{
  int   bpp;                      /* bits per pixel                    */
  int   cflag;                    /* compression flag (0=compressed)   */
  int   hdroff;                   /* offset of image header            */
  int   skip;                     /* offset of image data into file    */
  int   swap;                     /* did we do byte swapping?          */
  float xyz[9];
} ge_extras;

typedef struct
{
    int     num_files;        /* number of files to work with       */
    char ** flist;           /* list of files to work with         */
    int     debug;          /* debug level = 0, 1 or 2            */
    int     data_len;      /* bytes of data in mod_data          */
    int     ge_disp;      /* do we display ge_values            */
    int     ge4_disp;    /* option bits for GEMS 4.x type      */
    int     script;     /* inputs are scripts: bit mask       */
    int     ndisp;     /* option bits for numeric display    */

    int     swap;             /* do we need to swap bytes   */
    int     modify;          /* do we modify the data?     */
    int     mod_type;       /* a string or repeated value */
    long    offset;        /* starting location          */
    int     length;       /* bytes to display or modify */
    int     quiet;       /* do not display header info */
    char  * mod_data;   /* new data                   */
} param_t;

typedef struct                    /* file offsets for various fields   */
{
    int nx, ny;
    int uv17;
    int dx, dy, dz;
    int tr, te;
    int xyz;                      /* 3x3 float matrix from extras      */
} ge_off;

/* local protos */
int  attack_files      ( param_t * p );
int  check_mod_type    ( char * name );
int  check_usage       ( int argc, char * argv[] );
int  disp_numeric_data ( char * data, param_t * p, FILE * fp );
int  disp_param_data   ( param_t * p );
int  mtype_size        ( int type );

int  read_ge_header    ( char * pathname, ge_header_info * hi, ge_extras * E,
                         ge_off * off );
int  process_file      ( char * pathname, param_t * p );
int  process_ge        ( char * pathname, param_t * p );
int  process_ge4       ( char * pathname, param_t * p );
int  read_file         ( char * filename, char ** fdata, int * flen );
int  set_params        ( param_t * p, int argc, char * argv[] );

int  scr_show_file     ( char * filename, param_t * p );
int  scr_show_bad_bs   ( char * filename, param_t * p );


int  help_full         ( char * prog );
int  help_ge_structs   ( char * prog );
int  usage             ( char * prog, int level );
int  write_data_to_file( FILE * fp, char * filename, param_t * p, int length );

unsigned long THD_filesize  ( char * pathname );

int  disp_ge_offsets        ( char * info, ge_off         * D );
int  r_idisp_ge_extras      ( char * info, ge_extras      * E );
int  r_idisp_ge_header_info ( char * info, ge_header_info * I );



syntax highlighted by Code2HTML, v. 0.9.1