/* * This EAGLE User Language Program produces a * EXCELLON output file which uses only one Tool (T01) * independent of the drill diameter (No drill rack is necessary) * It's used for drilling milled boards to reduce the amount of tool changes. * Written by G.Datler 1999-03-30 */ real korrExc = 1; // Correction Factor due to resolution differences real mx ; // Maximum X-Cordinate for calculation of mirrored values real my ; // Minimum Y-Cordinate for calculation of relativ set to zero /* //---------------------------------------------------------------------------- */ board(B) { output(filesetext(B.name, ".DRH")) { B.signals(S) {S.vias(V) {mx=max(u2mil(V.x),mx); my=min(u2mil(V.y),my); } } B.holes(H) {mx=max(u2mil(H.x),mx); my=min(u2mil(H.y),my);} B.elements(E) { E.package.contacts(C) { if (C.pad) mx=max(u2mil(C.x),mx); my=min(u2mil(C.y),my); } E.package.holes(H) {mx=max(u2mil(H.x),mx); my=min(u2mil(H.y),my);} } my=-my; printf("%%\n"); printf("T01\n"); B.signals(S) {S.vias(V) {printf("X%-.0fY%-.0f\n", abs(u2mil(V.x)-mx)*korrExc, (u2mil(V.y)+my)*korrExc);} } B.holes(H) {printf("X%.0fY%.0f\n", abs(u2mil(H.x)-mx)*korrExc, (u2mil(H.y)+my)*korrExc);} B.elements(E) { E.package.contacts(C) { if (C.pad) printf("X%.0fY%.0f\n", abs(u2mil(C.pad.x)-mx)*korrExc, (u2mil(C.pad.y)+my)*korrExc); } E.package.holes(H) {printf("X%.0fY%.0f\n", abs(u2mil(H.x)-mx)*korrExc, (u2mil(H.y)+my)*korrExc);} } printf("M30\n"); } }