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  

count.c File Reference

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>

Go to the source code of this file.


Functions

int ranco (int, int)
int main (int argc, char *argv[])

Function Documentation

int main int    argc,
char *    argv[]
 

convert DTIStudio fiber format data to SUMA segment data

Definition at line 14 of file count.c.

References argc, ranco(), strtod(), and top.

00015 {
00016    int ii , bot = -1 , top = -1 , step = -1 , rando_count = 0, rando_num ;
00017    int narg , ndig = 4 , iout ;
00018    static char root[6664] , fmt[128] , suffix[6664] ;
00019    float sclfac = 0.0 ;
00020 
00021 /*** Usage ***/
00022 
00023    if( argc < 3 || strncmp(argv[1],"-help",2) == 0 ){
00024 
00025       printf(
00026         "Usage: count [options] bot top [step]\n"
00027         "\n"
00028         "* Produces many numbered copies of the root and/or suffix,\n"
00029         "    counting from 'bot' to 'top' with stride 'step'.\n"
00030         "* If 'bot' > 'top', counts backwards with stride '-step'.\n"
00031         "* If step is of the form 'R#', then '#' random counts are produced\n"
00032         "    in the range 'bot..top' (inclusive).\n"
00033         "* 'bot' and 'top' must not be negative; step must be positive.\n"
00034         "\n"
00035         "Options:\n"
00036         "  -digits n    prints numbers with 'n' digits [default=4]\n"
00037         "  -root rrr    prints string 'rrr' before the number [default=empty]\n"
00038         "  -suffix sss  prints string 'sss' after the number [default=empty]\n"
00039         "  -scale fff   multiplies each number by the factor 'fff';\n"
00040         "                 if this option is used, -digits is ignored and\n"
00041         "                 the floating point format '%%g' is used for output.\n"
00042         "                 ('fff' can be a floating point number.)\n"
00043         "\n"
00044         "The main application of this program is for use in C shell programming:\n"
00045         "  foreach fred ( `count 1 20` )\n"
00046         "     mv wilma.${fred} barney.${fred}\n"
00047         "  end\n"
00048         "The backward quote operator in the foreach statement executes the\n"
00049         "count program, captures its output, and puts it on the command line.\n"
00050         "The loop body renames each file wilma.0001 to wilma.0020 to barney.0001\n"
00051         "to barney.0020.  Read the man page for csh to get more information.  In\n"
00052         "particular, the csh built-in command '@' can be useful.\n"
00053       ) ;
00054 
00055       exit(0) ;
00056    }
00057 
00058 /*** read arguments ***/
00059 
00060    narg      = 1 ;
00061    root[0]   = '\0' ;
00062    suffix[0] = '\0' ;
00063 
00064    do {
00065 
00066    /*** switches ***/
00067 
00068       if( strncmp(argv[narg],"-digits",2) == 0 ){
00069          ndig = strtol( argv[++narg] , NULL , 10 ) ;
00070          if( ndig < 1 ){
00071             fprintf( stderr , "-digits illegal!\n" ) ;
00072             exit(1) ;
00073          }
00074          continue ;
00075       }
00076 
00077       if( strncmp(argv[narg],"-root",2) == 0 ){
00078          strcpy(root,argv[++narg]) ;
00079          continue ;
00080       }
00081 
00082       if( strncmp(argv[narg],"-suffix",3) == 0 ){
00083          strcpy(suffix,argv[++narg]) ;
00084          continue ;
00085       }
00086 
00087       if( strncmp(argv[narg],"-scale",3) == 0 ){
00088          sclfac = strtod(argv[++narg],NULL) ;
00089          continue ;
00090       }
00091 
00092       if( strncmp(argv[narg],"-",1) == 0 ){
00093          fprintf( stderr , "unknown switch %s\n" , argv[narg] ) ;
00094          exit(1) ;
00095       }
00096 
00097    /*** numbers ***/
00098 
00099       if( bot < 0 ){
00100          bot = strtol( argv[narg] , NULL , 10 ) ;
00101          if( bot < 0 ){
00102             fprintf( stderr , "illegal value of bot %d\n" , bot ) ;
00103             exit(1) ;
00104          }
00105          continue ;
00106       }
00107 
00108       if( top < 0 ){
00109          top = strtol( argv[narg] , NULL , 10 ) ;
00110          if( top < 0 ){
00111             fprintf( stderr , "illegal value of top %d\n" , top ) ;
00112             exit(1) ;
00113          }
00114          continue ;
00115       }
00116 
00117       if( step < 0 ){
00118          if( argv[narg][0] == 'R' || argv[narg][0] == 'r' ){
00119             rando_count = 1 ;
00120             rando_num   = strtol( argv[narg]+1 , NULL , 10 ) ;
00121             if( rando_num <= 0 ){
00122                fprintf( stderr , "illegal value of random count %d\n" , rando_num ) ;
00123                exit(1) ;
00124             }
00125             continue ;
00126          }
00127          step = strtol( argv[narg] , NULL , 10 ) ;
00128          if( step <= 0 ){
00129             fprintf( stderr , "illegal value of step %d\n" , step ) ;
00130             exit(1) ;
00131          }
00132          continue ;
00133       }
00134 
00135       fprintf( stderr , "too many arguments: %s\n" , argv[narg] ) ;
00136       exit(1) ;
00137 
00138    } while ( ++narg < argc ) ;
00139 
00140 /*** set up to iterate ***/
00141 
00142    if( step <= 0 ) step = 1 ;
00143 
00144    if( sclfac == 0.0 )
00145       sprintf( fmt , " %%s%%0%dd%%s" , ndig ) ;
00146    else
00147       strcpy( fmt , " %s%g%s" ) ;
00148 
00149 /*** iterate ***/
00150 
00151    if( ! rando_count ){
00152       if( bot <= top ){
00153          for( ii=bot ; ii <= top ; ii += step )
00154             if( sclfac == 0.0 )
00155                printf( fmt , root , ii , suffix ) ;
00156             else
00157                printf( fmt , root , sclfac*ii , suffix ) ;
00158       } else {
00159          for( ii=bot ; ii >= top ; ii -= step )
00160             if( sclfac == 0.0 )
00161                printf( fmt , root , ii , suffix ) ;
00162             else
00163                printf( fmt , root , sclfac*ii , suffix ) ;
00164       }
00165    } else {
00166       for( ii=0 ; ii < rando_num ; ii++ ){
00167          iout = ranco( bot , top ) ;
00168          if( sclfac == 0.0 )
00169             printf( fmt , root , iout , suffix ) ;
00170          else
00171             printf( fmt , root , sclfac*iout , suffix ) ;
00172       }
00173    }
00174 
00175    printf( "\n" ) ;
00176    exit(0) ;
00177 }

int ranco int   ,
int   
 

Definition at line 179 of file count.c.

References top.

Referenced by main().

00180 {
00181    static int first = 1 ;
00182    int ir , ii ;
00183    double dr ;
00184 
00185    if( first ){
00186       srand48( time(NULL) ) ;
00187       dr = drand48() ;
00188       ir = (int)(dr*100) ;
00189       for( ii=0 ; ii < ir ; ii++ ) dr = drand48() ;
00190       first = 0 ;
00191    }
00192 
00193    ir = bot + (top-bot+0.999999)*drand48() ;
00194    return ir ;
00195 }
 

Powered by Plone

This site conforms to the following standards: