implement filling of preferred parts data in partslist ouptut files
authorBdale Garbee <bdale@gag.com>
Sun, 25 Oct 2015 01:43:47 +0000 (19:43 -0600)
committerBdale Garbee <bdale@gag.com>
Sun, 25 Oct 2015 01:43:47 +0000 (19:43 -0600)
bin/fillpartscsv [new file with mode: 0644]
bin/fillpartslist [new file with mode: 0644]
pcb.mk
scheme/gnet-partslistgag.scm

diff --git a/bin/fillpartscsv b/bin/fillpartscsv
new file mode 100644 (file)
index 0000000..e03e68c
--- /dev/null
@@ -0,0 +1,37 @@
+# expand csv partslist, replacing unknown fields with data
+# from preferred parts list
+
+# Copyright 2015 by Bdale Garbee <bdale@gag.com>, GPL v3
+
+BEGIN { 
+       PARTFILE = "../altusmetrum/preferred-parts"
+       partcount = 0
+       while (getline <PARTFILE > 0) {
+               partcount++
+               parts[$1, $2, $3] = $0
+       }
+}
+
+{
+       FS = ","
+       split(parts[$1,$2,$3],field,"\t")
+
+       printf "%s,%s,%s", $1, $2, $3
+
+       if ( $4 == "unknown") printf ",%s", field[4]
+       else printf ",%s", $4
+
+       if ( $5 == "unknown") printf ",%s", field[5]
+       else printf ",%s", $5
+
+       if ( $6 == "unknown") printf ",%s", field[6]
+       else printf ",%s", $6
+
+       if ( $7 == "unknown") printf ",%s", field[7]
+       else printf ",%s", $7
+
+       if ( $8 == "unknown") printf ",%s", field[8]
+       else printf ",%s", $8
+
+       printf ",%s,%s\n", $9, $10
+}
diff --git a/bin/fillpartslist b/bin/fillpartslist
new file mode 100644 (file)
index 0000000..8c31d0e
--- /dev/null
@@ -0,0 +1,35 @@
+# expand tab-separated partslist, replacing unknown fields with data
+# from preferred parts list
+
+# Copyright 2015 by Bdale Garbee <bdale@gag.com>, GPL v3 
+
+BEGIN { 
+       PARTFILE = "../altusmetrum/preferred-parts"
+       partcount = 0
+       while (getline <PARTFILE > 0) {
+               partcount++
+               parts[$1, $2, $3] = $0
+       }
+}
+
+{
+       printf "%s\t%s\t%s\t%s", $1, $2, $3, $4
+       split(parts[$2,$3,$4],field,"\t")
+
+       if ( $5 == "unknown") printf "\t%s", field[4]
+       else printf "\t%s", $5
+
+       if ( $6 == "unknown") printf "\t%s", field[5]
+       else printf "\t%s", $6
+
+       if ( $7 == "unknown") printf "\t%s", field[6]
+       else printf "\t%s", $7
+
+       if ( $8 == "unknown") printf "\t%s", field[7]
+       else printf "\t%s", $8
+
+       if ( $9 == "unknown") printf "\t%s", field[8]
+       else printf "\t%s", $9
+
+       printf "\n"
+}
diff --git a/pcb.mk b/pcb.mk
index 8c6f7e82f898d9c92b45d0a1ae9fec4fcbc0a971..fa9940ba07243852a5142fd9f3b9a60f01480091 100644 (file)
--- a/pcb.mk
+++ b/pcb.mk
@@ -21,12 +21,12 @@ drc:        $(PROJECT).sch Makefile
 partslist:     $(PROJECT).sch Makefile
        gnetlist -g bom -o $(PROJECT).unsorted $(SCHEMATICS)
        head -n1 $(PROJECT).unsorted > partslist
-       tail -n+2 $(PROJECT).unsorted | sort >> partslist
+       tail -n+2 $(PROJECT).unsorted | sort | awk -f ../altusmetrum/bin/fillpartslist >> partslist
        rm -f $(PROJECT).unsorted
 
 partslist.csv: $(SCHEMATICS) Makefile
        gnetlist -L $(SCHEME) -g partslistgag -o $(PROJECT).csvtmp $(SCHEMATICS)
-       (head -n1 $(PROJECT).csvtmp; tail -n+2 $(PROJECT).csvtmp | sort -t \, -k 8) > $@ && rm -f $(PROJECT).csvtmp
+       (head -n1 $(PROJECT).csvtmp; tail -n+2 $(PROJECT).csvtmp | sort -t \, -k 8) | awk -f ../altusmetrum/bin/fillpartscsv > $@ && rm -f $(PROJECT).csvtmp
 
 
 partslist.dk: $(SCHEMATICS) Makefile $(SCHEME)/gnet-partslist-bom.scm
index 42b24d65b2a9b9e841e5d7e4de496e06284603fa..1980c8a9a710d00eb2f424ed9dc659c535d647a8 100644 (file)
@@ -57,7 +57,7 @@
 (define (write-one-row ls separator end-char port)
   (if (null? ls)
       '()
-      (begin (display "\"" port)
+      (begin (display "" port)
             (display (car ls) port)
             (for-each (lambda (st) (display separator port)(display st port)) (cdr ls))
             (display end-char port))))
 
 (define partslistgag:write-top-header
   (lambda (port)
-    (display "\"device\",\"value\",\"footprint\",\"loadstatus\",\"provided\",\"mfg_part_number\",\"vendor\",\"vendor_part_number\",\"quantity\",\"refdes\"\n" port)))
+    (display "device,value,footprint,loadstatus,provided,mfg_part_number,vendor,vendor_part_number,quantity,refdes\n" port)))
 
 (define (partslistgag:write-partslist ls port)
   (if (null? ls)
       '()
-      (begin (write-one-row (cdar ls) "\",\"" "\"," port)
-            (write-one-row (caar ls) " " "\"\n" port)
+      (begin (write-one-row (cdar ls) "," "," port)
+            (write-one-row (caar ls) " " "\n" port)
             (partslistgag:write-partslist (cdr ls) port))))
 
 (define partslistgag:write-bottom-footer