Annotation of coherent/b/STREAMS/conf/bin/src/mtune.c, revision 1.1

1.1     ! root        1: /*
        !             2:  *-IMPORTS:
        !             3:  *     <sys/compat.h>
        !             4:  *             CONST
        !             5:  *             LOCAL
        !             6:  *             USE_PROTO
        !             7:  *             ARGS ()
        !             8:  *     <stdlib.h>
        !             9:  *             NULL
        !            10:  *             malloc ()
        !            11:  *             free ()
        !            12:  */
        !            13: 
        !            14: #include <sys/compat.h>
        !            15: #include <stdlib.h>
        !            16: 
        !            17: #include "ehand.h"
        !            18: #include "symbol.h"
        !            19: #include "read.h"
        !            20: #include "input.h"
        !            21: 
        !            22: #include "mtune.h"
        !            23: 
        !            24: LOCAL mtune_t *        _mtunes;
        !            25: 
        !            26: 
        !            27: /*
        !            28:  * Locate a parameter definition by symbol.
        !            29:  */
        !            30: 
        !            31: #if    USE_PROTO
        !            32: mtune_t * (find_mtune) (symbol_t * sym)
        !            33: #else
        !            34: mtune_t *
        !            35: find_mtune ARGS ((sym))
        !            36: symbol_t      *        sym;
        !            37: #endif
        !            38: {
        !            39:        mtune_t       * scan;
        !            40: 
        !            41:        for (scan = _mtunes ; scan != NULL ; scan = scan->mt_next) {
        !            42: 
        !            43:                if (scan->mt_name == sym)
        !            44:                        return scan;
        !            45:        }
        !            46: 
        !            47:        return NULL;
        !            48: }
        !            49: 
        !            50: 
        !            51: /*
        !            52:  * Regenerate an 'mtune' line from the stored record.
        !            53:  */
        !            54: 
        !            55: #if    USE_PROTO
        !            56: void (write_mtune) (mtune_t * mtunep, input_t * input)
        !            57: #else
        !            58: void
        !            59: write_mtune ARGS ((mtunep, input))
        !            60: mtune_t              * mtunep;
        !            61: input_t              * input;
        !            62: #endif
        !            63: {
        !            64:        if ((* input->in_filter) (input, "%s<2>%ld<3>%ld<4>%ld\n",
        !            65:                                  mtunep->mt_name->s_data, mtunep->mt_min,
        !            66:                                  mtunep->mt_default, mtunep->mt_max) < 0) {
        !            67: 
        !            68:                throw_error ("Output error");
        !            69:        }
        !            70: }
        !            71: 
        !            72: 
        !            73: /*
        !            74:  * Read lines from an "mtune" file.
        !            75:  */
        !            76: 
        !            77: #if    USE_PROTO
        !            78: LOCAL mtune_t * (read_mtune) (input_t * input, lex_t * lexp, int * end_char)
        !            79: #else
        !            80: LOCAL mtune_t *
        !            81: read_mtune ARGS ((input, lexp, end_char))
        !            82: input_t              * input;
        !            83: lex_t        * lexp;
        !            84: int          * end_char;
        !            85: #endif
        !            86: {
        !            87:        VOLATILE int    ch = '\n';
        !            88:        mtune_t * VOLATILE mtunep;
        !            89:        ehand_t         err;
        !            90: 
        !            91:        if ((mtunep = (mtune_t *) malloc (sizeof (* mtunep))) == NULL)
        !            92:                throw_error ("out of memory in read_mtune ()");
        !            93: 
        !            94:        if (PUSH_HANDLER (err) == 0) {
        !            95:                /*
        !            96:                 * If the first thing on the line works out to be an EOF,
        !            97:                 * then bail out without an error.
        !            98:                 */
        !            99: 
        !           100:                ch = read_symbol (input, lexp, & mtunep->mt_name);
        !           101: 
        !           102:                if (mtunep->mt_name == NULL) {
        !           103:                        /*
        !           104:                         * We allow an EOF at the beginning of a line and we
        !           105:                         * also allow a blank line.
        !           106:                         */
        !           107: 
        !           108:                        free (mtunep);
        !           109:                        mtunep = NULL;
        !           110:                        goto at_eof;
        !           111:                }
        !           112:                check_not_eol (ch);
        !           113: 
        !           114:                if (mtunep->mt_name->s_size > MAX_PARAMNAME)
        !           115:                        throw_error ("parameter name must be <= %d characters",
        !           116:                                     MAX_PARAMNAME);
        !           117: 
        !           118:                /*
        !           119:                 * Pull in the parameter values
        !           120:                 */
        !           121: 
        !           122:                ch = read_longs (input, lexp, & mtunep->mt_min, NO_RANGE);
        !           123:                check_not_eol (ch);
        !           124: 
        !           125:                ch = read_longs (input, lexp, & mtunep->mt_default, NO_RANGE);
        !           126:                check_not_eol (ch);
        !           127: 
        !           128:                ch = read_longs (input, lexp, & mtunep->mt_max, NO_RANGE);
        !           129:                ch = expect_eol (input, lexp, ch);
        !           130: 
        !           131:                mtunep->mt_stune = NULL;
        !           132:        } else {
        !           133: 
        !           134:                free (mtunep);
        !           135:                CHAIN_ERROR (err);
        !           136:        }
        !           137: 
        !           138: at_eof:
        !           139:        POP_HANDLER (err);
        !           140: 
        !           141:        * end_char = ch;
        !           142:        return mtunep;
        !           143: }
        !           144: 
        !           145: 
        !           146: /*
        !           147:  * This function is passed as a parameter to read_dev_string () to read an
        !           148:  * 'mtune' entry (usually a program argument) and hook it into a global list.
        !           149:  */
        !           150: 
        !           151: #if    USE_PROTO
        !           152: LOCAL int _read_mtune_string (input_t * input, lex_t * lexp,
        !           153:                              mtune_t ** mtlistp)
        !           154: #else
        !           155: LOCAL int
        !           156: _read_mtune_string (input, lexp, mtlistp)
        !           157: input_t              * input;
        !           158: lex_t        * lexp;
        !           159: mtune_t             ** mtlistp;
        !           160: #endif
        !           161: {
        !           162:        mtune_t       * mtunep;
        !           163:        int             ch;
        !           164: 
        !           165:        if ((mtunep = read_mtune (input, lexp, & ch)) != NULL) {
        !           166:                mtunep->mt_next = * mtlistp;
        !           167:                * mtlistp = mtunep;
        !           168:        }
        !           169: 
        !           170:        return ch;
        !           171: }
        !           172: 
        !           173: 
        !           174: /*
        !           175:  * This function is used by _read_mtune_file () to link an mtune entry into
        !           176:  * the global lists and check it.
        !           177:  */
        !           178: 
        !           179: #if    USE_PROTO
        !           180: LOCAL void (link_mtune) (mtune_t * mtunep, input_t * input)
        !           181: #else
        !           182: LOCAL void
        !           183: link_mtune ARGS ((mtunep, input))
        !           184: mtune_t              * mtunep;
        !           185: input_t              * input;
        !           186: #endif
        !           187: {
        !           188:        if (find_mtune (mtunep->mt_name) != NULL)
        !           189:                throw_error ("tunable parameter name must be unique");
        !           190: 
        !           191:        mtunep->mt_next = _mtunes;
        !           192:        _mtunes = mtunep;
        !           193: 
        !           194:        write_mtune (mtunep, input);
        !           195: }
        !           196: 
        !           197: 
        !           198: /*
        !           199:  * This function is passed as a parameter to read_dev_file () to read an
        !           200:  * 'mtune' entry and link it in to the global list.
        !           201:  */
        !           202: 
        !           203: #if    USE_PROTO
        !           204: LOCAL int _read_mtune_file (input_t * input, lex_t * lexp,
        !           205:                            mtune_t ** changes)
        !           206: #else
        !           207: LOCAL int
        !           208: _read_mtune_file (input, lexp, changes)
        !           209: input_t              * input;
        !           210: lex_t        * lexp;
        !           211: mtune_t             ** changes;
        !           212: #endif
        !           213: {
        !           214:        mtune_t       * mtunep;
        !           215:        int             ch;
        !           216: 
        !           217:        if ((mtunep = read_mtune (input, lexp, & ch)) == NULL) {
        !           218:                if (ch == READ_EOF) {
        !           219:                        /*
        !           220:                         * Blow remaining changes out as new entries
        !           221:                         */
        !           222: 
        !           223:                        while ((mtunep = * changes) != NULL) {
        !           224:                                * changes = mtunep->mt_next;
        !           225:                                link_mtune (mtunep, input);
        !           226:                        }
        !           227:                }
        !           228:                return ch;
        !           229:        }
        !           230: 
        !           231: 
        !           232:        /*
        !           233:         * Link in the newly-read entry.
        !           234:         */
        !           235: 
        !           236:        if (changes) {
        !           237:                mtune_t      ** scan;
        !           238: 
        !           239:                for (scan = changes ; * scan != NULL ;
        !           240:                     scan = & (* scan)->mt_next) {
        !           241: 
        !           242:                        if ((* scan)->mt_name == mtunep->mt_name) {
        !           243:                                /*
        !           244:                                 * Our current entry is being replaced by a
        !           245:                                 * new one; unlink the new entry from the
        !           246:                                 * change list and discard the old entry.
        !           247:                                 */
        !           248: 
        !           249:                                free (mtunep);
        !           250: 
        !           251:                                if (report_mode ())
        !           252:                                        return ch;
        !           253: 
        !           254:                                mtunep = * scan;
        !           255:                                * scan = mtunep->mt_next;
        !           256:                                break;
        !           257:                        }
        !           258:                }
        !           259:        }
        !           260: 
        !           261:        link_mtune (mtunep, input);
        !           262:        return ch;
        !           263: }
        !           264: 
        !           265: 
        !           266: /*
        !           267:  * Return the head of the list of all tuneable parameters.
        !           268:  */
        !           269: 
        !           270: #if    USE_PROTO
        !           271: mtune_t * (mtunes) (void)
        !           272: #else
        !           273: mtune_t *
        !           274: mtunes ARGS (())
        !           275: #endif
        !           276: {
        !           277:        return _mtunes;
        !           278: }
        !           279: 
        !           280: 
        !           281: /*
        !           282:  * Read in an "mtune" entry from a string and add it to a list.
        !           283:  */
        !           284: 
        !           285: #if    USE_PROTO
        !           286: void read_mtune_string (CONST char * string, VOID * extra)
        !           287: #else
        !           288: void
        !           289: read_mtune_string (string, extra)
        !           290: CONST char    *        string;
        !           291: VOID         * extra;
        !           292: #endif
        !           293: {
        !           294:        read_dev_string (string, (dev_func_p) _read_mtune_string, extra);
        !           295: }
        !           296: 
        !           297: 
        !           298: /*
        !           299:  * Suck in a complete 'mtune' file.
        !           300:  */
        !           301: 
        !           302: #if    USE_PROTO
        !           303: void (read_mtune_file) (CONST char * inname, CONST char * outname,
        !           304:                        VOID * extra)
        !           305: #else
        !           306: void
        !           307: read_mtune_file ARGS ((inname, outname, extra))
        !           308: CONST char    *        inname;
        !           309: CONST char    *        outname;
        !           310: VOID         * extra;
        !           311: #endif
        !           312: {
        !           313:        read_dev_file (inname, outname, (dev_func_p) _read_mtune_file, extra);
        !           314: }

unix.superglobalmegacorp.com

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