From fdfd744cf78fa245eda5a8833d46df148ddaf1ba Mon Sep 17 00:00:00 2001 From: Bdale Garbee Date: Sat, 24 Oct 2015 19:43:47 -0600 Subject: [PATCH] implement filling of preferred parts data in partslist ouptut files --- bin/fillpartscsv | 37 ++++++++++++++++++++++++++++++++++++ bin/fillpartslist | 35 ++++++++++++++++++++++++++++++++++ pcb.mk | 4 ++-- scheme/gnet-partslistgag.scm | 8 ++++---- 4 files changed, 78 insertions(+), 6 deletions(-) create mode 100644 bin/fillpartscsv create mode 100644 bin/fillpartslist diff --git a/bin/fillpartscsv b/bin/fillpartscsv new file mode 100644 index 0000000..e03e68c --- /dev/null +++ b/bin/fillpartscsv @@ -0,0 +1,37 @@ +# expand csv partslist, replacing unknown fields with data +# from preferred parts list + +# Copyright 2015 by Bdale Garbee , GPL v3 + +BEGIN { + PARTFILE = "../altusmetrum/preferred-parts" + partcount = 0 + while (getline 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 index 0000000..8c31d0e --- /dev/null +++ b/bin/fillpartslist @@ -0,0 +1,35 @@ +# expand tab-separated partslist, replacing unknown fields with data +# from preferred parts list + +# Copyright 2015 by Bdale Garbee , GPL v3 + +BEGIN { + PARTFILE = "../altusmetrum/preferred-parts" + partcount = 0 + while (getline 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 8c6f7e8..fa9940b 100644 --- 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 diff --git a/scheme/gnet-partslistgag.scm b/scheme/gnet-partslistgag.scm index 42b24d6..1980c8a 100644 --- a/scheme/gnet-partslistgag.scm +++ b/scheme/gnet-partslistgag.scm @@ -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)))) @@ -102,13 +102,13 @@ (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 -- 2.47.2