#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;
}
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;
}