void process_general_transform( VIO_General_transform* t )
{
    switch (t->type) {
    case LINEAR:
        process_linear_transform( get_linear_transform_ptr(t) );
        break;
    case THIN_PLATE_SPLINE:
        print("[THIN PLATE SPLINE]\n");
        break;
    case USER_TRANSFORM:
        print("[USER SPECIFIED TRANSFORM]\n");
        break;
    case CONCATENATED_TRANSFORM:
        process_concatenated_transform( t );
        break;
    case GRID_TRANSFORM:
        print("[GRID TRANSFORM]\n");
        break;
    }
}
int
main(int argc, char *argv[])
{
  char   **av ;
  int    ac, nargs ;
  MRI    *mri=NULL ;
  char   *xform_fname=NULL, *in_fname=NULL, *out_fname=NULL ;

  /* rkt: check for and handle version tag */
  nargs = handle_version_option
          (argc, argv,
           "$Id: mri_add_xform_to_header.c,v 1.12 2011/03/02 00:04:13 nicks Exp $",
           "$Name:  $");

  argc -= nargs;

  Progname = argv[0] ;
  ErrorInit(NULL, NULL, NULL) ;
  DiagInit(NULL, NULL, NULL) ;

  if (argc == 1)
  {
    usage_exit();
  }

  ac = argc ;
  av = argv ;
  for ( ; argc > 1 && ISOPTION(*argv[1]) ; argc--, argv++)
  {
    nargs = get_option(argc, argv) ;
    argc -= nargs ;
    argv += nargs ;
  }

  if (argc < 2)
  {
    ErrorExit(ERROR_BADPARM, "%s: no transform name specified", Progname) ;
  }
  xform_fname = argv[1] ;

  if (argc < 3)
  {
    ErrorExit(ERROR_BADPARM, "%s: no input name specified", Progname) ;
  }
  in_fname = argv[2] ;

  if (argc < 4)
  {
    out_fname = in_fname ;
  }
  else
  {
    out_fname = argv[3] ;
  }

  if (verbose)
  {
    fprintf(stderr, "reading from %s...", in_fname) ;
  }

  // we have two cases, in_fname is just a directory name or .mgz
  if (fio_IsDirectory(in_fname))
  {
    mri = MRIreadInfo(in_fname) ;  // must be old COR volume
  }
  else if (fio_FileExistsReadable(in_fname))
  {
    char *ext = fio_extension(in_fname);
    if (ext==0)
    {
      ErrorExit(ERROR_BADPARM, "%s: no extension found", Progname) ;
    }
    printf("INFO: extension is %s\n", ext);
    if (strcmp(ext, "mgz")==0 || strcmp(ext, "mgh")==0)
    {
      mri = MRIread(in_fname);  // mgh or mgz
    }
    else
    {
      ErrorExit(ERROR_BADPARM,
                "%s: currently only .mgz or .mgh saves transform name",
                Progname) ;
    }
  }
  if (!mri)
    ErrorExit(ERROR_NO_FILE, "%s: could not open source file %s",
              Progname, in_fname) ;

  if (! CopyNameOnly)
  {
    // why do we need to load the transform at this time
    // mri is removed anyway???? -- good point, added -s for noload
    if (input_transform_file(xform_fname, &mri->transform) != OK)
      ErrorPrintf(ERROR_NO_MEMORY,
                  "%s: could not read xform file '%s'\n",
                  Progname, xform_fname);
    // my guess is just to verify the validity of the transform?
    mri->linear_transform = get_linear_transform_ptr(&mri->transform) ;
    mri->inverse_linear_transform =
      get_inverse_linear_transform_ptr(&mri->transform) ;
    mri->free_transform = 1 ;
  }
  strcpy(mri->transform_fname, xform_fname) ;

  if (verbose)
  {
    fprintf(stderr, "done.\nwriting to %s...", out_fname) ;
  }
  // this writes COR-.info only
  if (fio_IsDirectory(out_fname))
  {
    MRIwriteInfo(mri, out_fname) ;
  }
  else
  {
    MRIwrite(mri, out_fname);  // currently only mgh format write xform info
  }

  if (verbose)
  {
    fprintf(stderr, "done.\n") ;
  }

  MRIfree(&mri) ;
  exit(0) ;
  return(0) ;
}