Doxygen Source Code Documentation
uncomment.c File Reference
#include "mrilib.h"
Go to the source code of this file.
Defines | |
#define | putchar(x) fputc((x),stdout) |
#define | NEX 4 |
Functions | |
char * | suck_file (char *fname) |
int | main (int argc, char *argv[]) |
Define Documentation
|
|
|
Definition at line 12 of file uncomment.c. Referenced by estimate_gfw(), main(), PERMTEST_compute(), ps_label(), and show_run_stats(). |
Function Documentation
|
Definition at line 42 of file uncomment.c. References argc, putchar, and suck_file().
00043 { 00044 char * infile ; 00045 int nin , comm , ii , quote ; 00046 00047 if( argc < 2 || strcmp(argv[1],"-help") == 0 ){ 00048 printf("Usage: uncomment infile.c > outfile.c\n") ; 00049 exit(0) ; 00050 } 00051 00052 infile = suck_file( argv[1] ) ; 00053 if( infile == NULL || strlen(infile) == 0 ){ 00054 fprintf(stderr,"*** Can't read from file %s\n",argv[1]) ; 00055 exit(1) ; 00056 } 00057 00058 nin = strlen(infile) ; 00059 comm = 0 ; 00060 quote = 0 ; 00061 ii = 0 ; 00062 00063 while( ii < nin ){ 00064 00065 /* if inside a quote, and see an end quote: */ 00066 00067 if( quote && infile[ii] == '"' && infile[ii-1] != '\\' ){ 00068 putchar(infile[ii++]) ; quote = 0 ; continue ; 00069 } 00070 00071 /* if not inside a quote or comment, and see a start quote: */ 00072 00073 if( !quote && !comm && infile[ii] == '"' && infile[ii-1] != '\\' ){ 00074 putchar(infile[ii++]) ; quote = 1 ; continue ; 00075 } 00076 00077 /* if inside a comment and see an end comment: */ 00078 00079 if( comm && infile[ii] == '*' && infile[ii+1] == '/' ){ 00080 ii += 2 ; comm = 0 ; continue ; 00081 } 00082 00083 /* if not inside a quote or comment, and see a start comment: */ 00084 00085 if( !quote && !comm && infile[ii] == '/' && infile[ii+1] == '*' ){ 00086 putchar(' ') ; ii += 2 ; comm = 1 ; continue ; 00087 } 00088 00089 /* normal case: output character if not inside a comment: */ 00090 00091 #if 0 00092 fprintf(stderr,"at %d/%d: comm=%d char=%d\n",ii,nin,comm,infile[ii]) ; 00093 #endif 00094 00095 if( !comm ) putchar(infile[ii]) ; 00096 ii++ ; 00097 } 00098 putchar('\n') ; 00099 00100 if( comm ) fprintf(stderr,"*** Warning: ended inside a comment!\n") ; 00101 else if( quote ) fprintf(stderr,"*** Warning: ended inside a quote!\n") ; 00102 exit(0) ; 00103 } |
|
Definition at line 14 of file uncomment.c. References close(), fd, free, malloc, read(), and THD_filesize(). Referenced by main().
00015 { 00016 int len , fd , ii ; 00017 char * buf ; 00018 00019 if( fname == NULL || fname[0] == '\0' ) return NULL ; 00020 00021 len = THD_filesize( fname ) ; 00022 if( len <= 0 ) return NULL ; 00023 00024 fd = open( fname , O_RDONLY ) ; 00025 if( fd < 0 ) return NULL ; 00026 00027 #if 0 00028 fprintf(stderr,"THD_filesize = %d\n",len) ; 00029 #endif 00030 00031 #define NEX 4 00032 00033 buf = (char *) malloc( sizeof(char) * (len+NEX) ) ; 00034 ii = read( fd , buf , len ) ; 00035 close( fd ) ; 00036 if( ii <= 0 ){ free(buf) ; return NULL; } 00037 00038 for( ii=0 ; ii < NEX ; ii++ ) buf[len+ii] = '\0' ; 00039 return buf ; 00040 } |