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