Initial import
[project/ufp.git] / scripts / convert-devices.uc
1 #!/usr/bin/env ucode
2 'use strict';
3 import { readfile, basename } from "fs";
4 let uht = require("uht");
5
6 let signatures = {};
7
8 function parse_category(str) {
9 let items = split(str, "|");
10 let data = {};
11 for (let item in items) {
12 item = split(item, "=", 2);
13 if (item[1] == "%")
14 data["%val"] = item[0];
15 else
16 data[item[0]] = item[1];
17 }
18
19 return data;
20 }
21
22 function get_device(meta, name)
23 {
24 let dev = {};
25
26 dev[meta["%val"] ?? "device"] = name;
27 for (let type in meta) {
28 if (substr(type, 0, 1) == "%")
29 continue;
30
31 dev[type] = meta[type];
32 }
33
34 return dev;
35 }
36
37 let out = shift(ARGV);
38 if (!out) {
39 warn(`Syntax: ${basename(sourcepath())} <output> <jsonfile> [<jsonfile> ...]\n`);
40 exit(1);
41 }
42
43 for (let file in ARGV) {
44 let data = json(readfile(file));
45 for (let category_str in data) {
46 let category = parse_category(category_str);
47 let devices = data[category_str];
48 for (let dev in devices) {
49 for (let sig in devices[dev]) {
50 signatures[sig] ??= [];
51 push(signatures[sig], get_device(category, dev));
52 }
53 }
54 }
55 }
56
57 uht.mark_hashtable(signatures);
58 uht.save(out, signatures);