/*****************************************************************/ char *title="\ KSKreform : C program source reforming in indentation\n\ -- ver 1.02 6May2003 --\n\ -- copyright(C) 1Apr2003 T.KOSAKA CS TNCT --\n"; /* Cソースファイルのインデントの乱れを直す。 ★使い方(1) Windowsでは,KSKreform.exeのアイコンに,インデントの乱れを直したい ファイルのアイコンをドロップすればよい。 ★使い方(2) コマンドプロンプトでは次のようにコマンドを与える。 ただし,カレントディレクトリに,KSKreform.exeおよび インデントの乱れを直したいファイルがあること >kskreform nantoka.c ★結果 nantoka.cはインデントが整形される。 もとのファイルはnantoka.c.bakという名前で残される。 */ /*****************************************************************/ #include #include #include const int indentSize=4; /*インデント1段あたりの深さ*/ void removeTab(char buff[]) { int i=0; while (buff[i]) { if (buff[i]=='\t') buff[i]=' '; i++; } } void removeRightSpace(char buff[]) { int i=0; while (buff[i]) i++; i--; if (buff[i]=='\n') i--; while (buff[i]==' ') i--; buff[i+1]='\n'; buff[i+2]=0; } void putSpace(char buff[],int start,int end) { int i; for (i=start;i<=end;i++) buff[i]=' '; } void removeChar(char buff[]) { char *p; p=buff; do { p=strstr(p,"\'{\'"); if (p) { *++p=' '; } } while (p); p=buff; do { p=strstr(p,"\'}\'"); if (p) { *++p=' '; } } while (p); } void removeComment1(char buff[]) { int i; int start=0; int end=-1; static int status=0; /*0:コメントの外 1:コメントの中*/ i=0; while (buff[i]) { if (status==0&&buff[i]=='/'&&buff[i+1]=='*') { start=i; status=1; } else if (status==1&&buff[i-1]=='*'&&buff[i]=='/') { end=i; putSpace(buff,start,end); status=0; } i++; } if (status==1) buff[start]=0; } void removeComment2(char buff[]) { int i=0; while (buff[i]) { if (buff[i]=='/'&&buff[i+1]=='/') { buff[i]=0; break; } i++; } } void removeString(char buff[]) { int i; int start=0; int end=-1; static int status=0; /*0:文字列の外 1:文字列の中*/ i=0; while (buff[i]) { if (status==0&&buff[i]=='\"'&&buff[i-1]!='\\') { start=i; status=1; } else if (status==1&&buff[i]=='\"'&&buff[i-1]!='\\') { end=i; putSpace(buff,start,end); status=0; } i++; } if (status==1&& buff[i-2]=='\\') buff[start]=0; } int isSpecial(char buff[]) { int ret=0; if (strstr(buff,"case")==buff) ret=1; if (strstr(buff,"default")==buff) ret=1; if (strstr(buff,"else")&&strchr(buff,'{')&&strchr(buff,'}')) ret=1; return ret; } void putIndent(int n, FILE *fp) { int i; for (i=0;ikskreform C_SourceFileName\n"); fprintf(stderr,"Press to terminate\n"); getchar(); exit(1); } strcpy(filename,argv[1]); fp=fopen(filename,"r"); if (fp==NULL) { fprintf(stderr,"** error ** can't open the file <%s>\n",filename); fprintf(stderr,"Press to terminate\n"); getchar(); exit(1); } strcpy(tempfilename,filename);strcat(tempfilename,".tmp"); strcpy(backfilename,filename);strcat(backfilename,".bak"); fp1=fopen(tempfilename,"w"); if (fp1==NULL) { fprintf(stderr,"** error ** can't open new file\n"); fprintf(stderr,"Press to terminate\n"); getchar(); exit(1); } while (fgets(readBuffer,1024,fp)!=NULL) { if (strlen(readBuffer)<1024) { freforms(readBuffer,fp1); } else { completed=0; break; } } fclose(fp); fclose(fp1); if (completed) { remove(backfilename); rename(filename,backfilename); rename(tempfilename,filename); } }