Annotation of 42BSD/undoc/enteraddr.c, revision 1.1.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.