#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//#include <io.h>
static unsigned int table[7][7];
void InitTable()
{
unsigned int i;
unsigned int j;
memset(table, 0, sizeof(table));
for(i=0; i<7; i++)
{
for(j=0; j<7; j++)
if(i == 4 || i==3)
table[i][j] = 3;
else if(i==6)
table[i][j] = 6;
else
table[i][j] = 0;
}
/* " 1 / 2 * 3 \ 4 \r,\n 6 其他 0*/
table[0][1] = 1;
table[1][1] = 0;
table[0][2] = 2;
table[2][3] = 3; /*删除*/
table[3][3] = 4; /*删除*/
table[4][2] = 0;
table[4][3] = 4;
table[0][4] = 5;
table[5][2] = 0;
table[5][1] = 0;
table[2][2] = 6; /*删除*/
table[6][6] = 0;
}
int DelComments(char* f, int len)
{
//int fsize;
int cnt;
char* buff;
char* p;
FILE *file;
char c;
int start;
int input;
char space;
start = 0;
space = ' ';
cnt = 0;
buff = (char*)malloc(sizeof(char)*1024*1024);
memset(buff, 0, sizeof(sizeof(char)*1024*1024));
p = buff;
file = fopen(f, "r+b");
//fseek(file, 0, SEEK_END);
//fsize = ftell(file);
//fseek(file, 0, SEEK_SET);
if(file == NULL)
{
return -1;
}
InitTable();
while(fread(&c, sizeof(c), 1, file))
{
cnt++;
switch(c)
{
case '"':
input = 1;
break;
case '/':
input = 2 ;
break;
case '*':
input = 3;
break;
case '\\':
input = 4;
break;
case '\r':
case '\n':
input = 6;
break;
default:
input = 0;
break;
}
switch(start)
{
case 3:
if(c=='\r' || c=='\n')
*p++ = c;
else
*p++ = ' ';
break;
case 2:
if(input == 3 || input == 2)
{
p--;
*p++ = ' ';
*p++ = ' ';
break;
}
else
{
*p++ = c;
break;
}
case 4:
*p++ = ' ';
break;
case 6:
if(input == 6)
*p++ = c;
else
*p++ = ' ';
break;
default:
*p++ = c;
break;
}
start = table[start][input];
}
fclose(file);
file = fopen(f, "w+b");
if(!file)
return -1;
fwrite(buff, cnt, 1, file);
fclose(file);
free(buff);
return 0;
}
int main(int argc, char** argv)
{
int fCnt;
int i;
char* p;
char* q;
int len;
char params[MAXPARAMCNT][MAXFILENAMELEN];
if(argc <= 1 || argv == NULL)
{
return -1;
}
fCnt = argc - 1;
memset(params, 0, sizeof(params));
for(i=1; i<argc; i++)
{
DelComments(argv[i], len);
}
return 0;
}