Doxygen Source Code Documentation
thd_compress.c File Reference
#include "thd_compress.h"#include "Amalloc.h"Go to the source code of this file.
| Defines | |
| #define | NFOPMAX 16 | 
| Functions | |
| int | COMPRESS_is_file (char *pathname) | 
| int | COMPRESS_has_suffix (char *fname, int mode) | 
| int | COMPRESS_filecode (char *fname) | 
| void | putin_fop_table (FILE *fp, int ppp) | 
| int | COMPRESS_fclose (FILE *fp) | 
| char * | COMPRESS_filename (char *fname) | 
| char * | COMPRESS_add_suffix (char *fname, int mm) | 
| FILE * | COMPRESS_fopen_read (char *fname) | 
| FILE * | COMPRESS_fopen_write (char *fname, int mm) | 
| int | COMPRESS_unlink (char *fname) | 
| Variables | |
| int | fop_init = 0 | 
| int | fop_fileno [NFOPMAX] | 
| int | fop_popend [NFOPMAX] | 
Define Documentation
| 
 | 
| add the suffixes to the name, and check again * Definition at line 78 of file thd_compress.c. Referenced by COMPRESS_fclose(), and putin_fop_table(). | 
Function Documentation
| 
 | ||||||||||||
| 
 Definition at line 165 of file thd_compress.c. References AFMALL, COMPRESS_has_suffix(), and COMPRESS_LASTCODE. Referenced by RENAME_main(). 
 00166 {
00167    char * buf ;
00168    int ll ;
00169 
00170    if( fname == NULL || fname[0] == '\0' ) return NULL ;
00171 
00172    ll  = strlen(fname) ;
00173    buf = AFMALL(char, sizeof(char) * (ll+16) ) ;
00174 
00175    strcpy(buf,fname) ;
00176    if( mm >= 0 && mm <= COMPRESS_LASTCODE &&
00177        ! COMPRESS_has_suffix(fname,mm)      ){
00178 
00179       strcat(buf,COMPRESS_suffix[mm]) ;
00180    }
00181 
00182    return buf ;
00183 }
 | 
| 
 | 
| 
 Definition at line 113 of file thd_compress.c. References fop_fileno, fop_init, fop_popend, NFOPMAX, and pclose. Referenced by adwarp_refashion_dataset(), AFNI_refashion_dataset(), main(), THD_load_datablock(), and THD_write_datablock(). 
 00114 {
00115    int fn , ii ;
00116 
00117    if( fp == NULL || ! fop_init ) return fclose(fp) ;
00118 
00119    fn = fileno(fp) ;
00120    for( ii=0 ; ii < NFOPMAX ; ii++ ){   /* find the file number */
00121       if( fop_fileno[ii] == fn ){       /* found it! */
00122          fop_fileno[ii] = -1 ;          /* empty this table entry */
00123          if( fop_popend[ii] ) return pclose(fp) ;
00124          else                 return fclose(fp) ;
00125       }
00126    }
00127 
00128    return fclose(fp) ;  /* couldn't find it, so use fclose */
00129 }
 | 
| 
 | 
| 
 Definition at line 46 of file thd_compress.c. References AFMALL, COMPRESS_has_suffix(), COMPRESS_is_file(), COMPRESS_LASTCODE, COMPRESS_NOFILE, COMPRESS_NONE, and free. Referenced by COMPRESS_filename(), COMPRESS_fopen_read(), main(), RENAME_main(), THD_datablock_from_atr(), THD_force_malloc_type(), and THD_rename_dataset_files(). 
 00047 {
00048    int ii ;
00049    char * buf ;
00050 
00051    if( fname == NULL || fname[0] == '\0' ) return COMPRESS_NOFILE ;
00052 
00053    /** check the filename suffix **/
00054 
00055    for( ii=0 ; ii <= COMPRESS_LASTCODE ; ii++ ){
00056       if( COMPRESS_has_suffix(fname,ii) ){
00057          if( COMPRESS_is_file(fname) ) return ii ;
00058          else                          return COMPRESS_NOFILE ;
00059       }
00060    }
00061    if( COMPRESS_is_file(fname) ) return COMPRESS_NONE ;
00062 
00063    /** add the suffixes to the name, and check again **/
00064 
00065    buf = AFMALL(char, sizeof(char) * (strlen(fname)+16) ) ;
00066    for( ii=0 ; ii <= COMPRESS_LASTCODE ; ii++ ){
00067       strcpy(buf,fname) ; strcat(buf,COMPRESS_suffix[ii]) ;
00068       if( COMPRESS_is_file(buf) ){ free(buf) ; return ii ; }
00069    }
00070    free(buf) ; return COMPRESS_NOFILE ;
00071 }
 | 
| 
 | 
| 
 Definition at line 138 of file thd_compress.c. References AFMALL, COMPRESS_filecode(), COMPRESS_has_suffix(), COMPRESS_NOFILE, and COMPRESS_NONE. Referenced by COMPRESS_unlink(), main(), and THD_rename_dataset_files(). 
 00139 {
00140    char * buf ;
00141    int ll , mm ;
00142 
00143    if( fname == NULL || fname[0] == '\0' ) return NULL ;
00144 
00145    mm  = COMPRESS_filecode( fname ) ;  /* find compression mode */
00146    if( mm == COMPRESS_NOFILE ) return NULL ;
00147 
00148    ll  = strlen(fname) ;
00149    buf = AFMALL(char, sizeof(char) * (ll+16) ) ;  /* worst case */
00150 
00151    if( mm == COMPRESS_NONE ){
00152       strcpy(buf,fname) ;
00153    } else {
00154       if( ! COMPRESS_has_suffix(fname,mm) ){
00155          strcpy(buf,fname) ; strcat(buf,COMPRESS_suffix[mm]) ;
00156       } else {
00157          strcpy(buf,fname) ;
00158       }
00159    }
00160    return buf ;
00161 }
 | 
| 
 | 
| 
 Definition at line 189 of file thd_compress.c. References AFMALL, COMPRESS_filecode(), COMPRESS_has_suffix(), COMPRESS_NOFILE, COMPRESS_NONE, free, popen, and putin_fop_table(). Referenced by THD_load_datablock(). 
 00190 {
00191    FILE * fp ;
00192    int mm ;
00193    char * buf , * cmd ;
00194 
00195    if( fname == NULL || fname[0] == '\0' ) return NULL ;
00196 
00197    mm = COMPRESS_filecode( fname ) ;  /* find compression mode */
00198 
00199    if( mm == COMPRESS_NOFILE ) return NULL ;  /* can't do nothin */
00200 
00201    if( mm == COMPRESS_NONE ){
00202       fp = fopen(fname,"r") ;   /* open it normally */
00203       putin_fop_table(fp,0) ;   /* save its open method */
00204       return fp ;
00205    }
00206 
00207 #if 1
00208    if( ! COMPRESS_has_suffix(fname,mm) ){
00209       buf = AFMALL(char, sizeof(char) * (strlen(fname)+16) ) ;
00210       strcpy(buf,fname) ; strcat(buf,COMPRESS_suffix[mm]) ;
00211    } else {
00212       buf = fname ;
00213    }
00214 #else
00215    buf = fname ;
00216 #endif
00217 
00218    cmd = AFMALL(char, sizeof(char) * (strlen(buf)+32) ) ;
00219    sprintf(cmd,COMPRESS_unprogram[mm],buf) ;
00220 
00221    fp = popen(cmd,"r") ;    /* open a pipe to read the file */
00222    putin_fop_table(fp,1) ;  /* save its open method */
00223 
00224    free(cmd) ; if( buf != fname ) free(buf) ;
00225    return fp ;
00226 }
 | 
| 
 | ||||||||||||
| 
 Definition at line 234 of file thd_compress.c. References AFMALL, COMPRESS_has_suffix(), free, popen, and putin_fop_table(). Referenced by adwarp_refashion_dataset(), AFNI_refashion_dataset(), main(), and THD_write_datablock(). 
 00235 {
00236    FILE * fp ;
00237    char * buf , * cmd ;
00238 
00239    if( fname == NULL || fname[0] == '\0' ) return NULL ;
00240 
00241    /* Don't compress if the compression program isn't marked as OK   */
00242    /* [For modes that can only be compressed offline, like BRIKCOMP] */
00243 
00244    if( mm < 0 || ! COMPRESS_program_ok[mm] ){
00245       fp = fopen(fname,"w") ;   /* open it normally */
00246       putin_fop_table(fp,0) ;   /* save its open method */
00247       return fp ;
00248    }
00249 
00250 #if 1
00251    if( ! COMPRESS_has_suffix(fname,mm) ){
00252       buf = AFMALL(char, sizeof(char) * (strlen(fname)+16) ) ;
00253       strcpy(buf,fname) ; strcat(buf,COMPRESS_suffix[mm]) ;
00254    } else {
00255       buf = fname ;
00256    }
00257 #else
00258    buf = fname ;
00259 #endif
00260 
00261    cmd = AFMALL(char,  sizeof(char) * (strlen(buf)+32) ) ;
00262    sprintf(cmd,COMPRESS_program[mm],buf) ;
00263 
00264    fp = popen(cmd,"w") ;    /* open a pipe to write the file */
00265    putin_fop_table(fp,1) ;  /* save its open method */
00266 
00267    free(cmd) ; if( buf != fname ) free(buf) ;
00268    return fp ;
00269 }
 | 
| 
 | ||||||||||||
| 
 Definition at line 28 of file thd_compress.c. References COMPRESS_LASTCODE. Referenced by COMPRESS_add_suffix(), COMPRESS_filecode(), COMPRESS_filename(), COMPRESS_fopen_read(), and COMPRESS_fopen_write(). 
 00029 {
00030    int ll ;
00031 
00032    if( mode < 0                 ) return 1 ;
00033    if( mode > COMPRESS_LASTCODE ) return 0 ;
00034 
00035    ll = strlen(fname) ;
00036    return ( ll > COMPRESS_suffix_len[mode] &&
00037             strcmp(COMPRESS_suffix[mode] ,
00038                    fname+(ll-COMPRESS_suffix_len[mode])) == 0 ) ;
00039 }
 | 
| 
 | 
| 
 Definition at line 13 of file thd_compress.c. Referenced by COMPRESS_filecode(). 
 00014 {
00015    static struct stat buf ;
00016    int ii ;
00017 
00018    if( pathname == NULL ) return 0 ;
00019    ii = stat( pathname , &buf ) ; if( ii != 0 ) return 0 ;
00020    ii = (buf.st_mode & S_IFREG) != 0 ; return ii ;
00021 }
 | 
| 
 | 
| 
 Definition at line 273 of file thd_compress.c. References COMPRESS_filename(), free, and unlink. Referenced by adwarp_refashion_dataset(), AFNI_refashion_dataset(), THD_delete_3dim_dataset(), THD_open_3dcalc(), and THD_write_datablock(). 
 00274 {
00275    char * fff = COMPRESS_filename(fname) ;
00276    int     ii = -1 ;
00277    if( fff != NULL ){ ii=unlink(fff); free(fff); }
00278    return ii ;
00279 }
 | 
| 
 | ||||||||||||
| 
 Definition at line 83 of file thd_compress.c. References fop_fileno, fop_init, fop_popend, and NFOPMAX. Referenced by COMPRESS_fopen_read(), and COMPRESS_fopen_write(). 
 00084 {
00085    int ii ;
00086 
00087    if( fp == NULL ) return ;  /* can't do much with nothing */
00088 
00089    if( ! fop_init ){                       /* initialize the table */
00090       for( ii=0 ; ii < NFOPMAX ; ii++ ){
00091          fop_fileno[ii] = -1 ;
00092          fop_popend[ii] =  0 ;
00093       }
00094       fop_init = 1 ;
00095    }
00096 
00097    for( ii=0 ; ii < NFOPMAX ; ii++ )       /* find an unused entry */
00098       if( fop_fileno[ii] < 0 ) break ;
00099 
00100    if( ii == NFOPMAX ){
00101       fprintf(stderr,"\n*** AFNI compressor table overflow!\n") ;
00102       return ;
00103    }
00104 
00105    fop_fileno[ii] = fileno(fp) ;   /* save the file number */
00106    fop_popend[ii] = ppp ;          /* save the popen code */
00107    return ;
00108 }
 | 
Variable Documentation
| 
 | 
| 
 Definition at line 80 of file thd_compress.c. Referenced by COMPRESS_fclose(), and putin_fop_table(). | 
| 
 | 
| 
 Definition at line 79 of file thd_compress.c. Referenced by COMPRESS_fclose(), and putin_fop_table(). | 
| 
 | 
| 
 Definition at line 81 of file thd_compress.c. Referenced by COMPRESS_fclose(), and putin_fop_table(). | 
 
                             
                             
                             
                             
                             
                             
                             
                             
                             
                             
                             
                             
 
 
 
 
       
	   
	   
	   
	  