/*--------------------------------------------------------------------------*/ /* */ /* File : PROINF10.ULP */ /* Version : 1.0 */ /* Date : 06/29/99 */ /* Last update : none */ /* Author : Torsten Klimmer (theklimmers@gmx.de) */ /* Description : This EAGLE user Language Language Program can be called */ /* from a board or a library. It prints a text file named */ /* .pin or .pin which contains */ /* basic information on pads, vias, holes, packages */ /* and signals. The text file can be read by XPadGUI.exe */ /* for property conversion. */ /* */ /*--------------------------------------------------------------------------*/ // Declaration of variables int paddia[], paddri[], padsha[], viadia[], viadri[], viasha[], holedri[]; string name[]; int paddiacount, paddricount, padshacount, viadiacount, viadricount; int viashacount, holedricount, namecount; int padcount, smdcount, holecount, viacount, elemcount, signcount, col; enum {plen = 58}; // Maximum number of characters // printed in a line // Declaration of functions void paddialist (int object) // List of different pad diameters { for (int n=0; n "); // Change to next line for (int n=0; n=plen) { // If more than plen characters printf("\n -> "); // in a line change to next line col=20; // Offset columns } printf("%s ", name[n]); // Print package name } printf("\n"); // Skip line namecount = 0; // Reset number of names } string getpadshape (int shape) // Return pad shape as string { switch (shape) { case PAD_SHAPE_SQUARE : return "square"; break; case PAD_SHAPE_ROUND : return "round"; break; case PAD_SHAPE_OCTAGON : return "octagon"; break; case PAD_SHAPE_XLONGOCT: return "XLongOct"; break; case PAD_SHAPE_YLONGOCT: return "YLongOct"; break; default: return "unknown"; break; } } string getviashape (int shape) // Return via shape as string { switch (shape) { case VIA_SHAPE_SQUARE : return "square"; break; case VIA_SHAPE_ROUND : return "round"; break; case VIA_SHAPE_OCTAGON : return "octagon"; break; default: return "unknown"; break; } } // Main program // Board properties if (board) board (B) { // Check if board loaded output(filesetext(B.name, ".pin")) { // Set output file B.elements(E) { // Loop member E.package.contacts(C) { // Loop member if (C.pad) { paddialist (C.pad.diameter); // Check pads paddrilist (C.pad.drill); padshalist (C.pad.shape); padcount++; // Count pads } if (C.smd) smdcount++; // Count SMDs } E.package.holes(H) { // Loop member holedrilist (H.drill); // Check holes holecount++; // Count holes } elemcount++; // Count elements } B.holes(H) { // Loop member holedrilist (H.drill); // Check holes holecount++; // Count holes } B.signals(S) { // Loop member S.vias(V) { // Loop member viadialist (V.diameter); // Check vias viadrilist (V.drill); viashalist (V.shape); viacount++; // Count vias } signcount++; // Count signals } sort (paddiacount, paddia); // Sort lists sort (paddricount, paddri); sort (padshacount, padsha); sort (viadiacount, viadia); sort (viadricount, viadri); sort (viashacount, viasha); sort (holedricount, holedri); // Print header printf("Board information on %s\n\n", B.name); printf("File: %s\n", filesetext(B.name, ".pin")); printf("Created from BRDINF10.ulp on %s\n\n", t2string(time())); // Print pad information printf("\n[Pads]\n"); printf("Total number : %d\n", padcount); if (padcount) { printf("Occuring diameters: "); for (int n=0; n0) printf(" "); printf("%f in (%f mm)", u2inch(paddia[n]), u2mm(paddia[n])); B.elements(E) { // Print package names E.package.contacts (C) { if (C.pad && (C.pad.diameter == paddia[n])) namelist(E.package.name); } } printnames(); } printf("Occuring drills : "); for (n=0; n0) printf(" "); printf("%f in (%f mm)", u2inch(paddri[n]), u2mm(paddri[n])); B.elements(E) { // Print package names E.package.contacts (C) { if (C.pad && (C.pad.drill == paddri[n])) namelist(E.package.name); } } printnames(); } printf("Occuring shapes : "); for (n=0; n0) printf(" "); printf("%s", getpadshape(padsha[n])); B.elements(E) { // Print package names E.package.contacts (C) { if (C.pad && (C.pad.shape == padsha[n])) namelist(E.package.name); } } printnames(); } } // Print SMD information printf("\n[SMDs]\n"); printf("Total number : %d\n", smdcount); // Print via information printf("\n[Vias]\n"); printf("Total number : %d\n", viacount); if (viacount) { printf("Occuring diameters: "); for (int n=0; n0) printf(" "); printf("%f in (%f mm)\n", u2inch(viadia[n]), u2mm(viadia[n])); } printf("Occuring drills : "); for (n=0; n0) printf(" "); printf("%f in (%f mm)\n", u2inch(viadri[n]), u2mm(viadri[n])); } printf("Occuring shapes : "); for (n=0; n0) printf(" "); printf("%s\n", getviashape(viasha[n])); } } // Print hole information printf("\n[Holes]\n"); printf("Total number : %d\n", holecount); if (holecount) { printf("Occuring drills : "); for (int n=0; n0) printf(" "); printf("%f in (%f mm)\n", u2inch(holedri[n]), u2mm(holedri[n])); } } // Print element information printf("\n[Elements]\n"); printf("Total number : %d\n", elemcount); // Print signal information printf("\n[Signals]\n"); printf("Total number : %d\n\n", signcount); } } // Library properties if (library) library (L) { // Check if library loaded output(filesetext(L.name, ".pin")) { // Set output file L.packages(P) { P.contacts(C) { // Loop member if (C.pad) { paddialist (C.pad.diameter); // Check pads paddrilist (C.pad.drill); padshalist (C.pad.shape); padcount++; // Count pads } if (C.smd) smdcount++; // Count SMDs } P.holes(H) { // Loop member holedrilist (H.drill); // Check holes holecount++; // Count holes } elemcount++; // Count elements } sort (paddiacount, paddia); // Sort lists sort (paddricount, paddri); sort (padshacount, padsha); sort (holedricount, holedri); // Print header printf("Board information on %s\n\n", L.name); printf("File: %s\n", filesetext(L.name, ".pin")); printf("Created from BRDINF10.ulp on %s\n\n", t2string(time())); // Print pad information printf("\n[Pads]\n"); printf("Total number : %d\n", padcount); if (padcount) { printf("Occuring diameters: "); for (int n=0; n0) printf(" "); printf("%f in (%f mm)", u2inch(paddia[n]), u2mm(paddia[n])); L.packages(P) { // Print package names P.contacts (C) { if (C.pad && (C.pad.diameter == paddia[n])) namelist(P.name); } } printnames(); } printf("Occuring drills : "); for (n=0; n0) printf(" "); printf("%f in (%f mm)", u2inch(paddri[n]), u2mm(paddri[n])); L.packages(P) { // Print package names P.contacts (C) { if (C.pad && (C.pad.drill == paddri[n])) namelist(P.name); } } printnames(); } printf("Occuring shapes : "); for (n=0; n0) printf(" "); printf("%s", getpadshape(padsha[n])); L.packages(P) { // Print package names P.contacts (C) { if (C.pad && (C.pad.shape == padsha[n])) namelist(P.name); } } printnames(); } } // Print SMD information printf("\n[SMDs]\n"); printf("Total number : %d\n", smdcount); // Print hole information printf("\n[Holes]\n"); printf("Total number : %d\n", holecount); if (holecount) { printf("Occuring drills : "); for (int n=0; n0) printf(" "); printf("%f in (%f mm)\n", u2inch(holedri[n]), u2mm(holedri[n])); } } // Print element information printf("\n[Packages]\n"); printf("Total number : %d\n", elemcount); } }