#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    6

void myusage(char* cmd);
int readarg(int argc, char* argv[], CSrcOption& cmdopt);
int findext(char *PathName, const char *ext);

int main(int argc,char* argv[])
{
    static const char* ext_list[] = {"c","cc","cpp","h","hh","hpp"};
    Cpp2Html* c2h;
    CSrcOption cmdopt;
    DIR *dir;
    int fcnt=0;
    char fname[128][256];

    // 引数の読取
    if ( !readarg(argc,argv,cmdopt) ) {
        myusage(argv[0]);
        return 0;
    }
    // Cpp2html へ引数を渡す。
    c2h = new Cpp2Html(cmdopt);
    // ファイルの検索
    if ( (dir=opendir(".")) ) {
        for ( struct dirent *dp=readdir(dir); dp!=NULL; dp=readdir(dir) ) {
            for ( int 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 ( int 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, const char *tgt)
{
    char ext[10];
    int pathlen = strlen(PathName), extlen = strlen(tgt);
    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;
}
inserted by FC2 system