*** ADDHOLES *** Version 3.00 (c)1997 Rob L. Dey Adds "center-punch" holes to all pads in a PC board (.DXF) file ,:: : LD$(),LE$(),B(,)=( ,: ) "*** ADDHOLES ***"]2 ,: !) "Version 3.00"< ,:: ) "(c)1997 Rob L. Dey":F ,:P "This program adds holes to all pads in a PC board (.DXF) file."!Z "The holes are used for reference, while drilling the PC board."h_ "This program reads your source file, and outputs ADDHOLES.DXF."td:  n: ,x "Enter the following:": "Source filename (.DXF)";FE$ FE$"" "Please try again!": EXT$".DXF": R*: "Hole diameter (0.020 in.)";HD@ HD HD #{p: "Maximum trace width (auto-detect)";MTW: "Filename: ";  ,: FE$: , "Diameter: ";  ,: "#.###";HD;: ("): , "MaxWidth: ";  ,: MTW "auto-detect": 8 "#.###";MTW;: (")\ ,:: "Correct (Y/N)";AA$:z AA$"Y" AA$"y" " " "ADDHOLES.TMP" OUTPUT AS #, FE$ AS #6 MTW :  : ,@: ,: "LINES PROCESSED ="J  ,: (T () #: :6^ #,A$PhLNLN: ,: LN:rr A$"POLYLINE" v: | A$"SOLID" @:  #,A$ T: r Check if this POLYLINE is a round pad Y N LD$(Y)" 70" LD$(Y)"1"  Y' : U Modify this (pad) POLYLINE (2 vertices)eVX1:VX2s Y N LD$(Y)" 40" SWO(LD$(Y)): SWO(MTW) SWSWO(HD):LD$(Y)(SW) LD$(Y)" 41" EWO(LD$(Y)): EWO(MTW) EWEWO(HD):LD$(Y)(EW)] LD$(Y)"VERTEX" SWO(MTW) EWO(MTW) VX1 e Yu  :  Write the POLYLINE data Y N: #,LD$(Y): Y:: Finished first loop (created ADDHOLES.TMP)< #:LP@ Do second loop+A "ADDHOLES.DXF" OUTPUT AS #JB "ADDHOLES.TMP" AS #oC  : #: kill "ADDHOLES.TMP"D Finished second loop (created ADDHOLES.DXF)F: "TOTAL PAD HOLES =";PN WF : "WARNING:";WF;"pad (OD) sizes were altered!"X ,:: "*** DONE!!! ***"0b End program=l ,:ev Load data from POLYLINE to SEQENDmN{LD$(N)A$ A$"SEQEND" NN: T:  Determine new coordinates and dimensions for round pad  P : "A maximum of 999 holes is reached": H*PP8 ZY N LD$(Z)" 10" VX1 VX2(LD$(Z)):VXN2VX2(HD):LD$(Z)(VXN2) LD$(Z)" 10" VX1 VX1(LD$(Z)):VXN1VX1(HD):LD$(Z)(VXN1) LD$(Z)" 20" CY(LD$(Z)) Z8RAD(VX2VX1):CXRADVX1:B(P,)CX:B(P,)CYTODN(SW)HD:ODOSWOm  ODNODO WFWFs  Continue?* ,: "Continue (Y/N)";AA$4 AA$"Y" AA$"y" > Abort programH ,:: "*** ABORTED ***": bR Filename conditioning$\UFE$""8f N (FE$)KpE$(FE$,N,)zz (E$)` (E$){ E$((E$) ) E$"." EXT$""UFE$UFE$E$ NUFE$UFE$EXT$FE$UFE$: Test for square pad by comparing solid corners#XL(SX4SX1):YL(SY4SY1)> XLYL : FH c Write the SOLID data R Q: #,LE$(R): R: Determine center of square padCX(SX1SX4):CY(SY1SY4)PP:B(P,)CX:B(P,)CY  Write the SOLID data as 4 rectangles (32 coords)G RL(SX4SX1HD):RW(SY4SY1HD)a $RX1()SX1:RY1()SY1~ .RX2()SX1RL:RY2()SY1 8RX3()SX1:RY3()SY1RW BRX4()SX1RL:RY4()SY1RW LRX1()SX2RW:RY1()SY2 VRX2()SX2:RY2()SY2!`RX3()SX2RW:RY3()SY2RL/!jRX4()SX2:RY4()SY2RLL!tRX1()SX3:RY1()SY3RLl!~RX2()SX3RW:RY2()SY3RL!RX3()SX3:RY3()SY3!RX4()SX3RW:RY4()SY3!RX1()SX4RL:RY1()SY4RW!RX2()SX4:RY2()SY4RW!RX3()SX4RL:RY3()SY4"RX4()SX4:RY4()SY4%" C 3" R Q\" LE$(R)" 10" LE$(R)(RX1(C))" LE$(R)" 20" LE$(R)(RY1(C))" LE$(R)" 11" LE$(R)(RX2(C))" LE$(R)" 21" LE$(R)(RY2(C))# LE$(R)" 12" LE$(R)(RX3(C)))#  LE$(R)" 22" LE$(R)(RY3(C))R# LE$(R)" 13" LE$(R)(RX4(C)){# LE$(R)" 23" LE$(R)(RY4(C))#( R#2 #< C#F#P Trim traces from center of pads#Z Check if ends of (trace) POLYLINE cover a pad center $d W P0$n B(W,)VXA B(W,)VYA V$x B(W,)VXB B(W,)VYB f$ W: :$ Change length of trace$VC$ Y N$ LD$(Y)" 10" VC LD$(Y)(VXA)$ LD$(Y)" 20" VC LD$(Y)(VYA):VC% LD$(Y)" 10" LD$(Y)(VXB)E% LD$(Y)" 20" LD$(Y)(VYB)M% YW% ]%% Shorten the first (trace) POLYLINE vertice% VXAVXB VYAVYA(HD): Shorten vert line% VYAVYB VXAVXA(HD): Shorten horz line$& Third IF may be needed for diagonal lines*&\& Shorten the second (trace) POLYLINE vertice& VXAVXB VYBVYB(HD): Shorten vert line& VYAVYB VXBVXB(HD): Shorten horz line& Third IF may be needed for diagonal lines&#'" Remove extra donuts from pad centersV', LD$(Y)" 40" ((MTW)(LD$(Y))) `'1 f'6'@ Load data from SOLID to 0'JQ'TLE$(Q)A$'^ A$" 0" r'hQQ: T: T'r Find X,Y coords of 4 SOLID corners'| R Q$( LE$(R)" 10" SX1(LE$(R))J( LE$(R)" 20" SY1(LE$(R))p( LE$(R)" 11" SX2(LE$(R))( LE$(R)" 21" SY2(LE$(R))( LE$(R)" 12" SX3(LE$(R))( LE$(R)" 22" SY3(LE$(R))) LE$(R)" 13" SX4(LE$(R)).) LE$(R)" 23" SY4(LE$(R))6) R@) F)v) Auto-detect the maximum trace width (MTW)) "MaxWidth: ";) A$"POLYLINE" 0) () #: ) #,A$)& )0 Load data from POLYLINE to SEQEND*:N*DLD$(N)A$+*N A$"SEQEND" bE*XNN: #,A$: Dm*b Check if this POLYLINE is a trace{*l Y N*v LD$(Y)" 70" LD$(Y)"0" * Y* * Compare this (trace) POLYLINE width and MTW* Y N;+ LD$(Y)" 40" LD$(Y)" 41" TW(LD$(Y)): TWMTW MTWTWC+ YM+ r+  ,: "#.###";MTW;: (")z+:+ Find trace coords+ ,: "TRACES MODIFIED =":  ,+ () #:  + #,A$+  , A$"POLYLINE"  , #,A$,  B, Load data from POLYLINE to SEQENDJ, NX, LD$(N)A$p, A$"SEQEND"  , NN: #,A$,  :  , CLNCLN:PC(CLNLN)d, PCd PCd, ,: "###%";PC:- Check if this POLYLINE is a trace or pad-& Y NE-0 LD$(Y)" 70" LD$(Y)"0" N o-: LD$(Y)" 70" LD$(Y)"1" "w-< Y-D  -N Get four trace coords-S VXA:VYA:VXB:VYB-X Y N-b LD$(Y)" 10" VXB VXA(LD$(Y))#.l LD$(Y)" 20" VYB VYA(LD$(Y))I.v LD$(Y)" 10" VXB(LD$(Y))o. LD$(Y)" 20" VYB(LD$(Y))w. Y. P.  . . Get pad center coords. See 710-790 for idea and delete 4010.CX:CY. W P/ B(W,)CX B(W,)CY 6/ W(/ 1