/***** A quickie, I hope -- RWCox - 09 Mar 2005 *****/
#include "mrilib.h"
int main( int argc , char *argv[] )
{
THD_3dim_dataset *dset ;
NI_group *ngr ;
NI_stream ns_out ;
int iarg=1 , dodata=0 , nout=0 ;
char strname[256] = "stdout:" ;
/*-- help me if you can --*/
if( argc < 2 || strcmp(argv[1],"-help") == 0 ){
printf(
"Usage: 3dAFNItoNIML [options] dset\n"
" Dumps AFNI dataset header information to stdout in NIML format.\n"
" Mostly for debugging and testing purposes!\n"
"\n"
" OPTIONS:\n"
" -data == Also put the data into the output (will be huge).\n"
" -tcp:host:port == Instead of stdout, send the dataset to a socket.\n"
" (implies '-data' as well)\n"
"\n"
"-- RWCox - Mar 2005\n"
) ;
exit(0) ;
}
mainENTRY("3dAFNItoNIML main"); machdep(); PRINT_VERSION("3dAFNItoNIML");
if( PRINT_TRACING ){ STATUS("Enable mcw_malloc()"); enable_mcw_malloc(); }
/*-- read command line options --*/
while( iarg < argc && argv[iarg][0] == '-' ){
if( strcmp(argv[iarg],"-data") == 0 ){
dodata++ ; iarg++ ; continue ;
}
if( strncmp(argv[iarg],"-tcp:",5) == 0 ){
strcpy(strname,argv[iarg]+1) ; dodata++ ; iarg++ ; continue ;
}
fprintf(stderr,"** Illegal option: %s\n",argv[iarg]); exit(1);
}
if( iarg >= argc ){
fprintf(stderr,"** Not enough arguments on command line!\n"); exit(1);
}
/*-- read dataset --*/
dset = THD_open_dataset( argv[iarg++] ); CHECK_OPEN_ERROR(dset,argv[iarg-1]);
/*-- convert attributes to NIML --*/
if( dodata ){
DSET_load(dset) ; CHECK_LOAD_ERROR(dset) ;
}
switch( dodata ){
default:
case 1:
ngr = THD_dataset_to_niml( dset ) ; /* header and data together */
DSET_unload(dset) ;
if( ngr == NULL ){
fprintf(stderr,"** Can't do THD_dataset_to_niml()\n"); exit(1);
}
break ;
case 0:
case 2:
ngr = THD_nimlize_dsetatr( dset ) ; /* header only for now */
if( ngr == NULL ){
fprintf(stderr,"** Can't do THD_nimlize_dsetatr()\n"); exit(1);
}
break ;
case 3:
ngr = NULL ; /* will send brick data only, not header */
break ;
}
/*-- open output stream --*/
ns_out = NI_stream_open( strname , "w" ) ;
if( ns_out == NULL ){
fprintf(stderr,"** Can't create NIML stream!?\n"); exit(1);
}
/*-- if have a tcp: stream, must wait for it to connect --*/
if( strcmp(strname,"stdout:") != 0 ){
int nn , nchk ;
for( nchk=0 ; nchk < 99 ; nchk++ ){
nn = NI_stream_writecheck( ns_out , 777 ) ;
if( nn == 1 ){ if(nchk>0)fprintf(stderr,"\n"); break; }
if( nn < 0 ){ fprintf(stderr,"** NIML stream failure!?\n"); exit(1); }
if( nchk==0 ){ fprintf(stderr,"Waiting"); }
fprintf(stderr,".") ;
}
nn = NI_stream_writecheck( ns_out , 1 ) ;
if( nn <= 0 ){ fprintf(stderr,"** Can't connect!?\n"); exit(1); }
if( dodata > 1 ) nout += NI_write_procins( ns_out , "keep_reading" ) ;
}
/*-- if have group element from above, send it now --*/
if( ngr != NULL ){
NI_rename_group( ngr , "AFNI_dataset" ) ;
NI_set_attribute( ngr , "self_prefix" , DSET_PREFIX(dset) ) ;
nout += NI_write_element( ns_out , ngr , NI_TEXT_MODE ) ;
NI_free_element( ngr ) ;
}
/*-- if sending data sub-bricks separately, do that now --*/
if( dodata > 1 ){
int iv ; NI_element *nel ;
for( iv=0 ; iv < DSET_NVALS(dset) ; iv++ ){
nel = THD_subbrick_to_niml( dset , iv , SBFLAG_INDEX ) ;
if( nel != NULL ) nout += NI_write_element( ns_out , nel , NI_BINARY_MODE ) ;
NI_free_element(nel) ;
}
}
/*-- Ciao baby --*/
NI_stream_closenow( ns_out ) ;
fprintf(stderr,"++ Wrote %d bytes\n",nout) ;
exit(0) ;
}
syntax highlighted by Code2HTML, v. 0.9.1