#usage "List of components that no longer have a valid library component listed.

" "Author: alf@cadsoft.de" string Version = "1.0.0"; // 2011-04-14 alf@cadsoft.de string LbrName[]; int Lcnt = 0; string MissLbr[]; int Mcnt = 0; string NoExist[]; int Ln = 0; do { string l[]; int cnt = fileglob(l, path_lbr[Ln]+"/*.lbr"); Ln++; if (cnt) { for (int n = 0; n < cnt; n++) { LbrName[Lcnt] = filename(l[n]); Lcnt++; } } } while (path_lbr[Ln]); void test(void) { int sel = -1; int srt = 0; dlgDialog("test") { dlgHBoxLayout dlgSpacing(400); dlgHBoxLayout { dlgVBoxLayout dlgSpacing(400); dlgListView("Librarys", LbrName, sel, srt); } dlgHBoxLayout { dlgStretch(1); dlgPushButton("+OK") dlgAccept(); dlgStretch(1); } }; return; } void showmiss(string header, string Listheader) { for (int n = 0; n < Mcnt; n++) { MissLbr[n] += "\t" + NoExist[n]; } int sl = -1; int sel = -1; dlgDialog(header) { dlgHBoxLayout dlgSpacing(400); dlgListView("LBRs searched in ", path_lbr, sl); dlgHBoxLayout { dlgVBoxLayout dlgSpacing(400); dlgListView(Listheader, MissLbr, sel); } dlgLabel("Note: This ULP works case sensitive!"); dlgHBoxLayout { dlgStretch(1); dlgPushButton("+OK") dlgAccept(); dlgStretch(1); } }; return; } int checklibary(string name) { int n; for (n = 0; n < Lcnt; n++) { if (name == LbrName[n]) return -1; // LBR in lirary list. } for (n = 0 ; n < Mcnt; n++) { if (MissLbr[n] == name) return n; // LBR in missing LBR list. } MissLbr[Mcnt] = name; // add to missing LBR list. Mcnt++; return Mcnt -1; } if (schematic) { schematic(SCH) { SCH.parts(P) { int no = checklibary(P.deviceset.library); if (no >= 0) NoExist[no] += P.name + " "; } } if (Mcnt) showmiss("Missing LBRs for used parts in Schematic", "Used libraries not found\tParts"); exit(0); } else if (board) { board(B) { B.elements(E) { int no = checklibary(E.package.library); if (no >= 0) NoExist[no] += E.name + " "; } } if (Mcnt) showmiss("Missing LBRs for used elements in Board", "Used libraries not found\tElements"); exit(0); } dlgMessageBox("Start this ULP in a SCH or BRD!", "OK");