Nicht benutzte Packagevarianten eines benutzen Device im Schaltplan werden in der "
"Bibliothek gelöscht
und anschliesend ein UPDATE durchgeführt."
"ACHTUNG: Kopieren Sie evtl. die Bibliothek in einen entsprechenden Ordner, "
"setzen Sie den Pfad unter Optionen - Bibliotheken auf diesen Ordner, da sonst die original Bibliothek "
"entsprechend bearbeitet wird.
"
"Beispiel:
"
"RUN remove-unused-package [Prefix | Bauteilname]"
"
"
"Author: support@cadsoft.de
"
// THIS PROGRAM IS PROVIDED AS IS AND WITHOUT WARRANTY OF ANY KIND, EXPRESSED OR IMPLIED
string Version = "1.0.0"; // 2011-05-25 alf@cadsoft.de
string Removename = filesetext(argv[0], "~remove_unused_pac.lst");
string DeviceName = "";
string DevicePackage = "";
string DevSetList[];
string DevList[];
string PacList[];
string LbrList[];
int Cnt = 0;
string Lines[];
string Use_in;
string Object = strupr(argv[1]); // use in schematic (Device) or board (Element)
int Olen = strlen(Object);
if (!Object) {
dlgMessageBox(usage, "OK");
exit(0);
}
void splitlist(void) {
string s[];
for (int n = 0; Lines[n]; n++) {
strsplit(s, Lines[n], '\t');
LbrList[n] = s[0]; // devicesetlibrary;
DevSetList[n] = s[1]; // devicesetname;
DevList[n] = s[2]; // devicename;
PacList[n] = s[3]; // devicepackagename;
}
return;
}
void addlist(string devicesetlibrary, string devicesetname, string devicename, string devicepackagename, string tech, string ename) {
for (int n = 0; n < Cnt; n++) {
if (LbrList[n] == devicesetlibrary && DevSetList[n] == devicesetname && DevList[n] == devicename && PacList[n] == devicepackagename) {
return;
}
}
LbrList[Cnt] = devicesetlibrary;
DevSetList[Cnt] = devicesetname;
DevList[Cnt] = devicename;
PacList[Cnt] = devicepackagename;
sprintf(Lines[Cnt], "%s\t%s\t%s\t%s", LbrList[Cnt], DevSetList[Cnt], DevList[Cnt], PacList[Cnt]);
Cnt++;
return;
}
if (schematic) {
schematic(SCH) {
SCH.sheets(S) {
S.parts(PA) {
string pname = PA.name;
if (strstr(PA.name, Object) == 0 && isdigit(pname[Olen]) || PA.name == Object) {
addlist(PA.deviceset.library, PA.deviceset.name, PA.device.name, PA.device.package.name, PA.device.technologies, PA.name);
}
}
}
int index[];
sort(Cnt, Lines);
output(Removename, "wtD") for (int n = 0; Lines[n]; n++) printf("%s\n", Lines[n]);
exit("OPEN '" + LbrList[0] + "' ;\n RUN '"+ argv[0] + "' '" + Removename + "' '" + SCH.name + "'");
}
}
else if (library) {
if (argv[1] == Removename) {
int Cnt = fileread(Lines, Removename);
splitlist();
string lname[];
string devsetname[];
string devname[];
string pacname[];
string variant[];
int checkdevset[]; // mark checked deviseset
int usedpac[]; // mark used package variant
library(L) {
int cnt = 0;
int doit = 0;
L.devicesets(DEV) {
DEV.devices(D) {
lname[cnt] = filename(L.name);
devsetname[cnt] = DEV.name;
devname[cnt] = D.name;
pacname[cnt] = D.package.name;
cnt++;
}
}
// check used package variants
for (int n = 0; Lines[n]; n++) {
for (int n1 = 0; n1 < cnt; n1++) {
if (filename(LbrList[n]) == filesetext(lname[n1], "")) {
if ( DevSetList[n] == devsetname[n1]) {
checkdevset[n1] = 1; // mark checked
if (PacList[n] == pacname[n1] ) { // wenn die Packagevariante benutzt ist, wird sie markiert
usedpac[n1] = 1;
//break;
}
}
}
}
}
for (int u = 0; u < cnt; u++) {
if (checkdevset[u]) {
if (usedpac[u]) {
// package is used
sprintf(variant[u], "# %s %s PAC %s %s ; used in sch.", lname[u], devsetname[u], devname[u], pacname[u]); // Kommentar benutzte Variante.
}
else {
sprintf(variant[u], "EDIT %s.DEV; PAC -%s # %s;", devsetname[u], devname[u], pacname[u]); // Delete unbenutzte Variante.
}
}
else {
sprintf(variant[u], "# %s nicht im SCH %s %s %s", lname[u], devsetname[u], devname[u], pacname[u]); // nicht benutztes Device im SCH
}
}
string fscript = filesetext(L.name, "~del-variants.scr");
output(fscript, "wtD") {
for (int n = 0; n < cnt; n++) {
printf("SET CONFIRM YES;\n");
printf("%s\n", variant[n]);
printf("SET CONFIRM OFF;\n");
}
printf("WRITE;\nEDIT '%s';\n UPDATE '%s';\n", argv[2], L.name);
}
exit("SCRIPT '" + fscript + "'");
}
}
}
dlgMessageBox("!Start this ULP in a schematic.", "OK");
exit(0);