CCpp2Html クラスを利用した複数C/C++ファイルの一括変換コマンドです。一括変換用のオプションとして、cpp2html の [-plain], [-t n], [-no] が利用できます。また、[-h] or [--h] でコマンドヘルプが表示されます。 変換を行う拡張子は main 関数の先頭に表示されている ext_list にて定義されています。現在の設定では、 (.c .cc .cpp .h .hh) となっています。
#include <stdio.h> #include <stdlib.h> #include <dirent.h> #include <memory.h> #include <sys/stat.h> #include "cpp2html.h" #define MODE (S_IRWXU | S_IRWXG | S_IRWXO) #define EXTN 5 //----------------------------------------------------------------- void myusage(char* cmd); int readarg(int argc,char* argv[],CSrcOption& cmdopt); int findext(char *PathName,char *ext); //----------------------------------------------------------------- int main(int argc,char* argv[]) { static char* ext_list[] = {"c","cc","cpp","h","hh"}; CCpp2Html* c2h; CSrcOption cmdopt; DIR *dir; struct dirent *dp; int i,fcnt=0; char fname[128][256]; // 引数の読取 if(!readarg(argc,argv,cmdopt)){ myusage(argv[0]); return 0; } // Cpp2html へ引数を渡す。 c2h = new CCpp2Html(cmdopt); // ファイルの検索 if((dir=opendir("."))){ for(dp=readdir(dir);dp!=NULL;dp=readdir(dir)){ for(i=0;i<EXTN;i++){ if(findext(dp->d_name,ext_list[i])){ strcpy(fname[fcnt],dp->d_name); fcnt++; } } } closedir(dir); } else { perror("opendir"); return 0; } // 変換開始 for(i=0;i<fcnt;i++){ if(c2h->ReadFile(fname[i])){ if(c2h->Convert()) c2h->WriteCode(); } c2h->FreeCode(); } // 後片付け delete c2h; return 0; } //----------------------------------------------------------------- // コマンドヘルプ //----------------------------------------------------------------- void myusage(char* cmd) { fprintf(stderr,"USAGE: %s [-plain] [-t n] [-no]\n",cmd); fprintf(stderr,"option:\n"); fprintf(stderr,"\t-plain\tdo not display HTML header and footer.\n"); fprintf(stderr,"\t-t n \ttab order (insert n spaces instead of a tab)\n"); fprintf(stderr,"\t-no\tdisplay line number\n"); } //----------------------------------------------------------------- // プログラムの引数の読取 //----------------------------------------------------------------- int readarg(int argc,char* argv[],CSrcOption& cmdopt) { // 引数の解釈 strcpy(cmdopt.cmd,argv[0]); if(argc==1) return TRUE; for(int i=1;i<argc;i++) { if(!strcmp(argv[i], "-plain")) { if(i>=argc) return TRUE; cmdopt.Hfmt = FMT_PLAIN; } else if(!strcmp(argv[i], "-t")) { if(++i>=argc) return TRUE; cmdopt.t2s = atoi(argv[i]); } else if(!strcmp(argv[i], "-no")) { if(i>=argc) return TRUE; cmdopt.swLine = SW_LINE; } else if(!strcmp(argv[i], "-h")) { return FALSE; } else if(!strcmp(argv[i], "--h")) { return FALSE; } } return TRUE; } //----------------------------------------------------------------- // 拡張子によるファイル検索 //----------------------------------------------------------------- int findext(char *PathName,char *tgt) { int pathlen=strlen(PathName),extlen = strlen(tgt); char ext[10]; memset(ext,0,sizeof(char)*10); if(PathName[pathlen-extlen-1] == '.'){ strncpy(ext,PathName+pathlen-extlen,extlen); } else return 0; if(!strncmp(ext,tgt,extlen)) return 1; return 0; } |
Gami[231]% src2html --h USAGE: src2html [-plain] [-t n] [-no] option: -plain do not display HTML header and footer. -t n tab order (insert n spaces instead of a tab) -no display line number Gami[232]% |