X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=bin%2Fpartslist-vendor;h=423796eb74ac7660b4a453fcbc7ca8bd9aeadac5;hb=7b3be4d5615ab665bb5cccff4ff066a74abc9750;hp=5c451de182544bff78353877ed3cc6d9c8a7196e;hpb=53b1624aff365a992085766e460dadcd049b7b62;p=hw%2Faltusmetrum diff --git a/bin/partslist-vendor b/bin/partslist-vendor index 5c451de..423796e 100755 --- a/bin/partslist-vendor +++ b/bin/partslist-vendor @@ -26,7 +26,11 @@ string[*] read_line(file f) { lineno++; string line = fgets(f); - return String::parse_csv(line); + string[*] elts = String::parse_csv(line); + for (int i = 0; i < dim(elts); i++) + if (String::length(elts[i]) > 0 && elts[i][0] == '"') + elts[i] = String::dequote(elts[i]); + return elts; } string[*] header; @@ -39,6 +43,7 @@ string[*] required_elements = { "device", "value", "refdes", + "loadstatus" }; bool has_header_member(string member) { @@ -87,19 +92,73 @@ string part_number(string[string] entry) return entry["vendor_part_number"]; } +string quoted(string v) +{ + if (String::index(v, "\"") >= 0 || String::index(v, ",") >= 0) { + if (String::index(v, "\"") >= 0) { + string ret = "\""; + for (int i = 0; i < String::length(v); i++) { + if (v[i] == '"') + ret = ret + "\""; + ret = ret + String::new(v[i]); + } + ret = ret + "\""; + return ret; + } else { + return "\"" + v + "\""; + } + } else { + return v; + } +} + void process_seeed(string[string] entry) { + if (entry["loadstatus"] == "noload") + return; + + static bool start = true; + if (start) { + printf("Part/Designator,Manufacturer Part Number/Seeed SKU, Quantity\n"); + start = false; + } - if (entry["loadstatus"] != "smt") + string[*] refdes = String::wordsplit(entry["refdes"], " \t"); + if (dim(refdes) > 1) + printf ("\""); + for (int i = 0; i < dim(refdes); i++) { + printf("%s", refdes[i]); + if (i < dim(refdes) - 1) + printf (","); + } + if (dim(refdes) > 1) + printf ("\""); + printf(",%s,%s\n", quoted(entry["mfg_part_number"]), entry["quantity"]); +} + +void process_goldphoenix(string[string] entry) +{ + int units = 1000; + + if (entry["loadstatus"] == "noload") return; + static int item = 1; static bool start = true; if (start) { - printf("Part/Designator,Manufacturer Part Number/Seeed SKU, Quantity"); + printf("#Item,Description,Designator,Package,Manufacturer,Manufacturer Part Number#,Supplier,Supplier Part #,QTY/BOARD,Order QTY,Unit Price, Subtotal \n"); start = false; } string[*] refdes = String::wordsplit(entry["refdes"], " \t"); + printf("%d,", item); + + /* description */ + printf("%s %s,", + quoted(entry["device"]), + quoted(entry["value"])); + + /* designators */ if (dim(refdes) > 1) printf ("\""); for (int i = 0; i < dim(refdes); i++) { @@ -109,24 +168,57 @@ void process_seeed(string[string] entry) } if (dim(refdes) > 1) printf ("\""); - printf(",%s,%s\n", entry["mfg_part_number"], entry["quantity"]); + + /* rest */ + printf(",%s,%s,%s,%s,%s,%s,%d\n", + quoted(entry["footprint"]), + quoted(entry["mfg"]), + quoted(entry["mfg_part_number"]), + quoted(entry["vendor"]), + quoted(entry["vendor_part_number"]), + entry["quantity"], + dim(refdes) * units); + item++; } void process_digikey(string[string] entry) { + if (entry["loadstatus"] == "noload") + return; printf("%s,%s,%s %s\n", entry["quantity"], - part_number(entry), - entry["device"], - entry["value"]); + quoted(part_number(entry)), + quoted(entry["device"]), + quoted(entry["value"])); +} + +void process_mouser(string[string] entry) +{ + if (entry["loadstatus"] == "noload") + return; +/* printf("%s|%s\n", part_number(entry), entry["quantity"]); */ + + static bool start = true; + + if (start) { + printf("Mouser Part Number,Manufacturer Part Number,Quantity\n"); + start = false; + } + + printf("%s,%s,%s\n", + quoted(entry["vendor_part_number"]), + quoted(entry["mfg_part_number"]), + entry["quantity"]); } void process_other(string[string] entry) { + if (entry["loadstatus"] == "noload") + return; printf("%s,%s,%s,%s %s\n", entry["vendor"], entry["quantity"], - part_number(entry), - entry["device"], + quoted(part_number(entry)), + quoted(entry["device"]), entry["value"]); } @@ -137,12 +229,17 @@ void process_file(file f) { string vendor = entry["vendor"]; if (!is_uninit(&vendors) && has_vendor(vendors, "seeed")) { process_seeed(entry); + } else if (!is_uninit(&vendors) && has_vendor(vendors, "goldphoenix")) { + process_goldphoenix(entry); } else if ((!is_uninit(&vendors) && has_vendor(vendors, vendor)) || (!is_uninit(¬_vendors) && !has_vendor(not_vendors, vendor))) { switch (entry["vendor"]) { case "digikey": process_digikey(entry); break; + case "mouser": + process_mouser(entry); + break; default: process_other(entry); break;