Annotation of 42BSD/undoc/enteraddr.c, revision 1.1

1.1     ! root        1: # include      <stdio.h>
        !             2: # include      <ctype.h>
        !             3: 
        !             4: # define       reg     register
        !             5: # define       bool    char
        !             6: 
        !             7: # define       TRUE    1
        !             8: # define       FALSE   0
        !             9: 
        !            10: static char    *sccsid ="@(#)enteraddr.c       1.6 (Berkeley) 4/10/81";
        !            11: 
        !            12: struct fd {
        !            13:        char    *f_name;
        !            14:        char    *f_desc;
        !            15:        char    *f_value;
        !            16: };
        !            17: 
        !            18: typedef struct fd      FDES;
        !            19: 
        !            20: char   *Fmtfile,
        !            21:        *Addrfile,
        !            22:        Fmt[BUFSIZ],
        !            23:        *malloc();
        !            24: 
        !            25: FDES   Fmtab[BUFSIZ],
        !            26:        *name();
        !            27: 
        !            28: main(ac, av)
        !            29: int    ac;
        !            30: char   **av;
        !            31: {
        !            32:        setbuf(stdout, 0);
        !            33:        if (ac != 3) {
        !            34:                printf("usage: %s fmt-file addr-file\n", av[0]);
        !            35:                exit(1);
        !            36:        }
        !            37:        Fmtfile = av[1];
        !            38:        Addrfile = av[2];
        !            39:        parseaddr();
        !            40:        doaddrs();
        !            41:        putchar('\n');
        !            42: }
        !            43: 
        !            44: /*
        !            45:  * parse the fmt file
        !            46:  */
        !            47: parseaddr()
        !            48: {
        !            49:        reg FILE        *inf;
        !            50:        reg char        *sp;
        !            51:        reg FDES        *fp;
        !            52:        reg char        c;
        !            53:        char            buf[80];
        !            54: 
        !            55:        if ((inf = fopen(Fmtfile, "r")) == NULL) {
        !            56:                perror(Fmtfile);
        !            57:                exit(1);
        !            58:        }
        !            59:        for (fp = Fmtab; fp < &Fmtab[BUFSIZ]; fp++)
        !            60:                fp->f_name = NULL;
        !            61: 
        !            62:        while ((c = getc(inf)) != EOF)
        !            63:                if (c == '<') {
        !            64:                        register char   c;
        !            65: 
        !            66:                        sp = buf;
        !            67:                        while ((*sp = getc(inf)) != '>' && *sp != ':')
        !            68:                                sp++;
        !            69:                        c = *sp;
        !            70:                        *sp++ = '\0';
        !            71:                        fp = name(buf);
        !            72:                        fp->f_name = malloc(sp - buf);
        !            73:                        strcpy(fp->f_name, buf);
        !            74:                        if (c == ':') {
        !            75:                                for (sp = buf; (*sp = getc(inf)) != '>'; sp++)
        !            76:                                        continue;
        !            77:                                *sp++ = 0;
        !            78:                                fp->f_desc = malloc(sp - buf);
        !            79:                                strcpy(fp->f_desc, buf);
        !            80:                        }
        !            81:                        else
        !            82:                                fp->f_desc = NULL;
        !            83:                }
        !            84:        fclose(inf);
        !            85: }
        !            86: 
        !            87: doaddrs()
        !            88: {
        !            89:        reg FILE        *outf;
        !            90:        reg char        *sp;
        !            91:        reg FDES        *fp;
        !            92:        reg int         len;
        !            93:        char            buf[BUFSIZ];
        !            94: 
        !            95:        if ((outf = fopen(Addrfile, "a")) == NULL) {
        !            96:                perror(Addrfile);
        !            97:                exit(1);
        !            98:        }
        !            99: 
        !           100:        for (fp = Fmtab; fp->f_name != NULL; fp++)
        !           101:                fp->f_value = NULL;
        !           102: 
        !           103:        for (;;) {
        !           104:                for (fp = Fmtab; fp->f_name != NULL; fp++) {
        !           105:                        printf("%s", fp->f_name);
        !           106:                        if (fp->f_value != NULL)
        !           107:                                printf(" (%s)", fp->f_value);
        !           108:                        else if (fp->f_desc != NULL)
        !           109:                                printf(" (%s)", fp->f_desc);
        !           110:                        printf(": ");
        !           111:                        if (fgets(buf, BUFSIZ, stdin) == NULL)
        !           112:                                return;
        !           113:                        buf[strlen(buf)-1] = '\0';
        !           114:                        if (buf[0] == '\0')
        !           115:                                if (fp->f_value == NULL)
        !           116:                                        if (fp->f_desc != NULL)
        !           117:                                                strcpy(buf, fp->f_desc);
        !           118:                                        else
        !           119:                                                strcpy(buf, "");
        !           120:                                else
        !           121:                                        continue;
        !           122:                        else if (fp->f_value != NULL)
        !           123:                                cfree(fp->f_value);
        !           124:                        fp->f_value = malloc(strlen(buf) + 1);
        !           125:                        strcpy(fp->f_value, buf);
        !           126:                }
        !           127:                putchar('\n');
        !           128:                for (fp = Fmtab; fp->f_name != NULL; fp++)
        !           129:                        printf("%s: %s\n", fp->f_name, fp->f_value);
        !           130:                printf("correct? ");
        !           131:                fgets(buf, BUFSIZ, stdin);
        !           132:                if (buf[0] == 'y') {
        !           133:                        for (fp = Fmtab; fp->f_name != NULL; fp++) {
        !           134:                                fprintf(outf, "%s", fp->f_name);
        !           135:                                if (*fp->f_value != '\0')
        !           136:                                        fprintf(outf, " %s", fp->f_value);
        !           137:                                putc('\n', outf);
        !           138:                                cfree(fp->f_value);
        !           139:                                fp->f_value = NULL;
        !           140:                        }
        !           141:                        fprintf(outf, "$\n");
        !           142:                }
        !           143:                putchar('\n');
        !           144:        }
        !           145: }
        !           146: 
        !           147: FDES *
        !           148: name(str)
        !           149: reg char       *str; {
        !           150: 
        !           151:        reg FDES        *fp;
        !           152: 
        !           153:        for (fp = Fmtab; fp->f_name != NULL; fp++)
        !           154:                if (strcmp(str, fp->f_name) == 0)
        !           155:                        return fp;
        !           156:        return fp;
        !           157: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.