=================================================================== RCS file: /home/cvs/OpenXM/src/asir-doc/extract_func.c,v retrieving revision 1.1.1.1 retrieving revision 1.5 diff -u -p -r1.1.1.1 -r1.5 --- OpenXM/src/asir-doc/extract_func.c 1999/12/08 05:47:43 1.1.1.1 +++ OpenXM/src/asir-doc/extract_func.c 2009/02/22 17:59:25 1.5 @@ -1,8 +1,16 @@ -/* $OpenXM: OpenXM/src/asir99/doc/extract_func.c,v 1.1 1999/11/12 09:21:36 noro Exp $ */ +/* $OpenXM: OpenXM/src/asir-doc/extract_func.c,v 1.4 2006/02/12 08:55:26 noro Exp $ */ #include #include +#include +#include +#include +#include +void create_dir(char *); +int fname(char *,char **); + +int main(argc,argv) int argc; char **argv; @@ -14,15 +22,24 @@ char **argv; char *name[BUFSIZ]; char cmd[BUFSIZ]; char fn[BUFSIZ]; + char *file; + int jis; int i,j; - if ( argc != 2 ) { - fprintf(stderr,"usage : extract_func infofile\n"); + if ( (argc != 2) && (argc != 3) ) { + fprintf(stderr,"usage : extract_func [-j] infofile\n"); exit(0); } - in = fopen(argv[1],"rb"); + if ( argc == 3 ) { + jis = 1; + file = argv[2]; + } else { + jis = 0; + file = argv[1]; + } + in = fopen(file,"rb"); if ( !in ) { - fprintf(stderr,"%s : not found",argv[1]); + fprintf(stderr,"%s : not found",file); exit(0); } fp = 0; @@ -40,6 +57,7 @@ char **argv; if ( i >= 3 && buf1[i] == '\n' ) { fputs(buf,stderr); strcpy(fn,name[0]); + create_dir(fn); fp = fopen(fn,"w"); for ( j = 1; name[j]; j++ ) symlink(fn,name[j]); @@ -49,34 +67,58 @@ char **argv; fputs(buf,fp); if ( buf1[0] == 0x1f ) { fclose(fp); fp = 0; - sprintf(cmd,"nkf %s > %s.tmp; rm -f %s; mv %s.tmp %s", - name[0],name[0],name[0]); - system(cmd); + if ( jis ) { + sprintf(cmd,"nkf %s > %s.tmp; rm -f %s; mv %s.tmp %s", + name[0],name[0],name[0]); + system(cmd); + } } else fputs(buf1,fp); } - } else if ( fp ) + } else if ( fp ) { if ( buf[0] == 0x1f ) { fclose(fp); fp = 0; - sprintf(cmd,"nkf %s > %s.tmp; rm -f %s; mv %s.tmp %s", - fn,fn,fn,fn,fn); - system(cmd); - } else + if ( jis ) { + sprintf(cmd,"nkf %s > %s.tmp; rm -f %s; mv %s.tmp %s", + fn,fn,fn,fn,fn); + system(cmd); + } + } else { fputs(buf,fp); + } + } } } +void create_dir(char *fname) +{ + char *p; + + p = fname; + while ( *p && (p = strchr(p,'/')) ) { + *p = 0; + mkdir(fname,0755); + *p = '/'; + p++; + } + +} + int fname(buf,name) char *buf; char **name; { int i,len; - char *quote,*bquote,*comma; + char *quote,*bquote,*comma,*space,*p; - /* XXX */ - if ( *buf != '`' ) - return 0; - + if ( *buf != '`' ) { + /* skip X.X.X if exists */ + space = index(buf,' '); + if ( !space ) return 0; + for ( p = buf; p < space; p++ ) + if ( !isdigit(*p) && *p != '.' ) return 0; + buf = space+1; + } i = 0; while ( 1 ) { /* search a back quote */