~ubuntu-branches/ubuntu/edgy/hwinfo/edgy

« back to all changes in this revision

Viewing changes to src/isdn/cdb/mk_isdnhwdb.c

  • Committer: Bazaar Package Importer
  • Author(s): James Vega
  • Date: 2006-09-28 20:56:06 UTC
  • mfrom: (1.1.4 upstream)
  • Revision ID: james.westby@ubuntu.com-20060928205606-bgxl69hts04xbx51
Tags: 13.4-1
* New upstream version.
* Switch from dbs to quilt
  - Revamp debian/rules
  - Add quilt and remove dbs from Build-Depends in debian/control
* Remove reference to hwscan(8) from manpage. (closes: #388245)
* Re-wrote manpage from scratch.  Drop docbook-to-man from Build-Depends.
* Remove NEWS.Debian since it is no longer applicable.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#include <stdio.h>
 
2
#include <stdlib.h>
 
3
#include <malloc.h>
 
4
#include <string.h>
 
5
#include <time.h>
 
6
#include "lex.yy.c"
 
7
#include "hd.h"
 
8
#include "cdb_read.h"
 
9
#include "cdb_hwdb.h"
 
10
 
 
11
 
 
12
int yywrap(void) {
 
13
        return(1);
 
14
}
 
15
 
 
16
static int WriteNames(FILE *f) {
 
17
        char    *p, *e;
 
18
        int     l, nc=0;
 
19
 
 
20
        fprintf(f, "! name data\n");
 
21
        fprintf(f, "$%02d %d\n", IWHREC_TYPE_NAME_SIZE, name_str_cnt);
 
22
        p = e = name_str;
 
23
        e += name_str_cnt;
 
24
        while (p < e) {
 
25
                l = strlen(p);
 
26
                fprintf(f, "$%02d %s\n", IWHREC_TYPE_NAME_DATA, p);
 
27
                p += l + 1;
 
28
                nc++;
 
29
        }
 
30
        fprintf(f, "$%02d %d\n", IWHREC_TYPE_NAME_COUNT, nc);
 
31
        return(0);
 
32
}
 
33
 
 
34
static int WriteVendors(FILE *f) {
 
35
        int i, nullidx, idx;
 
36
 
 
37
        fprintf(f, "! vendor database\n");
 
38
        fprintf(f, "$%02d %d\n", IWHREC_TYPE_VENDOR_COUNT, ivendor_idx);
 
39
        nullidx = strlen(name_str); /* first 0 in string array */
 
40
        for (i=0; i < ivendor_idx; i++) {
 
41
                fprintf(f,"$%02d ", IWHREC_TYPE_VENDOR_RECORD);
 
42
                if (vendors[i].name && vendors[i].name[0])
 
43
                        idx = vendors[i].name - name_str;
 
44
                else
 
45
                        idx = nullidx;
 
46
                fprintf(f,"%x ", idx);
 
47
                if (vendors[i].shortname && vendors[i].shortname[0])
 
48
                        idx = vendors[i].shortname - name_str;
 
49
                else
 
50
                        idx = nullidx;
 
51
                fprintf(f,"%x ", idx);
 
52
                fprintf(f,"%d ", vendors[i].vnr);
 
53
                fprintf(f,"%d\n",vendors[i].refcnt);
 
54
        }
 
55
        return(0);
 
56
}
 
57
 
 
58
static int WriteCards(FILE *f) {
 
59
        int i, nullidx, idx;
 
60
 
 
61
        fprintf(f, "! card database\n");
 
62
        fprintf(f, "$%02d %d\n", IWHREC_TYPE_CARD_COUNT, ce_idx);
 
63
        nullidx = strlen(name_str); /* first 0 in string array */
 
64
 
 
65
        for (i=0; i <= ce_idx; i++) {
 
66
                fprintf(f,"$%02d ", IWHREC_TYPE_CARD_RECORD);
 
67
                fprintf(f,"%d ",cards[i].handle);
 
68
                fprintf(f,"%d ",cards[i].vhandle);
 
69
                if (cards[i].name && cards[i].name[0])
 
70
                        idx = cards[i].name - name_str;
 
71
                else
 
72
                        idx = nullidx;
 
73
                fprintf(f,"%x ", idx);
 
74
                if (cards[i].lname && cards[i].lname[0])
 
75
                        idx = cards[i].lname - name_str;
 
76
                else
 
77
                        idx = nullidx;
 
78
                fprintf(f,"%x ", idx);
 
79
                if (cards[i].Class && cards[i].Class[0])
 
80
                        idx = cards[i].Class - name_str;
 
81
                else
 
82
                        idx = nullidx;
 
83
                fprintf(f,"%x ", idx);
 
84
                if (cards[i].bus && cards[i].bus[0])
 
85
                        idx = cards[i].bus - name_str;
 
86
                else
 
87
                        idx = nullidx;
 
88
                fprintf(f,"%x ", idx);
 
89
                fprintf(f,"%d ",cards[i].revision);
 
90
                fprintf(f,"%d ",cards[i].vendor);
 
91
                fprintf(f,"%d ",cards[i].device);
 
92
                fprintf(f,"%d ",cards[i].subvendor);
 
93
                fprintf(f,"%d ",cards[i].subdevice);
 
94
                fprintf(f,"%d ",cards[i].features);
 
95
                fprintf(f,"%d ",cards[i].line_cnt);
 
96
                fprintf(f,"%d ",cards[i].vario_cnt);
 
97
                fprintf(f,"%d\n",cards[i].vario);
 
98
        }
 
99
        for (i=0; i < ce_idx; i++) {
 
100
                fprintf(f,"$%02d %d\n", IWHREC_TYPE_CARD_IDSORTED, isdncard_id[i]);
 
101
        }
 
102
        return(0);
 
103
}
 
104
 
 
105
static int WriteVarios(FILE *f) {
 
106
        int i, nullidx, idx;
 
107
 
 
108
        fprintf(f, "! driver database\n");
 
109
        fprintf(f, "$%02d %d\n", IWHREC_TYPE_VARIO_COUNT, vario_idx);
 
110
        nullidx = strlen(name_str); /* first 0 in string array */
 
111
 
 
112
        for (i=0; i <= vario_idx; i++) {
 
113
                fprintf(f,"$%02d ", IWHREC_TYPE_VARIO_RECORD);
 
114
                fprintf(f,"%d ",varios[i].handle);
 
115
                fprintf(f,"%d ",varios[i].next_vario);
 
116
                fprintf(f,"%d ",varios[i].drvid);
 
117
                fprintf(f,"%d ",varios[i].typ);
 
118
                fprintf(f,"%d ",varios[i].subtyp);
 
119
                fprintf(f,"%d ",varios[i].smp);
 
120
                if (varios[i].mod_name && varios[i].mod_name[0])
 
121
                        idx = varios[i].mod_name - name_str;
 
122
                else
 
123
                        idx = nullidx;
 
124
                fprintf(f,"%x ", idx);
 
125
                if (varios[i].para_str && varios[i].para_str[0])
 
126
                        idx = varios[i].para_str - name_str;
 
127
                else
 
128
                        idx = nullidx;
 
129
                fprintf(f,"%x ", idx);
 
130
                if (varios[i].mod_preload && varios[i].mod_preload[0])
 
131
                        idx = varios[i].mod_preload - name_str;
 
132
                else
 
133
                        idx = nullidx;
 
134
                fprintf(f,"%x ", idx);
 
135
                if (varios[i].cfg_prog && varios[i].cfg_prog[0])
 
136
                        idx = varios[i].cfg_prog - name_str;
 
137
                else
 
138
                        idx = nullidx;
 
139
                fprintf(f,"%x ", idx);
 
140
                if (varios[i].firmware && varios[i].firmware[0])
 
141
                        idx = varios[i].firmware - name_str;
 
142
                else
 
143
                        idx = nullidx;
 
144
                fprintf(f,"%x ", idx);
 
145
                if (varios[i].description && varios[i].description[0])
 
146
                        idx = varios[i].description - name_str;
 
147
                else
 
148
                        idx = nullidx;
 
149
                fprintf(f,"%x ", idx);
 
150
                if (varios[i].need_pkg && varios[i].need_pkg[0])
 
151
                        idx = varios[i].need_pkg - name_str;
 
152
                else
 
153
                        idx = nullidx;
 
154
                fprintf(f,"%x ", idx);
 
155
                if (varios[i].info && varios[i].info[0])
 
156
                        idx = varios[i].info - name_str;
 
157
                else
 
158
                        idx = nullidx;
 
159
                fprintf(f,"%x ", idx);
 
160
                if (varios[i].protocol && varios[i].protocol[0])
 
161
                        idx = varios[i].protocol - name_str;
 
162
                else
 
163
                        idx = nullidx;
 
164
                fprintf(f,"%x ", idx);
 
165
                if (varios[i].interface && varios[i].interface[0])
 
166
                        idx = varios[i].interface - name_str;
 
167
                else
 
168
                        idx = nullidx;
 
169
                fprintf(f,"%x ", idx);
 
170
                if (varios[i].io && varios[i].io[0])
 
171
                        idx = varios[i].io - name_str;
 
172
                else
 
173
                        idx = nullidx;
 
174
                fprintf(f,"%x ", idx);
 
175
                if (varios[i].irq && varios[i].irq[0])
 
176
                        idx = varios[i].irq - name_str;
 
177
                else
 
178
                        idx = nullidx;
 
179
                fprintf(f,"%x ", idx);
 
180
                if (varios[i].membase && varios[i].membase[0])
 
181
                        idx = varios[i].membase - name_str;
 
182
                else
 
183
                        idx = nullidx;
 
184
                fprintf(f,"%x ", idx);
 
185
                if (varios[i].features && varios[i].features[0])
 
186
                        idx = varios[i].features - name_str;
 
187
                else
 
188
                        idx = nullidx;
 
189
                fprintf(f,"%x ", idx);
 
190
                fprintf(f,"%d ",varios[i].card_ref);
 
191
                if (varios[i].name && varios[i].name[0])
 
192
                        idx = varios[i].name - name_str;
 
193
                else
 
194
                        idx = nullidx;
 
195
                fprintf(f,"%x\n", idx);
 
196
        }
 
197
        return(0);
 
198
}
 
199
 
 
200
int main(argc,argv)
 
201
int argc;
 
202
char **argv;
 
203
{
 
204
        char    line[256];
 
205
        int     l;
 
206
        time_t  tim;
 
207
        if (argc<2) {
 
208
                if (!(stdin=freopen(CDBISDN_CDB_FILE,"rb", stdin))) {
 
209
                        fprintf(stderr, "Cannot open %s as stdin\n", CDBISDN_CDB_FILE);
 
210
                        exit(2);
 
211
                }
 
212
        } else {
 
213
                if (!(stdin=freopen(argv[1],"rb", stdin))) {
 
214
                        fprintf(stderr, "Cannot open %s as stdin\n", argv[1]);
 
215
                        exit(2);
 
216
                }
 
217
        }
 
218
        if (argc >2) {
 
219
                if (strcmp(argv[2], "-")) { /* - := stdout */
 
220
                        if (!(stdout=freopen(argv[2],"w", stdout))) {
 
221
                                fprintf(stderr, "Cannot open %s as stdout\n", argv[2]);
 
222
                                exit(3);
 
223
                        }
 
224
                }
 
225
        } else { /* default: CDBISDN_HWDB_FILE */
 
226
                if (!(stdout=freopen(CDBISDN_HWDB_FILE,"w", stdout))) {
 
227
                        fprintf(stderr, "Cannot open %s as stdout\n", CDBISDN_HWDB_FILE);
 
228
                        exit(3);
 
229
                }
 
230
        }
 
231
        cards = calloc(max_ce, sizeof(cdb_isdn_card));
 
232
        if (!cards) {
 
233
                fprintf(stderr, "cannot alloc card\n");
 
234
                fclose(stdin);
 
235
                exit(4);
 
236
        }
 
237
        varios = calloc(max_vario, sizeof(cdb_isdn_vario));
 
238
        if (!varios) {
 
239
                fprintf(stderr, "cannot alloc vario\n");
 
240
                fclose(stdin);
 
241
                free(cards);
 
242
                exit(5);
 
243
        }
 
244
        name_str = calloc(max_name_str_cnt, 1);
 
245
        if (!name_str) {
 
246
                fprintf(stderr, "cannot alloc name_str\n");
 
247
                fclose(stdin);
 
248
                free(cards);
 
249
                free(varios);
 
250
                exit(6);
 
251
        }
 
252
        vendors = calloc(max_ivendor, sizeof(cdb_isdn_vendor));
 
253
        if (!vendors) {
 
254
                fprintf(stderr, "cannot alloc vendors\n");
 
255
                fclose(stdin);
 
256
                free(cards);
 
257
                free(varios);
 
258
                free(name_str);
 
259
                exit(7);
 
260
        }
 
261
        BEGIN Main;
 
262
        yylex();
 
263
 
 
264
        SortVendors();
 
265
        SortCards();
 
266
        SortVarios();
 
267
        
 
268
        fprintf(stdout, "! CDBISDN database version %x\n", CDB_DATAVERSION + 1);
 
269
        fprintf(stdout, "! file is build with mk_isdnhwdb\n");
 
270
        fprintf(stdout, "! Do not change this file !!!\n");
 
271
        fprintf(stdout,"$%02d %d\n", IWHREC_TYPE_VERSION, CDB_DATAVERSION + 1);
 
272
        time(&tim);
 
273
        strcpy(line,ctime(&tim));
 
274
        l = strlen(line);
 
275
        if (l)
 
276
                line[l-1] = 0;
 
277
        fprintf(stdout,"$%02d %s\n", IWHREC_TYPE_DATE, line);
 
278
        WriteNames(stdout);
 
279
        WriteVendors(stdout);
 
280
        WriteCards(stdout);
 
281
        WriteVarios(stdout);
 
282
 
 
283
        fclose(stdin);
 
284
        free(cards);
 
285
        free(name_str);
 
286
        free(vendors);
 
287
        free(varios);
 
288
        fprintf(stderr, "used cards(%d/%d)\n", ce_idx, max_ce);
 
289
        fprintf(stderr, "used varios(%d/%d)\n", vario_idx, max_vario);
 
290
        fprintf(stderr, "used vendors(%d/%d)\n", ivendor_idx, max_ivendor);
 
291
        fprintf(stderr, "used name_str(%d/%d)\n",name_str_cnt,  max_name_str_cnt);
 
292
        return(0);
 
293
}