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
);