16
static int WriteNames(FILE *f) {
20
fprintf(f, "! name data\n");
21
fprintf(f, "$%02d %d\n", IWHREC_TYPE_NAME_SIZE, name_str_cnt);
26
fprintf(f, "$%02d %s\n", IWHREC_TYPE_NAME_DATA, p);
30
fprintf(f, "$%02d %d\n", IWHREC_TYPE_NAME_COUNT, nc);
34
static int WriteVendors(FILE *f) {
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;
46
fprintf(f,"%x ", idx);
47
if (vendors[i].shortname && vendors[i].shortname[0])
48
idx = vendors[i].shortname - name_str;
51
fprintf(f,"%x ", idx);
52
fprintf(f,"%d ", vendors[i].vnr);
53
fprintf(f,"%d\n",vendors[i].refcnt);
58
static int WriteCards(FILE *f) {
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 */
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;
73
fprintf(f,"%x ", idx);
74
if (cards[i].lname && cards[i].lname[0])
75
idx = cards[i].lname - name_str;
78
fprintf(f,"%x ", idx);
79
if (cards[i].Class && cards[i].Class[0])
80
idx = cards[i].Class - name_str;
83
fprintf(f,"%x ", idx);
84
if (cards[i].bus && cards[i].bus[0])
85
idx = cards[i].bus - name_str;
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);
99
for (i=0; i < ce_idx; i++) {
100
fprintf(f,"$%02d %d\n", IWHREC_TYPE_CARD_IDSORTED, isdncard_id[i]);
105
static int WriteVarios(FILE *f) {
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 */
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;
124
fprintf(f,"%x ", idx);
125
if (varios[i].para_str && varios[i].para_str[0])
126
idx = varios[i].para_str - name_str;
129
fprintf(f,"%x ", idx);
130
if (varios[i].mod_preload && varios[i].mod_preload[0])
131
idx = varios[i].mod_preload - name_str;
134
fprintf(f,"%x ", idx);
135
if (varios[i].cfg_prog && varios[i].cfg_prog[0])
136
idx = varios[i].cfg_prog - name_str;
139
fprintf(f,"%x ", idx);
140
if (varios[i].firmware && varios[i].firmware[0])
141
idx = varios[i].firmware - name_str;
144
fprintf(f,"%x ", idx);
145
if (varios[i].description && varios[i].description[0])
146
idx = varios[i].description - name_str;
149
fprintf(f,"%x ", idx);
150
if (varios[i].need_pkg && varios[i].need_pkg[0])
151
idx = varios[i].need_pkg - name_str;
154
fprintf(f,"%x ", idx);
155
if (varios[i].info && varios[i].info[0])
156
idx = varios[i].info - name_str;
159
fprintf(f,"%x ", idx);
160
if (varios[i].protocol && varios[i].protocol[0])
161
idx = varios[i].protocol - name_str;
164
fprintf(f,"%x ", idx);
165
if (varios[i].interface && varios[i].interface[0])
166
idx = varios[i].interface - name_str;
169
fprintf(f,"%x ", idx);
170
if (varios[i].io && varios[i].io[0])
171
idx = varios[i].io - name_str;
174
fprintf(f,"%x ", idx);
175
if (varios[i].irq && varios[i].irq[0])
176
idx = varios[i].irq - name_str;
179
fprintf(f,"%x ", idx);
180
if (varios[i].membase && varios[i].membase[0])
181
idx = varios[i].membase - name_str;
184
fprintf(f,"%x ", idx);
185
if (varios[i].features && varios[i].features[0])
186
idx = varios[i].features - name_str;
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;
195
fprintf(f,"%x\n", idx);
208
if (!(stdin=freopen(CDBISDN_CDB_FILE,"rb", stdin))) {
209
fprintf(stderr, "Cannot open %s as stdin\n", CDBISDN_CDB_FILE);
213
if (!(stdin=freopen(argv[1],"rb", stdin))) {
214
fprintf(stderr, "Cannot open %s as stdin\n", argv[1]);
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]);
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);
231
cards = calloc(max_ce, sizeof(cdb_isdn_card));
233
fprintf(stderr, "cannot alloc card\n");
237
varios = calloc(max_vario, sizeof(cdb_isdn_vario));
239
fprintf(stderr, "cannot alloc vario\n");
244
name_str = calloc(max_name_str_cnt, 1);
246
fprintf(stderr, "cannot alloc name_str\n");
252
vendors = calloc(max_ivendor, sizeof(cdb_isdn_vendor));
254
fprintf(stderr, "cannot alloc vendors\n");
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);
273
strcpy(line,ctime(&tim));
277
fprintf(stdout,"$%02d %s\n", IWHREC_TYPE_DATE, line);
279
WriteVendors(stdout);
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);