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