Annotation of coherent/g/usr/bin/apropros.c, revision 1.1

1.1     ! root        1: /*
        !             2:  * apropos.c
        !             3:  *
        !             4:  * implement a simple version of the Berkeley command "apropos".  This
        !             5:  * command searches the file /usr/man/man.index for a word that the
        !             6:  * user enters on the command line, and prints every index entry in which
        !             7:  * that token appears.
        !             8:  *
        !             9:  * Usage:  apropos token
        !            10:  *
        !            11:  * first draft, fwb, 3/17/1993 (aye and begorah!)
        !            12:  */
        !            13: #ifdef TEST
        !            14: #      define INDEXFILE "/v/fwb/doc/coherent/man.index"
        !            15: #else
        !            16: #      define INDEXFILE "/usr/man/man.index"
        !            17: #endif
        !            18: 
        !            19: #define BUFFERSIZE 200
        !            20: 
        !            21: #include <ctype.h>
        !            22: #include <stdio.h>
        !            23: #include <string.h>
        !            24: #include <stdlib.h>
        !            25: 
        !            26: main(argc, argv)
        !            27: int argc; char **argv;
        !            28: {
        !            29:        char inb[BUFFERSIZE], testb[BUFFERSIZE], *inbp;
        !            30:        int i, j, lowerflag;
        !            31:        FILE *fp;
        !            32: 
        !            33:        if (argc < 2) {
        !            34:                fprintf(stderr, "Usage: apropos word\n");
        !            35:                exit(EXIT_FAILURE);
        !            36:        }
        !            37: 
        !            38:        if ((fp = fopen(INDEXFILE, "r")) == NULL) {
        !            39:                fprintf(stderr, "apropos: Cannot open index file %s\n",
        !            40:                        INDEXFILE);
        !            41:                exit(EXIT_FAILURE);
        !            42:        }
        !            43: 
        !            44:        /* if first character of user's word is upper-cased, then assume
        !            45:         * the user wants an exact match, and therefore do not
        !            46:         * shift the description into lower case.
        !            47:         */
        !            48: 
        !            49:        if (isupper(argv[1][0]))
        !            50:                lowerflag = 0;
        !            51:        else
        !            52:                lowerflag = 1;
        !            53: 
        !            54:        for (i = 1; fgets(inb, BUFFERSIZE-1, fp) != NULL; i++) {
        !            55:                if ((inbp = strchr(inb, '\t')) == NULL) {
        !            56:                        /* blank lines are OK */
        !            57:                        if (*inb != '\n' && *inb != '\0') {
        !            58:                                fprintf(stderr,
        !            59:                                        "apropos: badly formed line %d in %s\n",
        !            60:                                        i, INDEXFILE);
        !            61:                                exit(EXIT_FAILURE);
        !            62:                        } else
        !            63:                                continue;
        !            64:                }
        !            65:                inbp++;
        !            66: 
        !            67:                strcpy (testb, inbp);
        !            68: 
        !            69:                if (lowerflag)
        !            70:                        for (j = 0; j < strlen (testb); j++)
        !            71:                                if (isupper(testb[j]))
        !            72:                                        testb[j] = tolower(testb[j]);
        !            73: 
        !            74:                if (strstr(testb, argv[1]) != NULL)
        !            75:                        printf("%s", inbp);
        !            76:        }
        !            77:        fclose(fp);
        !            78:        exit(EXIT_SUCCESS);
        !            79: }
        !            80: 

unix.superglobalmegacorp.com

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