=================================================================== RCS file: /home/cvs/OpenXM/src/asir-doc/html_tools/gen_hh.c,v retrieving revision 1.1 retrieving revision 1.6 diff -u -p -r1.1 -r1.6 --- OpenXM/src/asir-doc/html_tools/gen_hh.c 2001/03/15 03:33:09 1.1 +++ OpenXM/src/asir-doc/html_tools/gen_hh.c 2017/08/31 06:42:51 1.6 @@ -1,10 +1,30 @@ +/* $OpenXM: OpenXM/src/asir-doc/html_tools/gen_hh.c,v 1.5 2017/08/31 03:53:00 ohara Exp $ */ + #include +#include #include +#if !defined(_MSC_VER) #include +#else +#include +#endif -gen_hhp(out,n) -char *out; -int n; +#define HEADER_INDEX \ + "\n" \ + "\n\n" \ + "\n" \ + "\n\n" + +#define HEADER_TOC \ + "\n" \ + "\n\n" \ + "\n" \ + "\n\n" \ + "\n" \ + "\n" \ + "\n
    \n" + +void gen_hhp(char *out, int n, char *indir, char *prefix_, char *help) { int i; FILE *outf; @@ -12,22 +32,21 @@ int n; outf = fopen(out,"w"); fprintf(outf,"[OPTIONS]\n"); fprintf(outf,"Compatibility=1.1 or later\n"); - fprintf(outf,"Compiled file=asirhelp.chm\n"); - fprintf(outf,"Contents file=asirhelp.hhc\n"); - fprintf(outf,"Default topic=html\\man_toc.html\n"); + fprintf(outf,"Compiled file=%s.chm\n",help); + fprintf(outf,"Contents file=%s.hhc\n",help); + fprintf(outf,"Default topic=%s\\%s_toc.html\n",indir,prefix_); fprintf(outf,"Display compile progress=No\n"); - fprintf(outf,"Index file=asirhelp.hhk\n"); + fprintf(outf,"Index file=%s.hhk\n",help); fprintf(outf,"Language=0x411 “ú–{Œê\n\n\n[FILES]\n"); - fprintf(outf,"html\\man_toc.html\n"); + fprintf(outf,"%s\\%s_toc.html\n",indir,prefix_); for ( i = 1; i <= n; i++ ) - fprintf(outf,"html\\man_%d.html\n",i); + fprintf(outf,"%s\\%s_%d.html\n",indir,prefix_,i); fprintf(outf,"\n[INFOTYPES]\n"); } -conv_toc(in,out) -char *in,*out; +void conv_toc(char *in, char *out, char *prefix_, char *indir) { char buf[BUFSIZ]; char *fname,*ptr,*ptr1; @@ -36,13 +55,7 @@ char *in,*out; inf = fopen(in,"r"); outf = fopen(out,"w"); - fprintf(outf,"\n"); - fprintf(outf,"\n\n"); - fprintf(outf,"\n"); - fprintf(outf,"\n\n"); - fprintf(outf,"\n"); - fprintf(outf,"\n"); - fprintf(outf,"\n
      \n"); + fputs(HEADER_TOC,outf); while ( 1 ) { c = fgetc(inf); @@ -52,26 +65,26 @@ char *in,*out; fgets(buf,BUFSIZ,inf); if ( !strncmp(buf,"Jump to:",strlen("Jump to:")) ) break; - if ( fname = strstr(buf,"man_") ) { + if ( fname = strstr(buf,prefix_) ) { ptr = strchr(buf,'#'); + if(!ptr) continue; *ptr = 0; ptr = strchr(ptr+1,'>'); ptr++; if ( *ptr == '<' ) ptr = strchr(ptr+1,'>')+1; ptr1 = strchr(ptr,'<'); - *ptr1 = 0; + if(ptr1) *ptr1 = 0; fprintf(outf,"
    • \n"); fprintf(outf,"\n",ptr); - fprintf(outf,"\n",fname); + fprintf(outf,"\n",indir,fname); fprintf(outf,"\n"); } } fprintf(outf,"
    \n\n"); } -conv_index (in,out) -char *in,*out; +void conv_index(char *in, char *out, char *prefix_, char *indir) { char buf[BUFSIZ]; char *fname,*ptr,*ptr1; @@ -80,11 +93,7 @@ char *in,*out; inf = fopen(in,"r"); outf = fopen(out,"w"); - fprintf(outf,"\n"); - fprintf(outf,"\n\n"); - fprintf(outf,"\n"); - fprintf(outf,"\n\n"); - fprintf(outf,"\n"); + fputs(HEADER_INDEX, outf); while ( 1 ) { fgets(buf,BUFSIZ,inf); @@ -95,45 +104,42 @@ char *in,*out; fgets(buf,BUFSIZ,inf); if ( !strncmp(buf,"Jump to:",strlen("Jump to:")) ) break; - if ( fname = strstr(buf,"man_") ) { + if ( fname = strstr(buf,prefix_) ) { ptr = strchr(buf,'#'); + if(!ptr) continue; *ptr = 0; ptr = strchr(ptr+1,'>'); ptr++; if ( *ptr == '<' ) ptr = strchr(ptr+1,'>')+1; ptr1 = strchr(ptr,'<'); - *ptr1 = 0; + if(ptr1) *ptr1 = 0; fprintf(outf,"
  • \n"); fprintf(outf,"\n",ptr); - fprintf(outf,"\n",fname); + fprintf(outf,"\n",indir,fname); fprintf(outf,"\n"); } } fprintf(outf,"\n"); } -main(argc,argv) -int argc; -char **argv; +#if !defined(_MSC_VER) +int find_files(char *indir,char *base) { DIR *d; struct dirent *dent; - int i,n,n1; + int n=0,n1; char *ptr,*ptr1; - char *indir,*outdir; - char in[BUFSIZ],out[BUFSIZ],name[BUFSIZ]; - - indir = argv[1]; - outdir = argv[2]; - sprintf(in,"%s/man_toc.html",indir); - sprintf(out,"%s/asirhelp.hhc",outdir); - conv_toc(in,out); + char name[BUFSIZ]; + int len=strlen(base); d = opendir(indir); - n = 0; + if(!d) { + exit(1); + } while ( dent = readdir(d) ) { strcpy(name,dent->d_name); - ptr = strchr(name,'_'); + ptr = name+len; + ptr = strchr(ptr,'_'); if ( !ptr ) continue; ptr++; @@ -147,10 +153,67 @@ char **argv; if ( n1 > n ) n = n1; } - sprintf(in,"%s/man_%d.html",indir,n); - sprintf(out,"%s/asirhelp.hhk",outdir); - conv_index(in,out); - sprintf(out,"%s/asirhelp.hhp",outdir); - gen_hhp(out,n); - exit(0); + closedir(d); + return n; +} +#else +int find_files(char *indir,char *base) +{ + HANDLE h; + WIN32_FIND_DATA fd; + char *ptr,*ptr1; + char pattern[BUFSIZ]; + char name[BUFSIZ]; + int n=0,n1; + int len=strlen(base); + sprintf(pattern, "%s\\%s_*.*", indir, base); + h = FindFirstFileEx(pattern, FindExInfoStandard, &fd, FindExSearchNameMatch, NULL, 0); + if(h == INVALID_HANDLE_VALUE) { + exit(1); + } + do { + strcpy(name,fd.cFileName); + ptr = name+len; + ptr = strchr(ptr,'_') + 1; + ptr1 = strchr(ptr,'.'); + *ptr1 = 0; + if ( !strcmp(ptr,"toc") ) + continue; + n1 = atoi(ptr); + if ( n1 > n ) + n = n1; + } while(FindNextFile(h, &fd)); + return n; +} +#endif + +int main(int argc, char *argv[]) +{ + int n; + char *indir,*outdir; + char in[BUFSIZ],out[BUFSIZ],prefix_[BUFSIZ]; + char *prefix,*lang; + char help[BUFSIZ],base[BUFSIZ]; + + indir = argv[1]; + outdir = argv[2]; + prefix = indir; + if(argc>3) { + lang = argv[3]; + sprintf(base,"%s-%s",prefix,lang); + }else { + sprintf(base,"%s", "man"); + } + sprintf(help,"%shelp",prefix); + sprintf(prefix_,"%s_", base); + sprintf(in,"%s/%s_toc.html",indir,base); + sprintf(out,"%s/%s.hhc",outdir,help); + conv_toc(in,out,prefix_,indir); + n = find_files(indir, base); + sprintf(in,"%s/%s_%d.html",indir,base,n); + sprintf(out,"%s/%s.hhk",outdir,help); + conv_index(in,out,prefix_,indir); + sprintf(out,"%s/%s.hhp",outdir,help); + gen_hhp(out,n,indir,base,help); + return 0; }