Doxygen Source Code Documentation
3dAFNItoNIML.c File Reference
#include "mrilib.h"Go to the source code of this file.
Functions | |
| int | main (int argc, char *argv[]) |
Function Documentation
|
||||||||||||
|
convert three sub-briks to a raw dataset with consecutive triplets Definition at line 6 of file 3dAFNItoNIML.c. References argc, DSET_load, DSET_LOADED, DSET_NVALS, DSET_PREFIX, DSET_unload, enable_mcw_malloc(), machdep(), mainENTRY, NI_BINARY_MODE, NI_free_element(), NI_rename_group(), NI_set_attribute(), NI_stream_closenow(), NI_stream_open(), NI_stream_writecheck(), NI_TEXT_MODE, NI_write_element(), NI_write_procins(), PRINT_VERSION, SBFLAG_INDEX, STATUS, THD_dataset_to_niml(), THD_nimlize_dsetatr(), THD_open_dataset(), and THD_subbrick_to_niml().
00007 {
00008 THD_3dim_dataset *dset ;
00009 NI_group *ngr ;
00010 NI_stream ns_out ;
00011 int iarg=1 , dodata=0 , nout=0 ;
00012 char strname[256] = "stdout:" ;
00013
00014 /*-- help me if you can --*/
00015
00016 if( argc < 2 || strcmp(argv[1],"-help") == 0 ){
00017 printf(
00018 "Usage: 3dAFNItoNIML [options] dset\n"
00019 " Dumps AFNI dataset header information to stdout in NIML format.\n"
00020 " Mostly for debugging and testing purposes!\n"
00021 "\n"
00022 " OPTIONS:\n"
00023 " -data == Also put the data into the output (will be huge).\n"
00024 " -tcp:host:port == Instead of stdout, send the dataset to a socket.\n"
00025 " (implies '-data' as well)\n"
00026 "\n"
00027 "-- RWCox - Mar 2005\n"
00028 ) ;
00029 exit(0) ;
00030 }
00031
00032 mainENTRY("3dAFNItoNIML main"); machdep(); PRINT_VERSION("3dAFNItoNIML");
00033 if( PRINT_TRACING ){ STATUS("Enable mcw_malloc()"); enable_mcw_malloc(); }
00034
00035 /*-- read command line options --*/
00036
00037 while( iarg < argc && argv[iarg][0] == '-' ){
00038
00039 if( strcmp(argv[iarg],"-data") == 0 ){
00040 dodata++ ; iarg++ ; continue ;
00041 }
00042
00043 if( strncmp(argv[iarg],"-tcp:",5) == 0 ){
00044 strcpy(strname,argv[iarg]+1) ; dodata++ ; iarg++ ; continue ;
00045 }
00046
00047 fprintf(stderr,"** Illegal option: %s\n",argv[iarg]); exit(1);
00048 }
00049
00050 if( iarg >= argc ){
00051 fprintf(stderr,"** Not enough arguments on command line!\n"); exit(1);
00052 }
00053
00054 /*-- read dataset --*/
00055
00056 dset = THD_open_dataset( argv[iarg++] ) ;
00057 if( dset == NULL ){
00058 fprintf(stderr,"** Can't open dataset %s\n",argv[iarg-1]); exit(1);
00059 }
00060
00061 /*-- convert attributes to NIML --*/
00062
00063 if( dodata ){
00064 DSET_load(dset) ;
00065 if( !DSET_LOADED(dset) ){
00066 fprintf(stderr,"** Can't load dataset %s\n",argv[iarg-1]); exit(1);
00067 }
00068 }
00069
00070 switch( dodata ){
00071 default:
00072 case 1:
00073 ngr = THD_dataset_to_niml( dset ) ; /* header and data together */
00074 DSET_unload(dset) ;
00075 if( ngr == NULL ){
00076 fprintf(stderr,"** Can't do THD_dataset_to_niml()\n"); exit(1);
00077 }
00078 break ;
00079
00080 case 0:
00081 case 2:
00082 ngr = THD_nimlize_dsetatr( dset ) ; /* header only for now */
00083 if( ngr == NULL ){
00084 fprintf(stderr,"** Can't do THD_nimlize_dsetatr()\n"); exit(1);
00085 }
00086 break ;
00087
00088 case 3:
00089 ngr = NULL ; /* will send brick data only, not header */
00090 break ;
00091 }
00092
00093 /*-- open output stream --*/
00094
00095 ns_out = NI_stream_open( strname , "w" ) ;
00096 if( ns_out == NULL ){
00097 fprintf(stderr,"** Can't create NIML stream!?\n"); exit(1);
00098 }
00099
00100 /*-- if have a tcp: stream, must wait for it to connect --*/
00101
00102 if( strcmp(strname,"stdout:") != 0 ){
00103 int nn , nchk ;
00104 for( nchk=0 ; nchk < 99 ; nchk++ ){
00105 nn = NI_stream_writecheck( ns_out , 777 ) ;
00106 if( nn == 1 ){ if(nchk>0)fprintf(stderr,"\n"); break; }
00107 if( nn < 0 ){ fprintf(stderr,"** NIML stream failure!?\n"); exit(1); }
00108 if( nchk==0 ){ fprintf(stderr,"Waiting"); }
00109 fprintf(stderr,".") ;
00110 }
00111 nn = NI_stream_writecheck( ns_out , 1 ) ;
00112 if( nn <= 0 ){ fprintf(stderr,"** Can't connect!?\n"); exit(1); }
00113
00114 if( dodata > 1 ) nout += NI_write_procins( ns_out , "keep_reading" ) ;
00115 }
00116
00117 /*-- if have group element from above, send it now --*/
00118
00119 if( ngr != NULL ){
00120 NI_rename_group( ngr , "AFNI_dataset" ) ;
00121 NI_set_attribute( ngr , "self_prefix" , DSET_PREFIX(dset) ) ;
00122 nout += NI_write_element( ns_out , ngr , NI_TEXT_MODE ) ;
00123 NI_free_element( ngr ) ;
00124 }
00125
00126 /*-- if sending data sub-bricks separately, do that now --*/
00127
00128 if( dodata > 1 ){
00129 int iv ; NI_element *nel ;
00130 for( iv=0 ; iv < DSET_NVALS(dset) ; iv++ ){
00131 nel = THD_subbrick_to_niml( dset , iv , SBFLAG_INDEX ) ;
00132 if( nel != NULL ) nout += NI_write_element( ns_out , nel , NI_BINARY_MODE ) ;
00133 NI_free_element(nel) ;
00134 }
00135 }
00136
00137 /*-- Ciao baby --*/
00138
00139 NI_stream_closenow( ns_out ) ;
00140 fprintf(stderr,"++ Wrote %d bytes\n",nout) ;
00141 exit(0) ;
00142 }
|