|
|
1.1 ! root 1: /* ! 2: *-IMPORTS: ! 3: * <sys/compat.h> ! 4: * LOCAL ! 5: * USE_PROTO ! 6: * ARGS () ! 7: * <stdio.h> ! 8: * NULL ! 9: * FILE ! 10: * stdout ! 11: * fopen () ! 12: * fclose () ! 13: * fprintf () ! 14: * <time.h> ! 15: * time_t ! 16: * localtime () ! 17: * time () ! 18: * strftime () ! 19: * <limits.h> ! 20: * INT_MAX ! 21: * INT_MIN ! 22: */ ! 23: ! 24: #include <sys/compat.h> ! 25: #include <stdio.h> ! 26: #include <time.h> ! 27: #include <limits.h> ! 28: ! 29: #include "mtune.h" ! 30: #include "stune.h" ! 31: #include "symbol.h" ! 32: #include "ehand.h" ! 33: ! 34: #include "mkconf.h" ! 35: ! 36: ! 37: /* ! 38: * Write out C-language definitions for the values of the tunable parameters. ! 39: */ ! 40: ! 41: #ifdef USE_PROTO ! 42: LOCAL void (write_params) (FILE * out) ! 43: #else ! 44: LOCAL void ! 45: write_params ARGS ((out)) ! 46: FILE * out; ! 47: #endif ! 48: { ! 49: mtune_t * scan; ! 50: enum { ! 51: FIRST, ! 52: REST ! 53: } state = FIRST; ! 54: ! 55: for (scan = mtunes () ; scan != NULL ; scan = scan->mt_next) { ! 56: long value; ! 57: ! 58: /* ! 59: * Parameters that are within the range of representation of ! 60: * an integer go into an enumeration. Unless this is Coherent, ! 61: * numbers larger than that become "static const long". ! 62: * ! 63: * Note that Coherent compiles comparisons to INT_MIN into ! 64: * broken code as of this writing (April '93). ! 65: */ ! 66: ! 67: value = scan->mt_stune == NULL ? scan->mt_default : ! 68: scan->mt_stune->st_value; ! 69: ! 70: #ifndef __COHERENT__ ! 71: if (value < INT_MIN || value > INT_MAX) { ! 72: if (state == REST) ! 73: fprintf (out, "\n};\n"); ! 74: state = FIRST; ! 75: ! 76: fprintf (out, "#ifdef\t__cplusplus\n"); ! 77: fprintf (out, "static const long %s = %ld;\n", ! 78: scan->mt_name->s_data, value); ! 79: fprintf (out, "#else\n"); ! 80: fprintf (out, "#define %s %ldL\n", ! 81: scan->mt_name->s_data, value); ! 82: fprintf (out, "#endif\n"); ! 83: } else { ! 84: #endif ! 85: fprintf (out, state == FIRST ? "enum {\n" : ",\n"); ! 86: fprintf (out, "\t%s = %ld", scan->mt_name->s_data, ! 87: value); ! 88: state = REST; ! 89: #ifndef __COHERENT__ ! 90: } ! 91: #endif ! 92: } ! 93: ! 94: if (state == REST) ! 95: fprintf (out, "\n};\n\n"); ! 96: } ! 97: ! 98: ! 99: /* ! 100: * Write out a C-language header file with definitions for the values of all ! 101: * the tunable parameters in the system. ! 102: */ ! 103: ! 104: #ifdef __USE_PROTO__ ! 105: int (write_conf_h) (CONST char * name) ! 106: #else ! 107: int ! 108: write_conf_h ARGS ((name)) ! 109: CONST char * name; ! 110: #endif ! 111: { ! 112: time_t gentime; ! 113: char timebuf [70]; ! 114: FILE * out; ! 115: ehand_t err; ! 116: ! 117: if (name == NULL) ! 118: out = stdout; ! 119: else if ((out = fopen (name, "w")) == NULL) ! 120: throw_error ("Unable to open output file for writing"); ! 121: ! 122: if (PUSH_HANDLER (err) == 0) { ! 123: time (& gentime); ! 124: ! 125: fprintf (out, "#ifndef\t__SYS_CONF_H__\n"); ! 126: fprintf (out, "#define\t__SYS_CONF_H__\n\n"); ! 127: ! 128: fprintf (out, "/*\n"); ! 129: fprintf (out, " * The code in this file was automatically " ! 130: "generated. Do not hand-modify!\n"); ! 131: ! 132: #ifdef __COHERENT__ ! 133: strncpy (timebuf, asctime (localtime (& gentime)), ! 134: sizeof (timebuf) - 1); ! 135: timebuf [sizeof (timebuf) - 1] = 0; ! 136: #else ! 137: strftime (timebuf, sizeof (timebuf) - 1, "%x %X %Z", ! 138: localtime (& gentime)); ! 139: #endif ! 140: ! 141: fprintf (out, " * Generated at %s\n", timebuf); ! 142: fprintf (out, " */\n\n"); ! 143: ! 144: write_params (out); ! 145: ! 146: fprintf (out, "#endif\t/* ! defined (__SYS_CONF_H__) */\n"); ! 147: ! 148: if (out != stdout) ! 149: fclose (out); ! 150: } else { ! 151: if (out != stdout) ! 152: fclose (out); ! 153: CHAIN_ERROR (err); ! 154: } ! 155: ! 156: POP_HANDLER (err); ! 157: return 0; ! 158: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.