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  

nicat.c File Reference

#include "niml.h"

Go to the source code of this file.


Defines

#define NBUF   65000

Functions

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

Define Documentation

#define NBUF   65000
 

Definition at line 5 of file nicat.c.

Referenced by main().


Function Documentation

int main int    argc,
char *    argv[]
 

\** File : SUMA.c

Author:
: Ziad Saad Date : Thu Dec 27 16:21:01 EST 2001
Purpose :

Input paramters :

Parameters:
param  Usage : SUMA ( )
Returns :
Returns:
Support :
See also:
OpenGL prog. Guide 3rd edition , varray.c from book's sample code
Side effects :

Definition at line 7 of file nicat.c.

References argc, NBUF, NI_clock_time(), NI_sleep(), NI_stream_close(), NI_stream_open(), NI_stream_read(), NI_stream_readcheck(), NI_stream_reopen(), NI_stream_write(), and NI_stream_writecheck().

00008 {
00009    NI_stream ns ;
00010    char lbuf[NBUF] , *reop=NULL ;
00011    int nn , nl=0 , jj , ntot=0 , ct , ech , iarg=1 ;
00012 
00013    if( argc < 2 || strcmp(argv[1],"-help") == 0 ){
00014      printf("Usage: nicat [-reopen rr] [-rR] streamspec\n"
00015             "Copies stdin to the NIML stream, which will be opened\n"
00016             "for writing.\n"
00017             "\n"
00018             "-reopen rr == reopen the stream after connection\n"
00019             "               to the stream specified by 'rr'\n"
00020             "-r         == Copy the stream to stdout instead; the\n"
00021             "               'streamspec' will be opened for reading.\n"
00022             "-R         == Read the stream but don't copy to stdout.\n"
00023             "\n"
00024             "Intended for testing other programs that use NIML for\n"
00025             "various services.  Example:\n"
00026             "  aiv -p 4444 &\n"
00027             "  im2niml zork.jpg | nicat tcp:localhost:4444\n"
00028             "Starts aiv listening on TCP/IP port 444, then sends image\n"
00029             "file zork.jpg to that port for display.\n"
00030            ) ;
00031      exit(0) ;
00032    }
00033 
00034    if( strcmp(argv[iarg],"-reopen") == 0 ){
00035      reop = argv[++iarg] ; iarg++ ;
00036    }
00037 
00038    /** write stdin to the stream **/
00039 
00040    if( toupper(argv[iarg][1]) != 'R' ){
00041      ns = NI_stream_open( argv[iarg] , "w" ) ;
00042      if( ns == NULL ){
00043         fprintf(stderr,"** NI_stream_open fails\n") ; exit(1) ;
00044      }
00045      while(1){
00046        nn = NI_stream_writecheck( ns , 400 ) ;
00047        if( nn == 1 ){ fprintf(stderr,"!\n") ; break ; }
00048        if( nn <  0 ){ fprintf(stderr,"BAD\n"); exit(1) ; }
00049        fprintf(stderr,"-") ;
00050      }
00051      if( reop ){                                 /* 23 Aug 2002 */
00052        fprintf(stderr,"++ reopening") ;
00053        nn = NI_stream_reopen( ns , reop ) ;
00054        if( nn == 0 ) fprintf(stderr,".BAD") ;
00055        else          fprintf(stderr,".GOOD") ;
00056        fprintf(stderr,"\n") ;
00057      }
00058      ct = NI_clock_time() ;
00059      while(1){
00060        jj = fread(lbuf,1,NBUF,stdin) ; if( jj <= 0 ) break ;
00061        nn = NI_stream_write( ns , lbuf , jj ) ;
00062        if( nn < 0 ){
00063           fprintf(stderr,"** NI_stream_write fails\n"); break ;
00064        } else if( nn < jj ){
00065           fprintf(stderr,"++ nl=%d: wrote %d/%d bytes\n",nl,nn,jj) ;
00066        }
00067        nl++ ; ntot += jj ;
00068      }
00069      NI_sleep(1) ; NI_stream_close(ns) ;
00070      ct = NI_clock_time()-ct ;
00071      fprintf(stderr,"++ Wrote %d bytes in %d ms: %.3f Mbytes/s\n",
00072                     ntot,ct,(9.5367e-7*ntot)/(1.e-3*ct)       ) ;
00073      sleep(1) ; exit(0) ;
00074    }
00075 
00076    /** write the stream to stdout */
00077 
00078    if( argc < iarg+2 ){
00079      fprintf(stderr,"** %s needs argv[%d]\n",argv[1],iarg+1); exit(1);
00080    }
00081 
00082    ech = (argv[iarg][1] == 'r') ;
00083 
00084    ns = NI_stream_open( argv[iarg+1], (argv[iarg][2]=='\0') ? "r" : "w" ) ;
00085    if( ns == NULL ){
00086      fprintf(stderr,"** NI_stream_open fails\n") ; exit(1) ;
00087    }
00088    while(1){
00089      nn = NI_stream_readcheck( ns , 400 ) ;
00090      if( nn == 1 ){ fprintf(stderr,"!\n") ; break ; }
00091      if( nn <  0 ){ fprintf(stderr,"BAD\n"); exit(1) ; }
00092      fprintf(stderr,"-") ;
00093    }
00094    if( reop ){                                 /* 23 Aug 2002 */
00095      fprintf(stderr,"++ reopening") ;
00096      nn = NI_stream_reopen( ns , reop ) ;
00097      if( nn == 0 ) fprintf(stderr,".BAD") ;
00098      else          fprintf(stderr,".GOOD") ;
00099      fprintf(stderr,"\n") ;
00100    }
00101    ct = NI_clock_time() ;
00102    while(1){
00103       nn = NI_stream_read( ns , lbuf , NBUF ) ;
00104       if( nn < 0 ){
00105          fprintf(stderr,"\nNI_stream_read fails\n"); break;
00106       } else {
00107          ntot += nn ;
00108       }
00109       if( ech && nn > 0 ){
00110          printf("%.*s",nn,lbuf) ; nl++ ;
00111       }
00112    }
00113    ct = NI_clock_time()-ct ;
00114    fprintf(stderr,"Read %d bytes in %d ms: %.3f Mbytes/s\n",
00115                    ntot,ct,(9.5367e-7*ntot)/(1.e-3*ct)       ) ;
00116    sleep(1) ; exit(0) ;
00117 }
 

Powered by Plone

This site conforms to the following standards: