src2html (cpp2html コマンドの利用)

cpp2html コマンドを利用した複数C/C++ファイルの一括変換コマンドです。一括変換用のオプションとして、cpp2html の [-plain], [-t n], [-no] が利用できます。また、[-h] or [--h] でコマンドヘルプが表示されます。 変換を行う拡張子は main 関数の先頭に表示されている ext_list にて定義されています。現在の設定では、 (.c .cc .cpp .h .hh) となっています。

src2html(src2html.cpp)
#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
#include <memory.h>
#include <sys/stat.h>
#include <math.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"};
    static char trcmd [] = "cpp2html";
    CCpp2Html c2h;
    CSrcOption cmdopt;
    DIR *dir; struct dirent *dp;
    int i,fcnt=0;
    char fname[128][256],cmd[256],t2s[20];

    // 引数の読取
    if(!readarg(argc,argv,cmdopt)){
        myusage(argv[0]);
        return 0;
    }
    // ファイルの検索
    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++){
        memset(cmd,0,sizeof(char)*256);
        strcat(cmd,trcmd);
        strcat(cmd," ");
        strcat(cmd,fname[i]);
        if(cmdopt.Hfmt==FMT_PLAIN) strcat(cmd," -plain");
        if(cmdopt.swLine==SW_LINE) strcat(cmd," -no");
        if(cmdopt.t2s!=4){
            memset(t2s,0,sizeof(char)*20);
            sprintf(t2s," -t %d",cmdopt.t2s);
            strcat(cmd,t2s);
        }
        system(cmd);
    }
    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;
}

Help画面
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]%
inserted by FC2 system

変換画面
Gami[236]% src2html -no
**cpp2html v1.0
        cpp2html.cpp -> cpp2html_cpp.html
**cpp2html v1.0
        cpp2html.h -> cpp2html_h.html
**cpp2html v1.0
        exp1.cpp -> exp1_cpp.html
**cpp2html v1.0
        exp2.cpp -> exp2_cpp.html
**cpp2html v1.0
        src2html.cpp -> src2html_cpp.html
Gami[237]%
inserted by FC2 system