|
|
1.1 ! root 1: /* ! 2: *-IMPORTS: ! 3: * <sys/compat.h> ! 4: * CONST ! 5: * USE_PROTO ! 6: * ARGS () ! 7: * <stdlib.h> ! 8: * NULL ! 9: * malloc () ! 10: * free () ! 11: */ ! 12: ! 13: #include <sys/compat.h> ! 14: #include <stdlib.h> ! 15: ! 16: #include "ehand.h" ! 17: #include "symbol.h" ! 18: #include "read.h" ! 19: #include "mtune.h" ! 20: ! 21: #include "stune.h" ! 22: ! 23: LOCAL stune_t * _stunes; ! 24: ! 25: ! 26: /* ! 27: * Read lines from an "stune" file. ! 28: */ ! 29: ! 30: #ifdef USE_PROTO ! 31: LOCAL int (read_stune) (input_t * input, lex_t * lexp) ! 32: #else ! 33: LOCAL int ! 34: read_stune ARGS ((input, lexp)) ! 35: input_t * input; ! 36: lex_t * lexp; ! 37: #endif ! 38: { ! 39: int ch = '\n'; ! 40: stune_t * stunep; ! 41: ehand_t err; ! 42: ! 43: if ((stunep = (stune_t *) malloc (sizeof (* stunep))) == NULL) ! 44: throw_error ("out of memory in read_stune ()"); ! 45: ! 46: if (PUSH_HANDLER (err) == 0) { ! 47: /* ! 48: * If the first thing on the line works out to be an EOF, ! 49: * then bail out without an error. ! 50: */ ! 51: ! 52: ch = read_symbol (input, lexp, & stunep->st_name); ! 53: ! 54: if (stunep->st_name == NULL) { ! 55: /* ! 56: * We allow an EOF at the beginning of a line and we ! 57: * also allow a blank line. ! 58: */ ! 59: ! 60: goto at_eof; ! 61: } ! 62: check_not_eol (ch); ! 63: ! 64: if ((stunep->st_mtune = find_mtune (stunep->st_name)) == NULL) ! 65: throw_error ("Parameter name not in 'mtune' file"); ! 66: ! 67: if (stunep->st_mtune->mt_stune != NULL) ! 68: throw_error ("Two values configured for parameter"); ! 69: ! 70: /* ! 71: * Pull in the parameter value ! 72: */ ! 73: ! 74: ch = read_longs (input, lexp, & stunep->st_value, NO_RANGE); ! 75: ! 76: if (stunep->st_value < stunep->st_mtune->mt_min || ! 77: stunep->st_value > stunep->st_mtune->mt_max) ! 78: throw_error ("Parameter value outside configurable range"); ! 79: ! 80: ch = expect_eol (input, lexp, ch); ! 81: ! 82: /* ! 83: * Having passed all the reasonableness checks, we link the ! 84: * new entry into the chain. ! 85: */ ! 86: ! 87: stunep->st_mtune->mt_stune = stunep; ! 88: ! 89: stunep->st_next = _stunes; ! 90: _stunes = stunep; ! 91: } else { ! 92: ! 93: free (stunep); ! 94: CHAIN_ERROR (err); ! 95: } ! 96: ! 97: at_eof: ! 98: POP_HANDLER (err); ! 99: return ch; ! 100: } ! 101: ! 102: ! 103: #if 0 ! 104: /* ! 105: * Regenerate an 'stune' line from the stored record. ! 106: */ ! 107: ! 108: #ifdef USE_PROTO ! 109: void (write_stune) (stune_t * stunep, FILE * out) ! 110: #else ! 111: void ! 112: write_stune ARGS ((stunep, out)) ! 113: stune_t * stunep; ! 114: FILE * out; ! 115: #endif ! 116: { ! 117: (void) fprintf (out, "%-8s %-7ld\n", ! 118: stunep->st_name->s_data, ! 119: stunep->st_value); ! 120: } ! 121: #endif ! 122: ! 123: ! 124: /* ! 125: * Suck in a complete 'stune' file. ! 126: */ ! 127: ! 128: #ifdef USE_PROTO ! 129: void (read_stune_file) (CONST char * name) ! 130: #else ! 131: void ! 132: read_stune_file ARGS ((name)) ! 133: CONST char * name; ! 134: #endif ! 135: { ! 136: read_dev_file (name, read_stune); ! 137: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.