[BACK]Return to extract_func.c CVS log [TXT][DIR] Up to [local] / OpenXM / src / asir-doc

Annotation of OpenXM/src/asir-doc/extract_func.c, Revision 1.1

1.1     ! noro        1: /* $OpenXM: OpenXM/src/asir99/doc/extract_func.c,v 1.1 1999/11/12 09:21:36 noro Exp $ */
        !             2:
        !             3: #include <stdio.h>
        !             4: #include <string.h>
        !             5:
        !             6: main(argc,argv)
        !             7: int argc;
        !             8: char **argv;
        !             9: {
        !            10:        int c;
        !            11:        FILE *in,*fp;
        !            12:        char buf[BUFSIZ*100];
        !            13:        char buf1[BUFSIZ*100];
        !            14:        char *name[BUFSIZ];
        !            15:        char cmd[BUFSIZ];
        !            16:        char fn[BUFSIZ];
        !            17:        int i,j;
        !            18:
        !            19:        if ( argc != 2 ) {
        !            20:                fprintf(stderr,"usage : extract_func infofile\n");
        !            21:                exit(0);
        !            22:        }
        !            23:        in = fopen(argv[1],"rb");
        !            24:        if ( !in ) {
        !            25:                fprintf(stderr,"%s : not found",argv[1]);
        !            26:                exit(0);
        !            27:        }
        !            28:        fp = 0;
        !            29:        while ( 1 ) {
        !            30:                c = getc(in);
        !            31:                if ( c == EOF )
        !            32:                        exit(0);
        !            33:                else if ( !fp && c == '\n' )
        !            34:                        continue;
        !            35:                ungetc(c,in);
        !            36:                fgets(buf,BUFSIZ,in);
        !            37:                if ( fname(buf,name) ) {
        !            38:                        fgets(buf1,BUFSIZ,in);
        !            39:                        for ( i = 0; buf1[i] && buf1[i] == '-'; i++ );
        !            40:                        if ( i >= 3 && buf1[i] == '\n' ) {
        !            41:                                fputs(buf,stderr);
        !            42:                                strcpy(fn,name[0]);
        !            43:                                fp = fopen(fn,"w");
        !            44:                                for ( j = 1; name[j]; j++ )
        !            45:                                        symlink(fn,name[j]);
        !            46:                                fputs(buf,fp);
        !            47:                                fputs(buf1,fp);
        !            48:                        } else if ( fp ) {
        !            49:                                fputs(buf,fp);
        !            50:                                if ( buf1[0] == 0x1f ) {
        !            51:                                        fclose(fp); fp = 0;
        !            52:                                        sprintf(cmd,"nkf %s > %s.tmp; rm -f %s; mv %s.tmp %s",
        !            53:                                                name[0],name[0],name[0]);
        !            54:                                        system(cmd);
        !            55:                                } else
        !            56:                                        fputs(buf1,fp);
        !            57:                        }
        !            58:                } else if ( fp )
        !            59:                        if ( buf[0] == 0x1f ) {
        !            60:                                fclose(fp); fp = 0;
        !            61:                                sprintf(cmd,"nkf %s > %s.tmp; rm -f %s; mv %s.tmp %s",
        !            62:                                        fn,fn,fn,fn,fn);
        !            63:                                system(cmd);
        !            64:                        } else
        !            65:                                fputs(buf,fp);
        !            66:        }
        !            67: }
        !            68:
        !            69: int fname(buf,name)
        !            70: char *buf;
        !            71: char **name;
        !            72: {
        !            73:        int i,len;
        !            74:        char *quote,*bquote,*comma;
        !            75:
        !            76:        /* XXX */
        !            77:        if ( *buf != '`' )
        !            78:                return 0;
        !            79:
        !            80:        i = 0;
        !            81:        while ( 1 ) {
        !            82:                /* search a back quote */
        !            83:                bquote = index(buf,'`' );
        !            84:                if ( !bquote )
        !            85:                        return 0;
        !            86:                buf = bquote+1;
        !            87:
        !            88:                /* buf points to a function; search a quote */
        !            89:                quote = index(buf,'\'');
        !            90:                if ( !quote )
        !            91:                        return 0;
        !            92:                len = quote-buf;
        !            93:                name[i] = (char *)malloc(len+1);
        !            94:                strncpy(name[i],buf,len);
        !            95:                name[i][len] = 0;
        !            96:                i++;
        !            97:                buf = quote+1;
        !            98:                /* buf points to ',' or a space char; search a comma */
        !            99:                comma = index(buf,',');
        !           100:                if ( !comma ) {
        !           101:                        /* if the rest chars include a non-space char, then return 0 */
        !           102:                        while ( *buf && isspace(*buf) ) buf++;
        !           103:                        if ( *buf )
        !           104:                                return 0;
        !           105:                        else {
        !           106:                                name[i] = 0;
        !           107:                                return 1;
        !           108:                        }
        !           109:                }
        !           110:        }
        !           111: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>