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  

niml_fileread.c File Reference

#include "niml_private.h"

Go to the source code of this file.


Defines

#define SKIP_COMMENT_FLAG   1
#define LBUF   65536

Functions

char * my_fgets (char *, int, FILE *, int)
NI_elementNI_read_file_nohead (char *fname)

Define Documentation

#define LBUF   65536
 

Length of line buffer

Definition at line 44 of file niml_fileread.c.

Referenced by my_fgets().

#define SKIP_COMMENT_FLAG   1
 

Definition at line 4 of file niml_fileread.c.

Referenced by my_fgets().


Function Documentation

char * my_fgets char *    buf,
int    size,
FILE *    fts,
int    flags
[static]
 

Like fgets, but also

  • skips blank lines
  • skips comment lines (if flags&SKIP_COMMENT_FLAG)
  • skips leading and trailing whitespace
  • catenates lines that end in '\' (replacing '\' with ' ') -----------------------------------------------------------------

Definition at line 54 of file niml_fileread.c.

References flags, LBUF, NI_free, NI_malloc, and SKIP_COMMENT_FLAG.

Referenced by mri_read_ascii(), and mri_read_ascii_ragged().

00055 {
00056    char *ptr ;
00057    int nbuf , ll,ii , cflag ;
00058    static char *qbuf=NULL ;
00059    int skip_comm = (flags & SKIP_COMMENT_FLAG) != 0 ;
00060 
00061    if( buf == NULL || size < 1 || fts == NULL ){
00062      NI_free(qbuf); qbuf = NULL; return NULL;
00063    }
00064 
00065    if( qbuf == NULL ) qbuf = NI_malloc(char, LBUF) ;  /* 1st time in */
00066 
00067    nbuf  = 0 ;  /* num bytes stored in buf so far */
00068    cflag = 0 ;  /* flag if we're catenating lines */
00069 
00070    while(1){   /* loop and read lines, creating a logical line */
00071 
00072      ptr = fgets( qbuf , LBUF , fts ) ; /* read next whole line */
00073 
00074      if( ptr == NULL ) break ;          /* must be end-of-file */
00075 
00076      /* skip leading whitespace */
00077 
00078      for( ; *ptr != '\0' && isspace(*ptr) ; ptr++ ) ; /* nada */
00079 
00080      /* skip entirely blank lines, unless we are catenating */
00081 
00082      if( *ptr == '\0' ){ if(cflag) break; else continue; }
00083 
00084      /* skip comment lines (even if we are catenating) */
00085 
00086      if( skip_comm &&
00087          (*ptr == '#' || (*ptr == '/' && *(ptr+1) == '/')) ) continue ;
00088 
00089      /* strip trailing whitespace */
00090 
00091      ll = strlen(ptr) ;                                  /* will be > 0 */
00092      for( ii=ll-1 ; isspace(ptr[ii]) && ii > 0 ; ii-- )  /* blank => NUL */
00093        ptr[ii] = '\0' ;
00094 
00095      ll = strlen(ptr) ;                 /* number of chars left */
00096      if( ll == 0 ) continue ;           /* should not happen */
00097 
00098      cflag = (ptr[ll-1] == '\\') ;      /* catenate next line? */
00099      if( cflag && ll > 1 && ptr[ll-2] == '\\' ) cflag = 0 ;
00100      if( cflag ) ptr[ll-1] = ' ' ;      /* replace '\' with ' ' */
00101 
00102      /* now copy what's left (ll+1 bytes) at tail of output buffer */
00103 
00104      if( nbuf+ll+1 > size ){   /* too much for output buffer? */
00105        ll = size - (nbuf+1) ;
00106        if( ll <= 0 ) break ;   /* should not happen */
00107      }
00108 
00109      memcpy(buf+nbuf,ptr,ll+1) ; nbuf += ll ;
00110      if( !cflag ) break ;
00111 
00112    } /* loop to get next line if catenation is turned on */
00113 
00114    /* and we is done */
00115 
00116    if( nbuf > 0 ) return buf ;      /* return what we read already */
00117    return NULL ;                    /* signal of failure get data  */
00118 }

NI_element* NI_read_file_nohead char *    fname
 

Read an un-headered file into a data element, guessing at its structure from the 1st non-comment line. -----------------------------------------------------------------

Definition at line 13 of file niml_fileread.c.

References NI_free, NI_malloc, NI_read_element(), NI_stream_close(), and NI_stream_open().

00014 {
00015    FILE *fp ;
00016    char prefix[32] , *ptr ;
00017    NI_element *nel ;
00018 
00019    if( fname == NULL || *fname == '\0' ) return NULL ;
00020 
00021    fp = fopen( fname , "r" ) ; if( fp == NULL ) return NULL ;
00022 
00023    /** see if this looks like a NIML-formatted file **/
00024 
00025    memset(prefix,0,32) ; fread(prefix,1,31,fp) ; rewind(fp) ;
00026    ptr = strchr(prefix,'<') ;
00027    if( ptr != NULL && isalpha(*(ptr+1)) ){
00028      NI_stream ns ;
00029      fclose(fp) ;
00030      ptr = NI_malloc(char, strlen(fname)+16) ;
00031      sprintf(ptr,"file:%s",fname) ;
00032      ns = NI_stream_open(ptr,"r") ; NI_free(ptr) ;
00033      if( ns == NULL ) return NULL ;
00034      nel = NI_read_element( ns , 66 ) ;
00035      NI_stream_close(ns) ;
00036      return nel ;
00037    }
00038 
00039 }
 

Powered by Plone

This site conforms to the following standards: