Annotation of 43BSD/contrib/mkmf/src/suffix.c, revision 1.1

1.1     ! root        1: /* $Header: suffix.c,v 1.2 85/03/21 10:19:36 nicklin Exp $ */
        !             2: 
        !             3: /*
        !             4:  * Author: Peter J. Nicklin
        !             5:  */
        !             6: #include <stdio.h>
        !             7: #include "Mkmf.h"
        !             8: #include "hash.h"
        !             9: #include "macro.h"
        !            10: #include "null.h"
        !            11: #include "suffix.h"
        !            12: #include "yesno.h"
        !            13: 
        !            14: static int SFX1[SFXTABSIZE];           /* single character suffixes */
        !            15: static int INC1[SFXTABSIZE];           /* include file types for 1 char sfx */
        !            16: static SFXBLK *SFX2[SFXTABSIZE];       /* 2+ character suffixes */
        !            17: 
        !            18: /*
        !            19:  * buildsfxtable() converts a suffix list into a hash table for fast lookup.
        !            20:  * Returns YES if successful, otherwise NO.
        !            21:  */
        !            22: buildsfxtable()
        !            23: {
        !            24:        extern HASH *MDEFTABLE;         /* macro definition table */
        !            25:        extern SUFFIX DEFSFX[];         /* default suffix list */
        !            26:        HASHBLK *htb;                   /* hash table block */
        !            27:        HASHBLK *htlookup();            /* find hash table entry */
        !            28:        int i;                          /* suffix list counter */
        !            29:        int installsfx();               /* install suffix in hash table */
        !            30:        int sfxbuftotable();            /* feed suffixes to installsfx() */
        !            31: 
        !            32:        /* default suffix list */
        !            33:        for (i = 0; DEFSFX[i].suffix != NULL; i++)
        !            34:                if (installsfx(DEFSFX[i].suffix, DEFSFX[i].sfxtyp,
        !            35:                    DEFSFX[i].inctyp) == NO)
        !            36:                        return(NO);
        !            37:        
        !            38:        /* supplementary suffix definitions */
        !            39:        if ((htb = htlookup(MSUFFIX, MDEFTABLE)) != NULL)
        !            40:                {
        !            41:                if (sfxbuftotable(htb->h_def) == NO)
        !            42:                        return(NO);
        !            43:                }
        !            44:        return(YES);
        !            45: }
        !            46: 
        !            47: 
        !            48: 
        !            49: /*
        !            50:  * installsfx() installs a suffix in one of two suffix tables: SFX1 for
        !            51:  * one character suffixes, and SFX2 for two or more character suffixes.
        !            52:  * For a suffix that already exists, only its type and corresponding
        !            53:  * included file type is updated. Returns integer YES if successful,
        !            54:  * otherwise NO.
        !            55:  */
        !            56: installsfx(suffix, sfxtyp, inctyp)
        !            57:        char *suffix;                   /* suffix string */
        !            58:        int sfxtyp;                     /* suffix type */
        !            59:        int inctyp;                     /* include file type */
        !            60: {
        !            61:        char *malloc();                 /* memory allocator */
        !            62:        char *strsav();                 /* save a string somewhere */
        !            63:        int sfxindex;                   /* index into suffix tables */
        !            64:        SFXBLK *sfxblk;                 /* suffix list block */
        !            65: 
        !            66:        if (*suffix == '.')
        !            67:                suffix++;
        !            68:        sfxindex = suffix[0];
        !            69:        if (suffix[0] == '\0' || suffix[1] == '\0')
        !            70:                {
        !            71:                SFX1[sfxindex] = sfxtyp;        /* 0 or 1 character suffix */
        !            72:                INC1[sfxindex] = inctyp;
        !            73:                }
        !            74:        else    {                               /* 2+ character suffix */
        !            75:                if ((sfxblk = (SFXBLK *) malloc(sizeof(SFXBLK))) == NULL)
        !            76:                        return(NO);
        !            77:                if ((sfxblk->sfx.suffix = strsav(suffix)) == NULL)
        !            78:                        return(NO);
        !            79:                sfxblk->sfx.sfxtyp = sfxtyp;
        !            80:                sfxblk->sfx.inctyp = inctyp;
        !            81:                sfxblk->next = SFX2[sfxindex];
        !            82:                SFX2[sfxindex] = sfxblk;
        !            83:                }
        !            84:        return(YES);
        !            85: }
        !            86: 
        !            87: 
        !            88: 
        !            89: /*
        !            90:  * lookuptypeofinclude() returns the include file type for suffix, or 0 if
        !            91:  * unknown suffix.
        !            92:  */
        !            93: lookuptypeofinclude(suffix)
        !            94:        char *suffix;                   /* suffix string */
        !            95: {
        !            96:        SFXBLK *sfxblk;                 /* suffix block pointer */
        !            97: 
        !            98:        if (suffix[0] == '\0' || suffix[1] == '\0')
        !            99:                return(INC1[*suffix]);          /* 0 or 1 char suffix */
        !           100:                                                /* 2+ character suffix */
        !           101:        for (sfxblk = SFX2[*suffix]; sfxblk != NULL; sfxblk = sfxblk->next)
        !           102:                if (EQUAL(suffix, sfxblk->sfx.suffix))
        !           103:                        return(sfxblk->sfx.inctyp);
        !           104:        return(0);
        !           105: }
        !           106: 
        !           107: 
        !           108: 
        !           109: /*
        !           110:  * lookupsfx() returns the suffix type, or 0 if unknown suffix.
        !           111:  */
        !           112: lookupsfx(suffix)
        !           113:        char *suffix;                   /* suffix string */
        !           114: {
        !           115:        SFXBLK *sfxblk;                 /* suffix block pointer */
        !           116: 
        !           117:        if (suffix[0] == '\0' || suffix[1] == '\0')
        !           118:                return(SFX1[*suffix]);          /* 0 or 1 char suffix */
        !           119:                                                /* 2+ character suffix */
        !           120:        for (sfxblk = SFX2[*suffix]; sfxblk != NULL; sfxblk = sfxblk->next)
        !           121:                if (EQUAL(suffix, sfxblk->sfx.suffix))
        !           122:                        return(sfxblk->sfx.sfxtyp);
        !           123:        return(0);
        !           124: }
        !           125: 
        !           126: 
        !           127: 
        !           128: /*
        !           129:  * sfxbuftotable() parses a buffer containing suffixes and presents them
        !           130:  * to installsfx() for installation into the appropriate hash table.
        !           131:  * The suffix type may be altered by attaching a modifier :suffixtype.
        !           132:  *     :h      --> header file type
        !           133:  *     :o      --> object file type
        !           134:  *     :s      --> source file type (default)
        !           135:  *     :x      --> executable file type
        !           136:  *     :       --> unknown file type
        !           137:  * The include file type may be altered by attaching an additional
        !           138:  * modifier includetype.
        !           139:  *     C       --> C source code
        !           140:  *     F       --> Fortran, Ratfor, Efl source code
        !           141:  *     P       --> Pascal source code
        !           142:  * If the suffix is object file type, the OBJSFX default object suffix
        !           143:  * is modified accordingly. Returns YES if successful, otherwise NO.
        !           144:  */
        !           145: sfxbuftotable(sfxbuf)
        !           146:        char *sfxbuf;                   /* buffer conatining suffixes */
        !           147: {
        !           148:        extern char OBJSFX[];           /* object file name suffix */
        !           149:        char *gettoken();               /* get next token */
        !           150:        char *rindex();                 /* find last occurrence of character */
        !           151:        char *sfxtyp;                   /* suffix type */
        !           152:        char *strcpy();                 /* string copy */
        !           153:        char suffix[SUFFIXSIZE+2];      /* suffix + modifier */
        !           154:        int installsfx();               /* install suffix in hash table */
        !           155: 
        !           156:        while ((sfxbuf = gettoken(suffix, sfxbuf)) != NULL)
        !           157:                if ((sfxtyp = rindex(suffix, ':')) == NULL)
        !           158:                        {
        !           159:                        if (installsfx(suffix, SFXSRC, INCLUDE_NONE) == NO)
        !           160:                                return(NO);
        !           161:                        }
        !           162:                else    {
        !           163:                        *sfxtyp = '\0';
        !           164:                        if (installsfx(suffix, sfxtyp[1], sfxtyp[2]) == NO)
        !           165:                                return(NO);
        !           166:                        if (sfxtyp[1] == SFXOBJ)
        !           167:                                strcpy(OBJSFX, suffix);
        !           168:                        }
        !           169:        return(YES);
        !           170: }

unix.superglobalmegacorp.com

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