Index: trunk/doc/thermal.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: trunk/doc/thermal.png =================================================================== --- trunk/doc/thermal.png (revision 1036) +++ trunk/doc/thermal.png (nonexistent) Property changes on: trunk/doc/thermal.png ___________________________________________________________________ Deleted: svn:mime-type ## -1 +0,0 ## -application/octet-stream \ No newline at end of property Index: trunk/doc/gcode_tool_path.eps =================================================================== --- trunk/doc/gcode_tool_path.eps (revision 1036) +++ trunk/doc/gcode_tool_path.eps (nonexistent) @@ -1,415 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: cairo 1.8.10 (http://cairographics.org) -%%CreationDate: Mon May 30 02:27:10 2011 -%%Pages: 1 -%%BoundingBox: 0 0 403 230 -%%DocumentData: Clean7Bit -%%LanguageLevel: 2 -%%EndComments -%%BeginProlog -/cairo_eps_state save def -/dict_count countdictstack def -/op_count count 1 sub def -userdict begin -/q { gsave } bind def -/Q { grestore } bind def -/cm { 6 array astore concat } bind def -/w { setlinewidth } bind def -/J { setlinecap } bind def -/j { setlinejoin } bind def -/M { setmiterlimit } bind def -/d { setdash } bind def -/m { moveto } bind def -/l { lineto } bind def -/c { curveto } bind def -/h { closepath } bind def -/re { exch dup neg 3 1 roll 5 3 roll moveto 0 rlineto - 0 exch rlineto 0 rlineto closepath } bind def -/S { stroke } bind def -/f { fill } bind def -/f* { eofill } bind def -/B { fill stroke } bind def -/B* { eofill stroke } bind def -/n { newpath } bind def -/W { clip } bind def -/W* { eoclip } bind def -/BT { } bind def -/ET { } bind def -/pdfmark where { pop globaldict /?pdfmark /exec load put } - { globaldict begin /?pdfmark /pop load def /pdfmark - /cleartomark load def end } ifelse -/BDC { mark 3 1 roll /BDC pdfmark } bind def -/EMC { mark /EMC pdfmark } bind def -/cairo_store_point { /cairo_point_y exch def /cairo_point_x exch def } def -/Tj { show currentpoint cairo_store_point } bind def -/TJ { - { - dup - type /stringtype eq - { show } { -0.001 mul 0 cairo_font_matrix dtransform rmoveto } ifelse - } forall - currentpoint cairo_store_point -} bind def -/cairo_selectfont { cairo_font_matrix aload pop pop pop 0 0 6 array astore - cairo_font exch selectfont cairo_point_x cairo_point_y moveto } bind def -/Tf { pop /cairo_font exch def /cairo_font_matrix where - { pop cairo_selectfont } if } bind def -/Td { matrix translate cairo_font_matrix matrix concatmatrix dup - /cairo_font_matrix exch def dup 4 get exch 5 get cairo_store_point - /cairo_font where { pop cairo_selectfont } if } bind def -/Tm { 2 copy 8 2 roll 6 array astore /cairo_font_matrix exch def - cairo_store_point /cairo_font where { pop cairo_selectfont } if } bind def -/g { setgray } bind def -/rg { setrgbcolor } bind def -/d1 { setcachedevice } bind def -%%EndProlog -%%Page: 1 1 -%%BeginPageSetup -%%PageBoundingBox: 0 0 403 230 -%%EndPageSetup -q -1 g -0 0 403 230 rectfill -1 0 0 rg -0.5 w -0 J -0 j -[] 0.0 d -10 M q 1 0 0 1 0 230 cm -0 -230.398 m 32.879 -14.398 l S Q -0 g -0.5 w -q 1 0 0 1 0 230 cm -32.879 -14.398 m 32.879 -211.922 l 159.84 -211.922 l 159.84 -70.559 l -150.238 -70.559 l 148.32 -71.762 l 148.32 -72.238 l 150.238 -73.441 l -152.16 -76.32 l 152.641 -79.441 l 152.16 -81.84 l 150.961 -84 l 150.238 --84.48 l 150.238 -142.801 l 149.762 -144.238 l 149.039 -145.922 l -114.961 -179.281 l 114.961 -186.238 l 114 -186.961 l 100.559 -186.961 l -99.602 -186 l 99.602 -172.559 l 100.559 -171.359 l 107.52 -171.359 l -138.961 -139.441 l 138.961 -84.48 l 138 -83.281 l 137.281 -81.84 l -136.801 -79.199 l 137.281 -76.559 l 138.238 -74.641 l 139.922 -72.961 l -141.121 -72 l 139.922 -71.039 l 138.238 -69.359 l 137.281 -67.441 l -136.801 -64.801 l 137.281 -62.16 l 138.238 -60.238 l 140.398 -58.078 l -137.762 -58.078 l 137.52 -57.602 l 121.922 -57.602 l 112.801 -66.238 l -112.801 -130.801 l 113.52 -131.281 l 114.719 -133.441 l 115.199 --136.078 l 114.719 -138.961 l 112.801 -141.84 l 110.641 -143.281 l -109.441 -143.762 l 106.801 -144 l 104.16 -143.52 l 101.52 -141.602 l -100.078 -139.441 l 99.602 -137.52 l 99.602 -134.641 l 100.078 -132.719 -l 101.52 -130.801 l 101.52 -63.84 l 102.48 -60.719 l 116.16 -47.281 l -118.078 -46.32 l 137.039 -46.078 l 137.039 -43.441 l 138.238 -42.48 l -151.441 -42.48 l 152.398 -43.68 l 152.398 -57.359 l 151.441 -58.078 l -149.281 -58.078 l 149.281 -58.559 l 149.762 -59.039 l 157.68 -59.039 l -158.398 -58.32 l 158.398 -38.641 l 159.359 -35.52 l 159.84 -35.281 l -159.84 -14.398 l 32.879 -14.398 l S Q -1 0 0 rg -0.5 w -q 1 0 0 1 0 230 cm -32.879 -14.398 m 46.078 -50.16 l S Q -0 g -0.5 w -q 1 0 0 1 0 230 cm -46.078 -50.16 m 43.441 -50.879 l 41.281 -51.84 l 38.16 -54 l 36 -56.641 -l 34.32 -60 l 33.602 -64.801 l 34.32 -69.602 l 36 -72.961 l 38.16 --75.602 l 41.281 -77.762 l 43.441 -78.719 l 46.32 -79.441 l 50.16 --79.441 l 53.039 -78.719 l 55.68 -77.52 l 58.559 -75.359 l 60.238 --73.199 l 62.16 -69.602 l 62.879 -65.281 l 62.641 -62.641 l 62.16 -60 l -60.238 -56.398 l 58.559 -54.238 l 55.68 -52.078 l 53.039 -50.879 l -50.16 -50.16 l 46.078 -50.16 l S Q -1 0 0 rg -0.5 w -q 1 0 0 1 0 230 cm -46.078 -50.16 m 217.922 -16.801 l S Q -0 g -0.5 w -q 1 0 0 1 0 230 cm -217.922 -16.801 m 217.199 -17.281 l 208.801 -25.441 l 208.078 -26.879 l -208.078 -49.199 l 205.441 -52.078 l 197.281 -52.078 l 195.84 -50.398 l -193.922 -49.441 l 190.32 -49.441 l 188.398 -50.398 l 186.719 -52.32 l -186 -53.762 l 186 -57.359 l 186.719 -58.801 l 188.398 -60.719 l 190.32 --61.68 l 193.922 -61.68 l 195.84 -60.719 l 197.281 -59.039 l 207.121 --59.039 l 208.559 -58.32 l 214.559 -52.078 l 215.039 -51.121 l 215.039 --28.801 l 219.84 -23.762 l 263.039 -23.762 l 277.922 -38.879 l 277.922 --46.801 l 290.879 -46.801 l 290.879 -33.84 l 282.238 -33.84 l 266.16 --17.52 l 264.719 -16.801 l 217.922 -16.801 l S Q -1 0 0 rg -0.5 w -q 1 0 0 1 0 230 cm -217.922 -16.801 m 332.879 -34.078 l S Q -0 g -0.5 w -q 1 0 0 1 0 230 cm -332.879 -34.078 m 331.68 -34.559 l 330.238 -35.281 l 328.559 -37.199 l -327.84 -38.641 l 327.84 -42 l 328.559 -43.922 l 302.641 -70.078 l -264.238 -70.078 l 263.281 -70.559 l 259.199 -74.398 l 258.48 -75.84 l -258.48 -85.441 l 249.121 -94.559 l 239.762 -94.559 l 239.039 -93.602 l -237.121 -92.641 l 233.52 -92.641 l 231.602 -93.602 l 229.922 -95.52 l -229.199 -96.961 l 229.199 -100.559 l 229.922 -102 l 231.602 -103.922 l -233.52 -104.879 l 237.121 -104.879 l 239.039 -103.922 l 241.199 -101.52 -l 251.039 -101.52 l 252 -101.039 l 264.719 -88.559 l 265.441 -87.121 l -265.441 -77.52 l 265.922 -77.039 l 304.32 -77.039 l 305.762 -76.32 l -335.039 -46.801 l 337.199 -45.84 l 339.121 -44.16 l 340.078 -42.238 l -340.078 -38.641 l 339.359 -37.199 l 337.68 -35.281 l 335.762 -34.32 l -332.879 -34.078 l S Q -1 0 0 rg -0.5 w -q 1 0 0 1 0 230 cm -332.879 -34.078 m 228.961 -34.559 l S Q -0 g -0.5 w -q 1 0 0 1 0 230 cm -228.961 -34.559 m 228.961 -47.52 l 241.922 -47.52 l 241.922 -34.559 l -228.961 -34.559 l S Q -1 0 0 rg -0.5 w -q 1 0 0 1 0 230 cm -228.961 -34.559 m 191.039 -34.801 l S Q -0 g -0.5 w -q 1 0 0 1 0 230 cm -191.039 -34.801 m 189.359 -35.52 l 163.199 -35.52 l 161.762 -36.719 l -160.559 -38.16 l 160.559 -59.52 l 158.398 -61.441 l 149.762 -61.441 l -148.32 -59.762 l 146.398 -58.801 l 142.801 -58.801 l 141.359 -59.52 l -139.441 -61.199 l 138.48 -63.121 l 138.48 -66.719 l 139.441 -68.641 l -141.359 -70.32 l 142.801 -71.039 l 146.398 -71.039 l 148.32 -70.078 l -149.762 -68.398 l 160.32 -68.398 l 161.281 -67.922 l 166.801 -62.641 l -167.52 -61.199 l 167.52 -42.48 l 186 -42.48 l 186.48 -44.16 l 188.398 --46.32 l 190.32 -47.281 l 193.922 -47.281 l 195.84 -46.32 l 197.52 --44.398 l 198.238 -42.961 l 198.238 -39.359 l 197.52 -37.922 l 195.84 --36 l 193.922 -35.039 l 191.039 -34.801 l S Q -1 0 0 rg -0.5 w -q 1 0 0 1 0 230 cm -191.039 -34.801 m 138.238 -43.922 l S Q -0 g -0.5 w -q 1 0 0 1 0 230 cm -138.238 -43.922 m 138.238 -48.48 l 118.801 -48.48 l 117.84 -48.961 l -104.398 -62.16 l 103.68 -63.602 l 103.68 -131.039 l 102 -132.48 l -101.039 -134.398 l 101.039 -138 l 101.762 -139.441 l 103.441 -141.359 l -105.359 -142.32 l 108.961 -142.32 l 110.879 -141.359 l 112.559 -139.441 -l 113.281 -138 l 113.281 -134.398 l 112.32 -132.48 l 110.641 -131.039 l -110.641 -65.52 l 120.48 -55.441 l 138.238 -55.441 l 138.238 -56.879 l -151.199 -56.879 l 151.199 -43.922 l 138.238 -43.922 l S Q -1 0 0 rg -0.5 w -q 1 0 0 1 0 230 cm -138.238 -43.922 m 234.238 -49.199 l S Q -0 g -0.5 w -q 1 0 0 1 0 230 cm -234.238 -49.199 m 233.039 -49.68 l 231.602 -50.398 l 229.922 -52.32 l -229.199 -53.762 l 229.199 -57.359 l 230.16 -59.281 l 232.078 -60.961 l -233.52 -61.68 l 237.121 -61.68 l 239.039 -60.719 l 240.719 -58.801 l -241.441 -57.359 l 241.441 -53.762 l 240.719 -52.32 l 239.039 -50.398 l -237.121 -49.441 l 234.238 -49.199 l S Q -1 0 0 rg -0.5 w -q 1 0 0 1 0 230 cm -234.238 -49.199 m 191.039 -63.602 l S Q -0 g -0.5 w -q 1 0 0 1 0 230 cm -191.039 -63.602 m 189.84 -64.078 l 188.398 -64.801 l 186.719 -66.719 l -186 -68.16 l 186 -71.762 l 186.961 -73.68 l 188.879 -75.359 l 190.32 --76.078 l 193.922 -76.078 l 195.84 -75.121 l 197.52 -73.199 l 198.238 --71.762 l 198.238 -68.16 l 197.52 -66.719 l 195.84 -64.801 l 193.922 --63.84 l 191.039 -63.602 l S Q -1 0 0 rg -0.5 w -q 1 0 0 1 0 230 cm -191.039 -63.602 m 234.238 -63.602 l S Q -0 g -0.5 w -q 1 0 0 1 0 230 cm -234.238 -63.602 m 233.039 -64.078 l 231.602 -64.801 l 230.16 -66.48 l -216 -66.48 l 215.039 -66.961 l 208.801 -72.961 l 208.078 -74.398 l -208.078 -90.961 l 204.719 -94.559 l 196.559 -94.559 l 195.84 -93.602 l -193.922 -92.641 l 190.32 -92.641 l 188.879 -93.359 l 186.961 -95.039 l -186 -96.961 l 186 -100.559 l 186.961 -102.48 l 188.879 -104.16 l 190.32 --104.879 l 193.922 -104.879 l 195.84 -103.922 l 198 -101.52 l 206.398 --101.52 l 207.84 -100.801 l 214.559 -93.84 l 215.039 -92.879 l 215.039 --76.078 l 217.922 -73.441 l 230.16 -73.441 l 231.602 -75.121 l 233.52 --76.078 l 237.121 -76.078 l 239.039 -75.121 l 240.719 -73.199 l 241.441 --71.762 l 241.441 -68.16 l 240.719 -66.719 l 239.039 -64.801 l 237.121 --63.84 l 234.238 -63.602 l S Q -1 0 0 rg -0.5 w -q 1 0 0 1 0 230 cm -234.238 -63.602 m 143.52 -72.961 l S Q -0 g -0.5 w -q 1 0 0 1 0 230 cm -143.52 -72.961 m 142.32 -73.441 l 140.879 -74.16 l 139.199 -76.078 l -138.48 -77.52 l 138.48 -81.121 l 139.441 -83.039 l 141.121 -84.48 l -141.121 -140.879 l 108.961 -172.801 l 100.801 -172.801 l 100.801 --185.762 l 113.762 -185.762 l 113.762 -177.359 l 147.359 -144 l 148.078 --142.559 l 148.078 -84.48 l 149.762 -83.039 l 150.719 -81.121 l 150.719 --77.52 l 150 -76.078 l 148.32 -74.16 l 146.398 -73.199 l 143.52 -72.961 -l S Q -1 0 0 rg -0.5 w -q 1 0 0 1 0 230 cm -143.52 -72.961 m 191.039 -78 l S Q -0 g -0.5 w -q 1 0 0 1 0 230 cm -191.039 -78 m 189.84 -78.48 l 188.398 -79.199 l 186.48 -81.359 l 186 --83.039 l 174.961 -83.039 l 174 -83.52 l 168.48 -88.801 l 167.762 --90.238 l 167.762 -163.441 l 168.48 -164.879 l 210.961 -207.121 l -210.961 -211.68 l 223.922 -211.68 l 223.922 -198.719 l 211.68 -198.719 -l 174.719 -161.52 l 174.719 -92.16 l 176.641 -90 l 189.359 -90 l -191.281 -90.719 l 193.922 -90.48 l 195.84 -89.52 l 197.52 -87.602 l -198.238 -86.16 l 198.238 -82.559 l 197.52 -81.121 l 195.84 -79.199 l -193.922 -78.238 l 191.039 -78 l S Q -1 0 0 rg -0.5 w -q 1 0 0 1 0 230 cm -191.039 -78 m 234.238 -78 l S Q -0 g -0.5 w -q 1 0 0 1 0 230 cm -234.238 -78 m 233.039 -78.48 l 231.602 -79.199 l 229.922 -81.121 l -229.199 -82.559 l 229.199 -86.16 l 230.16 -88.078 l 232.078 -89.762 l -233.52 -90.48 l 237.121 -90.48 l 239.039 -89.52 l 240.719 -87.602 l -241.441 -86.16 l 241.441 -82.559 l 240.719 -81.121 l 239.039 -79.199 l -237.121 -78.238 l 234.238 -78 l S Q -1 0 0 rg -0.5 w -q 1 0 0 1 0 230 cm -234.238 -78 m 283.199 -91.68 l S Q -0 g -0.5 w -q 1 0 0 1 0 230 cm -283.199 -91.68 m 282 -92.16 l 280.559 -92.879 l 278.879 -94.801 l -278.16 -96.238 l 278.16 -99.84 l 279.121 -101.762 l 280.801 -103.199 l -280.801 -144 l 281.281 -144.961 l 293.039 -156.961 l 293.281 -160.32 l -294.238 -162.238 l 296.16 -163.922 l 297.602 -164.641 l 301.199 --164.641 l 303.121 -163.68 l 304.801 -161.762 l 305.52 -160.32 l 305.52 --156.719 l 304.801 -155.281 l 303.121 -153.359 l 301.199 -152.398 l -297.84 -152.16 l 287.762 -142.32 l 287.762 -103.199 l 289.68 -101.52 l -305.52 -101.52 l 308.879 -105.121 l 308.879 -118.801 l 307.199 -120.238 -l 306.238 -122.16 l 306.238 -125.762 l 306.961 -127.199 l 308.641 --129.121 l 310.559 -130.078 l 314.16 -130.078 l 316.078 -129.121 l -317.762 -127.199 l 318.48 -125.762 l 318.48 -122.16 l 317.52 -120.238 l -315.84 -118.801 l 315.84 -103.199 l 315.121 -101.762 l 308.16 -95.039 l -307.199 -94.559 l 289.441 -94.559 l 288 -92.879 l 286.078 -91.922 l -283.199 -91.68 l S Q -1 0 0 rg -0.5 w -q 1 0 0 1 0 230 cm -283.199 -91.68 m 191.039 -106.801 l S Q -0 g -0.5 w -q 1 0 0 1 0 230 cm -191.039 -106.801 m 189.84 -107.281 l 188.398 -108 l 186.719 -109.922 l -186 -111.359 l 186 -114.961 l 186.961 -116.879 l 188.879 -118.559 l -190.32 -119.281 l 193.922 -119.281 l 195.84 -118.32 l 197.281 -116.641 -l 212.641 -116.641 l 226.078 -130.32 l 227.52 -131.039 l 230.16 --131.039 l 231.602 -132.719 l 233.52 -133.68 l 237.121 -133.68 l -238.559 -132.961 l 240.48 -131.281 l 241.441 -129.359 l 241.441 --125.762 l 240.48 -123.84 l 238.559 -122.16 l 237.121 -121.441 l 233.52 --121.441 l 231.602 -122.398 l 230.16 -124.078 l 229.199 -124.078 l -215.039 -109.68 l 213.602 -108.961 l 212.16 -108.961 l 211.199 -109.68 -l 197.281 -109.68 l 195.84 -108 l 193.922 -107.039 l 191.039 -106.801 l S Q -1 0 0 rg -0.5 w -q 1 0 0 1 0 230 cm -191.039 -106.801 m 234.238 -106.801 l S Q -0 g -0.5 w -q 1 0 0 1 0 230 cm -234.238 -106.801 m 233.039 -107.281 l 231.602 -108 l 229.922 -109.922 l -229.199 -111.359 l 229.199 -114.961 l 230.16 -116.879 l 232.078 --118.559 l 233.52 -119.281 l 237.121 -119.281 l 239.039 -118.32 l -239.762 -117.359 l 253.68 -117.359 l 254.16 -117.84 l 254.16 -147.602 l -254.641 -148.559 l 264.238 -158.398 l 264.48 -160.32 l 265.199 -161.762 -l 266.879 -163.68 l 268.801 -164.641 l 272.398 -164.641 l 274.32 --163.68 l 276 -161.762 l 276.719 -160.32 l 276.719 -156.719 l 276 --155.281 l 274.32 -153.359 l 272.398 -152.398 l 270.238 -152.16 l -268.078 -152.641 l 261.121 -145.922 l 261.121 -116.16 l 260.398 --114.719 l 256.32 -110.879 l 255.359 -110.398 l 241.199 -110.398 l -239.039 -108 l 237.121 -107.039 l 234.238 -106.801 l S Q -1 0 0 rg -0.5 w -q 1 0 0 1 0 230 cm -234.238 -106.801 m 191.039 -121.199 l S Q -0 g -0.5 w -q 1 0 0 1 0 230 cm -191.039 -121.199 m 189.84 -121.68 l 188.398 -122.398 l 186.719 -124.32 -l 186 -125.762 l 186 -129.359 l 186.961 -131.281 l 188.879 -132.961 l -190.32 -133.68 l 193.922 -133.68 l 195.84 -132.719 l 197.281 -131.039 l -204 -131.039 l 215.281 -142.559 l 216.719 -143.281 l 229.199 -143.281 l -229.68 -144.961 l 231.602 -147.121 l 233.52 -148.078 l 237.121 -148.078 -l 238.559 -147.359 l 240.48 -145.68 l 241.441 -143.762 l 241.441 --140.16 l 240.48 -138.238 l 238.559 -136.559 l 237.121 -135.84 l 234.48 --135.602 l 232.559 -136.32 l 218.398 -136.32 l 207.121 -124.801 l -205.68 -124.078 l 197.281 -124.078 l 195.84 -122.398 l 193.922 -121.441 -l 191.039 -121.199 l S Q -1 0 0 rg -0.5 w -q 1 0 0 1 0 230 cm -191.039 -121.199 m 191.039 -135.602 l S Q -0 g -0.5 w -q 1 0 0 1 0 230 cm -191.039 -135.602 m 189.84 -136.078 l 188.398 -136.801 l 186.719 --138.719 l 186 -140.16 l 186 -143.762 l 186.961 -145.68 l 188.879 --147.359 l 190.32 -148.078 l 193.922 -148.078 l 195.84 -147.121 l -197.281 -145.441 l 202.32 -145.441 l 216.719 -159.602 l 216.719 -179.52 -l 217.922 -180.961 l 219.359 -182.16 l 247.199 -182.16 l 268.559 --203.762 l 268.801 -207.121 l 269.52 -208.559 l 271.199 -210.48 l -273.121 -211.441 l 276.719 -211.441 l 278.641 -210.48 l 280.32 -208.559 -l 281.039 -207.121 l 281.039 -203.52 l 280.32 -202.078 l 278.641 --200.16 l 276.719 -199.199 l 273.359 -198.961 l 249.84 -175.68 l -248.879 -175.199 l 223.68 -175.199 l 223.68 -157.922 l 223.199 -156.961 -l 205.68 -139.199 l 204.238 -138.48 l 197.281 -138.48 l 195.84 -136.801 -l 193.922 -135.84 l 191.039 -135.602 l S Q -1 0 0 rg -0.5 w -q 1 0 0 1 0 230 cm -191.039 -135.602 m 191.039 -150 l S Q -0 g -0.5 w -q 1 0 0 1 0 230 cm -191.039 -150 m 189.84 -150.48 l 188.398 -151.199 l 186.719 -153.121 l -186 -154.559 l 186 -158.16 l 186.961 -160.078 l 188.879 -161.762 l -190.32 -162.48 l 193.922 -162.48 l 195.84 -161.52 l 197.52 -159.602 l -198.238 -158.16 l 198.238 -154.559 l 197.52 -153.121 l 195.84 -151.199 -l 193.922 -150.238 l 191.039 -150 l S Q -1 0 0 rg -0.5 w -q 1 0 0 1 0 230 cm -191.039 -150 m 234.238 -150 l S Q -0 g -0.5 w -q 1 0 0 1 0 230 cm -234.238 -150 m 233.039 -150.48 l 231.602 -151.199 l 229.922 -153.121 l -229.199 -154.559 l 229.199 -158.16 l 230.16 -160.078 l 232.078 -161.762 -l 233.52 -162.48 l 237.121 -162.48 l 239.039 -161.52 l 240.719 -159.602 -l 241.441 -158.16 l 241.441 -154.559 l 240.719 -153.121 l 239.039 --151.199 l 237.121 -150.238 l 234.238 -150 l S Q -1 0 0 rg -0.5 w -q 1 0 0 1 0 230 cm -234.238 -150 m 46.559 -51.84 l S Q -0 g -0.5 w -q 1 0 0 1 0 230 cm -46.559 -51.84 m 44.641 -52.32 l 42.238 -53.281 l 39.602 -54.961 l -37.441 -57.359 l 36 -60 l 35.281 -62.398 l 35.281 -67.441 l 36 -69.84 l -37.441 -72.48 l 39.602 -74.879 l 42.238 -76.559 l 45.359 -77.762 l -50.879 -77.762 l 54 -76.559 l 56.641 -74.879 l 58.801 -72.48 l 60.238 --69.84 l 60.961 -67.441 l 60.961 -62.398 l 60.238 -60 l 58.801 -57.359 -l 56.641 -54.961 l 54 -53.281 l 50.879 -52.078 l 46.559 -51.84 l S Q -1 0 0 rg -0.5 w -q 1 0 0 1 0 230 cm -46.559 -51.84 m S Q -Q -showpage -%%Trailer -count op_count sub {pop} repeat -countdictstack dict_count sub {end} repeat -cairo_eps_state restore -%%EOF Index: trunk/doc/metric_size.tab =================================================================== --- trunk/doc/metric_size.tab (revision 1036) +++ trunk/doc/metric_size.tab (nonexistent) @@ -1,192 +0,0 @@ -# $Id$ -# - -0.20_mm .00787 -0.25_mm .00984 -0.30_mm .0118 -0.35_mm .0138 -0.40_mm .0158 -0.45_mm .0177 -0.50_mm .0197 -0.55_mm .0217 -0.60_mm .0236 -0.65_mm .0256 -0.70_mm .0276 -0.75_mm .0295 -0.80_mm .0315 -0.85_mm .0335 -0.90_mm .0354 -0.95_mm .0374 -1.00_mm .0394 -1.05_mm .0413 -1.10_mm .0433 -1.15_mm .0453 -1.20_mm .0472 -1.25_mm .0492 -1.30_mm .0512 -1.35_mm .0531 -1.40_mm .0551 -1.45_mm .0571 -1.50_mm .0591 -1.55_mm .0610 -1.60_mm .0630 -1.65_mm .0650 -1.70_mm .0669 -1.75_mm .0689 -1.80_mm .0709 -1.85_mm .0728 -1.90_mm .0748 -1.95_mm .0768 -2.00_mm .0787 -2.05_mm .0807 -2.10_mm .0827 -2.15_mm .0846 -2.20_mm .0866 -2.25_mm .0886 -2.30_mm .0906 -2.35_mm .0925 -2.40_mm .0945 -2.45_mm .0965 -2.50_mm .0984 -2.55_mm .1004 -2.60_mm .1024 -2.65_mm .1043 -2.70_mm .1063 -2.75_mm .1083 -2.80_mm .1102 -2.85_mm .1122 -2.90_mm .1142 -2.95_mm .1161 -3.00_mm .1181 -3.10_mm .1220 -3.15_mm .1240 -3.20_mm .1260 -3.25_mm .1280 -3.30_mm .1299 -3.40_mm .1339 -3.50_mm .1378 -3.60_mm .1417 -3.70_mm .1457 -3.75_mm .1476 -3.80_mm .1496 -3.90_mm .1535 -4.00_mm .1575 -4.10_mm .1614 -4.20_mm .1654 -4.25_mm .1673 -4.30_mm .1693 -4.40_mm .1732 -4.50_mm .1772 -4.60_mm .1811 -4.70_mm .1850 -4.75_mm .1870 -4.80_mm .1890 -4.90_mm .1929 -5.00_mm .1969 -5.10_mm .2008 -5.20_mm .2047 -5.25_mm .2067 -5.30_mm .2087 -5.40_mm .2126 -5.50_mm .2165 -5.60_mm .2205 -5.70_mm .2244 -5.75_mm .2264 -5.80_mm .2283 -5.90_mm .2323 -6.00_mm .2362 -6.10_mm .2402 -6.20_mm .2441 -6.25_mm .2461 -6.30_mm .2480 -6.40_mm .2520 -6.50_mm .2559 -6.60_mm .2598 -6.70_mm .2638 -6.75_mm .2657 -6.80_mm .2677 -6.90_mm .2717 -7.00_mm .2756 -7.10_mm .2795 -7.20_mm .2835 -7.25_mm .2854 -7.30_mm .2874 -7.40_mm .2914 -7.50_mm .2953 -7.60_mm .2992 -7.70_mm .3031 -8.00_mm .3150 -8.10_mm .3189 -8.20_mm .3228 -8.25_mm .3248 -8.30_mm .3268 -8.40_mm .3307 -8.50_mm .3346 -8.60_mm .3386 -8.70_mm .3425 -8.75_mm .3445 -8.80_mm .3465 -8.90_mm .3504 -9.00_mm .3543 -9.10_mm .3583 -9.20_mm .3622 -9.25_mm .3642 -9.30_mm .3661 -9.40_mm .3701 -9.50_mm .3740 -9.60_mm .3780 -9.70_mm .3819 -9.75_mm .3839 -9.80_mm .3858 -9.90_mm .3898 -10.00_mm .3937 -10.10_mm .3976 -10.20_mm .4016 -10.25_mm .4035 -10.30_mm .4055 -10.40_mm .4094 -10.50_mm .4134 -10.60_mm .4173 -10.70_mm .4213 -10.80_mm .4252 -10.90_mm .4291 -11.00_mm .4331 -11.10_mm .4370 -11.20_mm .4409 -11.25_mm .4429 -11.30_mm .4449 -11.40_mm .4488 -11.50_mm .4528 -11.60_mm .4567 -11.70_mm .4606 -11.75_mm .4626 -11.80_mm .4646 -11.90_mm .4685 -12.00_mm .4724 -12.50_mm .4921 -13.00_mm .5118 -13.50_mm .5315 -14.00_mm .5512 -14.50_mm .5709 -15.00_mm .5906 -15.50_mm .6102 -16.00_mm .6299 -16.50_mm .6496 -17.00_mm .6693 -17.50_mm .6890 -18.00_mm .7087 -18.50_mm .7283 -19.00_mm .7480 -19.50_mm .7677 -20.00_mm .7874 -20.50_mm .8071 -21.00_mm .8268 -21.50_mm .8465 -22.00_mm .8661 -22.50_mm .8858 -23.00_mm .9055 -23.50_mm .9252 -24.00_mm .9449 -24.50_mm .9646 -25.00_mm .9843 - Index: trunk/doc/pad.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: trunk/doc/pad.png =================================================================== --- trunk/doc/pad.png (revision 1036) +++ trunk/doc/pad.png (nonexistent) Property changes on: trunk/doc/pad.png ___________________________________________________________________ Deleted: svn:mime-type ## -1 +0,0 ## -application/octet-stream \ No newline at end of property Index: trunk/doc/gcode.pdf =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: trunk/doc/gcode.pdf =================================================================== --- trunk/doc/gcode.pdf (revision 1036) +++ trunk/doc/gcode.pdf (nonexistent) Property changes on: trunk/doc/gcode.pdf ___________________________________________________________________ Deleted: svn:mime-type ## -1 +0,0 ## -application/octet-stream \ No newline at end of property Index: trunk/doc/version.texi =================================================================== --- trunk/doc/version.texi (revision 1036) +++ trunk/doc/version.texi (nonexistent) @@ -1,4 +0,0 @@ -@set UPDATED 17 September 2011 -@set UPDATED-MONTH September 2011 -@set EDITION 20110918 -@set VERSION 20110918 Index: trunk/doc/thermal.pcb =================================================================== --- trunk/doc/thermal.pcb (revision 1036) +++ trunk/doc/thermal.pcb (nonexistent) @@ -1,844 +0,0 @@ -# release: pcb-bin 1.99q - -PCB["thermal" 300000 300000] - -Grid[5000.00000000 0 0 1] -Cursor[88600 72400 2.000000] -Thermal[0.500000] -DRC[699 400 800 800 1000 750] -Flags(0x0000000000000840) -Groups("1,s:2,c:3:4:5:6:7:8") -Styles["Signal,2500,30000,10000,0:Power,2500,6000,3500,1000:Fat,4000,6000,3500,1000:Skinny,200,2402,1181,600"] - -Symbol[' ' 1800] -( -) -Symbol['!' 1200] -( - SymbolLine[0 4500 0 5000 800] - SymbolLine[0 1000 0 3500 800] -) -Symbol['"' 1200] -( - SymbolLine[0 1000 0 2000 800] - SymbolLine[1000 1000 1000 2000 800] -) -Symbol['#' 1200] -( - SymbolLine[0 3500 2000 3500 800] - SymbolLine[0 2500 2000 2500 800] - SymbolLine[1500 2000 1500 4000 800] - SymbolLine[500 2000 500 4000 800] -) -Symbol['$' 1200] -( - SymbolLine[1500 1500 2000 2000 800] - SymbolLine[500 1500 1500 1500 800] - SymbolLine[0 2000 500 1500 800] - SymbolLine[0 2000 0 2500 800] - SymbolLine[0 2500 500 3000 800] - SymbolLine[500 3000 1500 3000 800] - SymbolLine[1500 3000 2000 3500 800] - SymbolLine[2000 3500 2000 4000 800] - SymbolLine[1500 4500 2000 4000 800] - SymbolLine[500 4500 1500 4500 800] - SymbolLine[0 4000 500 4500 800] - SymbolLine[1000 1000 1000 5000 800] -) -Symbol['%' 1200] -( - SymbolLine[0 1500 0 2000 800] - SymbolLine[0 1500 500 1000 800] - SymbolLine[500 1000 1000 1000 800] - SymbolLine[1000 1000 1500 1500 800] - SymbolLine[1500 1500 1500 2000 800] - SymbolLine[1000 2500 1500 2000 800] - SymbolLine[500 2500 1000 2500 800] - SymbolLine[0 2000 500 2500 800] - SymbolLine[0 5000 4000 1000 800] - SymbolLine[3500 5000 4000 4500 800] - SymbolLine[4000 4000 4000 4500 800] - SymbolLine[3500 3500 4000 4000 800] - SymbolLine[3000 3500 3500 3500 800] - SymbolLine[2500 4000 3000 3500 800] - SymbolLine[2500 4000 2500 4500 800] - SymbolLine[2500 4500 3000 5000 800] - SymbolLine[3000 5000 3500 5000 800] -) -Symbol['&' 1200] -( - SymbolLine[0 4500 500 5000 800] - SymbolLine[0 1500 0 2500 800] - SymbolLine[0 1500 500 1000 800] - SymbolLine[0 3500 1500 2000 800] - SymbolLine[500 5000 1000 5000 800] - SymbolLine[1000 5000 2000 4000 800] - SymbolLine[0 2500 2500 5000 800] - SymbolLine[500 1000 1000 1000 800] - SymbolLine[1000 1000 1500 1500 800] - SymbolLine[1500 1500 1500 2000 800] - SymbolLine[0 3500 0 4500 800] -) -Symbol[''' 1200] -( - SymbolLine[0 2000 1000 1000 800] -) -Symbol['(' 1200] -( - SymbolLine[0 4500 500 5000 800] - SymbolLine[0 1500 500 1000 800] - SymbolLine[0 1500 0 4500 800] -) -Symbol[')' 1200] -( - SymbolLine[0 1000 500 1500 800] - SymbolLine[500 1500 500 4500 800] - SymbolLine[0 5000 500 4500 800] -) -Symbol['*' 1200] -( - SymbolLine[0 2000 2000 4000 800] - SymbolLine[0 4000 2000 2000 800] - SymbolLine[0 3000 2000 3000 800] - SymbolLine[1000 2000 1000 4000 800] -) -Symbol['+' 1200] -( - SymbolLine[0 3000 2000 3000 800] - SymbolLine[1000 2000 1000 4000 800] -) -Symbol[',' 1200] -( - SymbolLine[0 6000 1000 5000 800] -) -Symbol['-' 1200] -( - SymbolLine[0 3000 2000 3000 800] -) -Symbol['.' 1200] -( - SymbolLine[0 5000 500 5000 800] -) -Symbol['/' 1200] -( - SymbolLine[0 4500 3000 1500 800] -) -Symbol['0' 1200] -( - SymbolLine[0 4500 500 5000 800] - SymbolLine[0 1500 0 4500 800] - SymbolLine[0 1500 500 1000 800] - SymbolLine[500 1000 1500 1000 800] - SymbolLine[1500 1000 2000 1500 800] - SymbolLine[2000 1500 2000 4500 800] - SymbolLine[1500 5000 2000 4500 800] - SymbolLine[500 5000 1500 5000 800] - SymbolLine[0 4000 2000 2000 800] -) -Symbol['1' 1200] -( - SymbolLine[500 5000 1500 5000 800] - SymbolLine[1000 1000 1000 5000 800] - SymbolLine[0 2000 1000 1000 800] -) -Symbol['2' 1200] -( - SymbolLine[0 1500 500 1000 800] - SymbolLine[500 1000 2000 1000 800] - SymbolLine[2000 1000 2500 1500 800] - SymbolLine[2500 1500 2500 2500 800] - SymbolLine[0 5000 2500 2500 800] - SymbolLine[0 5000 2500 5000 800] -) -Symbol['3' 1200] -( - SymbolLine[0 1500 500 1000 800] - SymbolLine[500 1000 1500 1000 800] - SymbolLine[1500 1000 2000 1500 800] - SymbolLine[2000 1500 2000 4500 800] - SymbolLine[1500 5000 2000 4500 800] - SymbolLine[500 5000 1500 5000 800] - SymbolLine[0 4500 500 5000 800] - SymbolLine[500 3000 2000 3000 800] -) -Symbol['4' 1200] -( - SymbolLine[0 3000 2000 1000 800] - SymbolLine[0 3000 2500 3000 800] - SymbolLine[2000 1000 2000 5000 800] -) -Symbol['5' 1200] -( - SymbolLine[0 1000 2000 1000 800] - SymbolLine[0 1000 0 3000 800] - SymbolLine[0 3000 500 2500 800] - SymbolLine[500 2500 1500 2500 800] - SymbolLine[1500 2500 2000 3000 800] - SymbolLine[2000 3000 2000 4500 800] - SymbolLine[1500 5000 2000 4500 800] - SymbolLine[500 5000 1500 5000 800] - SymbolLine[0 4500 500 5000 800] -) -Symbol['6' 1200] -( - SymbolLine[1500 1000 2000 1500 800] - SymbolLine[500 1000 1500 1000 800] - SymbolLine[0 1500 500 1000 800] - SymbolLine[0 1500 0 4500 800] - SymbolLine[0 4500 500 5000 800] - SymbolLine[1500 3000 2000 3500 800] - SymbolLine[0 3000 1500 3000 800] - SymbolLine[500 5000 1500 5000 800] - SymbolLine[1500 5000 2000 4500 800] - SymbolLine[2000 3500 2000 4500 800] -) -Symbol['7' 1200] -( - SymbolLine[0 5000 2500 2500 800] - SymbolLine[2500 1000 2500 2500 800] - SymbolLine[0 1000 2500 1000 800] -) -Symbol['8' 1200] -( - SymbolLine[0 4500 500 5000 800] - SymbolLine[0 3500 0 4500 800] - SymbolLine[0 3500 500 3000 800] - SymbolLine[500 3000 1500 3000 800] - SymbolLine[1500 3000 2000 3500 800] - SymbolLine[2000 3500 2000 4500 800] - SymbolLine[1500 5000 2000 4500 800] - SymbolLine[500 5000 1500 5000 800] - SymbolLine[0 2500 500 3000 800] - SymbolLine[0 1500 0 2500 800] - SymbolLine[0 1500 500 1000 800] - SymbolLine[500 1000 1500 1000 800] - SymbolLine[1500 1000 2000 1500 800] - SymbolLine[2000 1500 2000 2500 800] - SymbolLine[1500 3000 2000 2500 800] -) -Symbol['9' 1200] -( - SymbolLine[0 5000 2000 3000 800] - SymbolLine[2000 1500 2000 3000 800] - SymbolLine[1500 1000 2000 1500 800] - SymbolLine[500 1000 1500 1000 800] - SymbolLine[0 1500 500 1000 800] - SymbolLine[0 1500 0 2500 800] - SymbolLine[0 2500 500 3000 800] - SymbolLine[500 3000 2000 3000 800] -) -Symbol[':' 1200] -( - SymbolLine[0 2500 500 2500 800] - SymbolLine[0 3500 500 3500 800] -) -Symbol[';' 1200] -( - SymbolLine[0 5000 1000 4000 800] - SymbolLine[1000 2500 1000 3000 800] -) -Symbol['<' 1200] -( - SymbolLine[0 3000 1000 2000 800] - SymbolLine[0 3000 1000 4000 800] -) -Symbol['=' 1200] -( - SymbolLine[0 2500 2000 2500 800] - SymbolLine[0 3500 2000 3500 800] -) -Symbol['>' 1200] -( - SymbolLine[0 2000 1000 3000 800] - SymbolLine[0 4000 1000 3000 800] -) -Symbol['?' 1200] -( - SymbolLine[1000 3000 1000 3500 800] - SymbolLine[1000 4500 1000 5000 800] - SymbolLine[0 1500 0 2000 800] - SymbolLine[0 1500 500 1000 800] - SymbolLine[500 1000 1500 1000 800] - SymbolLine[1500 1000 2000 1500 800] - SymbolLine[2000 1500 2000 2000 800] - SymbolLine[1000 3000 2000 2000 800] -) -Symbol['@' 1200] -( - SymbolLine[0 1000 0 4000 800] - SymbolLine[0 4000 1000 5000 800] - SymbolLine[1000 5000 4000 5000 800] - SymbolLine[5000 3500 5000 1000 800] - SymbolLine[5000 1000 4000 0 800] - SymbolLine[4000 0 1000 0 800] - SymbolLine[1000 0 0 1000 800] - SymbolLine[1500 2000 1500 3000 800] - SymbolLine[1500 3000 2000 3500 800] - SymbolLine[2000 3500 3000 3500 800] - SymbolLine[3000 3500 3500 3000 800] - SymbolLine[3500 3000 4000 3500 800] - SymbolLine[3500 3000 3500 1500 800] - SymbolLine[3500 2000 3000 1500 800] - SymbolLine[2000 1500 3000 1500 800] - SymbolLine[2000 1500 1500 2000 800] - SymbolLine[4000 3500 5000 3500 800] -) -Symbol['A' 1200] -( - SymbolLine[0 1500 0 5000 800] - SymbolLine[0 1500 500 1000 800] - SymbolLine[500 1000 2000 1000 800] - SymbolLine[2000 1000 2500 1500 800] - SymbolLine[2500 1500 2500 5000 800] - SymbolLine[0 3000 2500 3000 800] -) -Symbol['B' 1200] -( - SymbolLine[0 5000 2000 5000 800] - SymbolLine[2000 5000 2500 4500 800] - SymbolLine[2500 3500 2500 4500 800] - SymbolLine[2000 3000 2500 3500 800] - SymbolLine[500 3000 2000 3000 800] - SymbolLine[500 1000 500 5000 800] - SymbolLine[0 1000 2000 1000 800] - SymbolLine[2000 1000 2500 1500 800] - SymbolLine[2500 1500 2500 2500 800] - SymbolLine[2000 3000 2500 2500 800] -) -Symbol['C' 1200] -( - SymbolLine[500 5000 2000 5000 800] - SymbolLine[0 4500 500 5000 800] - SymbolLine[0 1500 0 4500 800] - SymbolLine[0 1500 500 1000 800] - SymbolLine[500 1000 2000 1000 800] -) -Symbol['D' 1200] -( - SymbolLine[500 1000 500 5000 800] - SymbolLine[2000 1000 2500 1500 800] - SymbolLine[2500 1500 2500 4500 800] - SymbolLine[2000 5000 2500 4500 800] - SymbolLine[0 5000 2000 5000 800] - SymbolLine[0 1000 2000 1000 800] -) -Symbol['E' 1200] -( - SymbolLine[0 3000 1500 3000 800] - SymbolLine[0 5000 2000 5000 800] - SymbolLine[0 1000 0 5000 800] - SymbolLine[0 1000 2000 1000 800] -) -Symbol['F' 1200] -( - SymbolLine[0 1000 0 5000 800] - SymbolLine[0 1000 2000 1000 800] - SymbolLine[0 3000 1500 3000 800] -) -Symbol['G' 1200] -( - SymbolLine[2000 1000 2500 1500 800] - SymbolLine[500 1000 2000 1000 800] - SymbolLine[0 1500 500 1000 800] - SymbolLine[0 1500 0 4500 800] - SymbolLine[0 4500 500 5000 800] - SymbolLine[500 5000 2000 5000 800] - SymbolLine[2000 5000 2500 4500 800] - SymbolLine[2500 3500 2500 4500 800] - SymbolLine[2000 3000 2500 3500 800] - SymbolLine[1000 3000 2000 3000 800] -) -Symbol['H' 1200] -( - SymbolLine[0 1000 0 5000 800] - SymbolLine[2500 1000 2500 5000 800] - SymbolLine[0 3000 2500 3000 800] -) -Symbol['I' 1200] -( - SymbolLine[0 1000 1000 1000 800] - SymbolLine[500 1000 500 5000 800] - SymbolLine[0 5000 1000 5000 800] -) -Symbol['J' 1200] -( - SymbolLine[0 1000 1500 1000 800] - SymbolLine[1500 1000 1500 4500 800] - SymbolLine[1000 5000 1500 4500 800] - SymbolLine[500 5000 1000 5000 800] - SymbolLine[0 4500 500 5000 800] -) -Symbol['K' 1200] -( - SymbolLine[0 1000 0 5000 800] - SymbolLine[0 3000 2000 1000 800] - SymbolLine[0 3000 2000 5000 800] -) -Symbol['L' 1200] -( - SymbolLine[0 1000 0 5000 800] - SymbolLine[0 5000 2000 5000 800] -) -Symbol['M' 1200] -( - SymbolLine[0 1000 0 5000 800] - SymbolLine[0 1000 1500 2500 800] - SymbolLine[1500 2500 3000 1000 800] - SymbolLine[3000 1000 3000 5000 800] -) -Symbol['N' 1200] -( - SymbolLine[0 1000 0 5000 800] - SymbolLine[0 1000 0 1500 800] - SymbolLine[0 1500 2500 4000 800] - SymbolLine[2500 1000 2500 5000 800] -) -Symbol['O' 1200] -( - SymbolLine[0 1500 0 4500 800] - SymbolLine[0 1500 500 1000 800] - SymbolLine[500 1000 1500 1000 800] - SymbolLine[1500 1000 2000 1500 800] - SymbolLine[2000 1500 2000 4500 800] - SymbolLine[1500 5000 2000 4500 800] - SymbolLine[500 5000 1500 5000 800] - SymbolLine[0 4500 500 5000 800] -) -Symbol['P' 1200] -( - SymbolLine[500 1000 500 5000 800] - SymbolLine[0 1000 2000 1000 800] - SymbolLine[2000 1000 2500 1500 800] - SymbolLine[2500 1500 2500 2500 800] - SymbolLine[2000 3000 2500 2500 800] - SymbolLine[500 3000 2000 3000 800] -) -Symbol['Q' 1200] -( - SymbolLine[0 1500 0 4500 800] - SymbolLine[0 1500 500 1000 800] - SymbolLine[500 1000 1500 1000 800] - SymbolLine[1500 1000 2000 1500 800] - SymbolLine[2000 1500 2000 4500 800] - SymbolLine[1500 5000 2000 4500 800] - SymbolLine[500 5000 1500 5000 800] - SymbolLine[0 4500 500 5000 800] - SymbolLine[1000 4000 2000 5000 800] -) -Symbol['R' 1200] -( - SymbolLine[0 1000 2000 1000 800] - SymbolLine[2000 1000 2500 1500 800] - SymbolLine[2500 1500 2500 2500 800] - SymbolLine[2000 3000 2500 2500 800] - SymbolLine[500 3000 2000 3000 800] - SymbolLine[500 1000 500 5000 800] - SymbolLine[500 3000 2500 5000 800] -) -Symbol['S' 1200] -( - SymbolLine[2000 1000 2500 1500 800] - SymbolLine[500 1000 2000 1000 800] - SymbolLine[0 1500 500 1000 800] - SymbolLine[0 1500 0 2500 800] - SymbolLine[0 2500 500 3000 800] - SymbolLine[500 3000 2000 3000 800] - SymbolLine[2000 3000 2500 3500 800] - SymbolLine[2500 3500 2500 4500 800] - SymbolLine[2000 5000 2500 4500 800] - SymbolLine[500 5000 2000 5000 800] - SymbolLine[0 4500 500 5000 800] -) -Symbol['T' 1200] -( - SymbolLine[0 1000 2000 1000 800] - SymbolLine[1000 1000 1000 5000 800] -) -Symbol['U' 1200] -( - SymbolLine[0 1000 0 4500 800] - SymbolLine[0 4500 500 5000 800] - SymbolLine[500 5000 1500 5000 800] - SymbolLine[1500 5000 2000 4500 800] - SymbolLine[2000 1000 2000 4500 800] -) -Symbol['V' 1200] -( - SymbolLine[0 1000 0 4000 800] - SymbolLine[0 4000 1000 5000 800] - SymbolLine[1000 5000 2000 4000 800] - SymbolLine[2000 1000 2000 4000 800] -) -Symbol['W' 1200] -( - SymbolLine[0 1000 0 5000 800] - SymbolLine[0 5000 1500 3500 800] - SymbolLine[1500 3500 3000 5000 800] - SymbolLine[3000 1000 3000 5000 800] -) -Symbol['X' 1200] -( - SymbolLine[0 1000 0 1500 800] - SymbolLine[0 1500 2500 4000 800] - SymbolLine[2500 4000 2500 5000 800] - SymbolLine[0 4000 0 5000 800] - SymbolLine[0 4000 2500 1500 800] - SymbolLine[2500 1000 2500 1500 800] -) -Symbol['Y' 1200] -( - SymbolLine[0 1000 0 1500 800] - SymbolLine[0 1500 1000 2500 800] - SymbolLine[1000 2500 2000 1500 800] - SymbolLine[2000 1000 2000 1500 800] - SymbolLine[1000 2500 1000 5000 800] -) -Symbol['Z' 1200] -( - SymbolLine[0 1000 2500 1000 800] - SymbolLine[2500 1000 2500 1500 800] - SymbolLine[0 4000 2500 1500 800] - SymbolLine[0 4000 0 5000 800] - SymbolLine[0 5000 2500 5000 800] -) -Symbol['[' 1200] -( - SymbolLine[0 1000 500 1000 800] - SymbolLine[0 1000 0 5000 800] - SymbolLine[0 5000 500 5000 800] -) -Symbol['\' 1200] -( - SymbolLine[0 1500 3000 4500 800] -) -Symbol[']' 1200] -( - SymbolLine[0 1000 500 1000 800] - SymbolLine[500 1000 500 5000 800] - SymbolLine[0 5000 500 5000 800] -) -Symbol['^' 1200] -( - SymbolLine[0 1500 500 1000 800] - SymbolLine[500 1000 1000 1500 800] -) -Symbol['_' 1200] -( - SymbolLine[0 5000 2000 5000 800] -) -Symbol['a' 1200] -( - SymbolLine[1500 3000 2000 3500 800] - SymbolLine[500 3000 1500 3000 800] - SymbolLine[0 3500 500 3000 800] - SymbolLine[0 3500 0 4500 800] - SymbolLine[0 4500 500 5000 800] - SymbolLine[2000 3000 2000 4500 800] - SymbolLine[2000 4500 2500 5000 800] - SymbolLine[500 5000 1500 5000 800] - SymbolLine[1500 5000 2000 4500 800] -) -Symbol['b' 1200] -( - SymbolLine[0 1000 0 5000 800] - SymbolLine[0 4500 500 5000 800] - SymbolLine[500 5000 1500 5000 800] - SymbolLine[1500 5000 2000 4500 800] - SymbolLine[2000 3500 2000 4500 800] - SymbolLine[1500 3000 2000 3500 800] - SymbolLine[500 3000 1500 3000 800] - SymbolLine[0 3500 500 3000 800] -) -Symbol['c' 1200] -( - SymbolLine[500 3000 2000 3000 800] - SymbolLine[0 3500 500 3000 800] - SymbolLine[0 3500 0 4500 800] - SymbolLine[0 4500 500 5000 800] - SymbolLine[500 5000 2000 5000 800] -) -Symbol['d' 1200] -( - SymbolLine[2000 1000 2000 5000 800] - SymbolLine[1500 5000 2000 4500 800] - SymbolLine[500 5000 1500 5000 800] - SymbolLine[0 4500 500 5000 800] - SymbolLine[0 3500 0 4500 800] - SymbolLine[0 3500 500 3000 800] - SymbolLine[500 3000 1500 3000 800] - SymbolLine[1500 3000 2000 3500 800] -) -Symbol['e' 1200] -( - SymbolLine[500 5000 2000 5000 800] - SymbolLine[0 4500 500 5000 800] - SymbolLine[0 3500 0 4500 800] - SymbolLine[0 3500 500 3000 800] - SymbolLine[500 3000 1500 3000 800] - SymbolLine[1500 3000 2000 3500 800] - SymbolLine[0 4000 2000 4000 800] - SymbolLine[2000 4000 2000 3500 800] -) -Symbol['f' 1000] -( - SymbolLine[500 1500 500 5000 800] - SymbolLine[500 1500 1000 1000 800] - SymbolLine[1000 1000 1500 1000 800] - SymbolLine[0 3000 1000 3000 800] -) -Symbol['g' 1200] -( - SymbolLine[1500 3000 2000 3500 800] - SymbolLine[500 3000 1500 3000 800] - SymbolLine[0 3500 500 3000 800] - SymbolLine[0 3500 0 4500 800] - SymbolLine[0 4500 500 5000 800] - SymbolLine[500 5000 1500 5000 800] - SymbolLine[1500 5000 2000 4500 800] - SymbolLine[0 6000 500 6500 800] - SymbolLine[500 6500 1500 6500 800] - SymbolLine[1500 6500 2000 6000 800] - SymbolLine[2000 3000 2000 6000 800] -) -Symbol['h' 1200] -( - SymbolLine[0 1000 0 5000 800] - SymbolLine[0 3500 500 3000 800] - SymbolLine[500 3000 1500 3000 800] - SymbolLine[1500 3000 2000 3500 800] - SymbolLine[2000 3500 2000 5000 800] -) -Symbol['i' 1000] -( - SymbolLine[0 2000 0 2500 800] - SymbolLine[0 3500 0 5000 800] -) -Symbol['j' 1000] -( - SymbolLine[500 2000 500 2500 800] - SymbolLine[500 3500 500 6000 800] - SymbolLine[0 6500 500 6000 800] -) -Symbol['k' 1200] -( - SymbolLine[0 1000 0 5000 800] - SymbolLine[0 3500 1500 5000 800] - SymbolLine[0 3500 1000 2500 800] -) -Symbol['l' 1000] -( - SymbolLine[0 1000 0 4500 800] - SymbolLine[0 4500 500 5000 800] -) -Symbol['m' 1200] -( - SymbolLine[500 3500 500 5000 800] - SymbolLine[500 3500 1000 3000 800] - SymbolLine[1000 3000 1500 3000 800] - SymbolLine[1500 3000 2000 3500 800] - SymbolLine[2000 3500 2000 5000 800] - SymbolLine[2000 3500 2500 3000 800] - SymbolLine[2500 3000 3000 3000 800] - SymbolLine[3000 3000 3500 3500 800] - SymbolLine[3500 3500 3500 5000 800] - SymbolLine[0 3000 500 3500 800] -) -Symbol['n' 1200] -( - SymbolLine[500 3500 500 5000 800] - SymbolLine[500 3500 1000 3000 800] - SymbolLine[1000 3000 1500 3000 800] - SymbolLine[1500 3000 2000 3500 800] - SymbolLine[2000 3500 2000 5000 800] - SymbolLine[0 3000 500 3500 800] -) -Symbol['o' 1200] -( - SymbolLine[0 3500 0 4500 800] - SymbolLine[0 3500 500 3000 800] - SymbolLine[500 3000 1500 3000 800] - SymbolLine[1500 3000 2000 3500 800] - SymbolLine[2000 3500 2000 4500 800] - SymbolLine[1500 5000 2000 4500 800] - SymbolLine[500 5000 1500 5000 800] - SymbolLine[0 4500 500 5000 800] -) -Symbol['p' 1200] -( - SymbolLine[500 3500 500 6500 800] - SymbolLine[0 3000 500 3500 800] - SymbolLine[500 3500 1000 3000 800] - SymbolLine[1000 3000 2000 3000 800] - SymbolLine[2000 3000 2500 3500 800] - SymbolLine[2500 3500 2500 4500 800] - SymbolLine[2000 5000 2500 4500 800] - SymbolLine[1000 5000 2000 5000 800] - SymbolLine[500 4500 1000 5000 800] -) -Symbol['q' 1200] -( - SymbolLine[2000 3500 2000 6500 800] - SymbolLine[1500 3000 2000 3500 800] - SymbolLine[500 3000 1500 3000 800] - SymbolLine[0 3500 500 3000 800] - SymbolLine[0 3500 0 4500 800] - SymbolLine[0 4500 500 5000 800] - SymbolLine[500 5000 1500 5000 800] - SymbolLine[1500 5000 2000 4500 800] -) -Symbol['r' 1200] -( - SymbolLine[500 3500 500 5000 800] - SymbolLine[500 3500 1000 3000 800] - SymbolLine[1000 3000 2000 3000 800] - SymbolLine[0 3000 500 3500 800] -) -Symbol['s' 1200] -( - SymbolLine[500 5000 2000 5000 800] - SymbolLine[2000 5000 2500 4500 800] - SymbolLine[2000 4000 2500 4500 800] - SymbolLine[500 4000 2000 4000 800] - SymbolLine[0 3500 500 4000 800] - SymbolLine[0 3500 500 3000 800] - SymbolLine[500 3000 2000 3000 800] - SymbolLine[2000 3000 2500 3500 800] - SymbolLine[0 4500 500 5000 800] -) -Symbol['t' 1000] -( - SymbolLine[500 1000 500 4500 800] - SymbolLine[500 4500 1000 5000 800] - SymbolLine[0 2500 1000 2500 800] -) -Symbol['u' 1200] -( - SymbolLine[0 3000 0 4500 800] - SymbolLine[0 4500 500 5000 800] - SymbolLine[500 5000 1500 5000 800] - SymbolLine[1500 5000 2000 4500 800] - SymbolLine[2000 3000 2000 4500 800] -) -Symbol['v' 1200] -( - SymbolLine[0 3000 0 4000 800] - SymbolLine[0 4000 1000 5000 800] - SymbolLine[1000 5000 2000 4000 800] - SymbolLine[2000 3000 2000 4000 800] -) -Symbol['w' 1200] -( - SymbolLine[0 3000 0 4500 800] - SymbolLine[0 4500 500 5000 800] - SymbolLine[500 5000 1000 5000 800] - SymbolLine[1000 5000 1500 4500 800] - SymbolLine[1500 3000 1500 4500 800] - SymbolLine[1500 4500 2000 5000 800] - SymbolLine[2000 5000 2500 5000 800] - SymbolLine[2500 5000 3000 4500 800] - SymbolLine[3000 3000 3000 4500 800] -) -Symbol['x' 1200] -( - SymbolLine[0 3000 2000 5000 800] - SymbolLine[0 5000 2000 3000 800] -) -Symbol['y' 1200] -( - SymbolLine[0 3000 0 4500 800] - SymbolLine[0 4500 500 5000 800] - SymbolLine[2000 3000 2000 6000 800] - SymbolLine[1500 6500 2000 6000 800] - SymbolLine[500 6500 1500 6500 800] - SymbolLine[0 6000 500 6500 800] - SymbolLine[500 5000 1500 5000 800] - SymbolLine[1500 5000 2000 4500 800] -) -Symbol['z' 1200] -( - SymbolLine[0 3000 2000 3000 800] - SymbolLine[0 5000 2000 3000 800] - SymbolLine[0 5000 2000 5000 800] -) -Symbol['{' 1200] -( - SymbolLine[500 1500 1000 1000 800] - SymbolLine[500 1500 500 2500 800] - SymbolLine[0 3000 500 2500 800] - SymbolLine[0 3000 500 3500 800] - SymbolLine[500 3500 500 4500 800] - SymbolLine[500 4500 1000 5000 800] -) -Symbol['|' 1200] -( - SymbolLine[0 1000 0 5000 800] -) -Symbol['}' 1200] -( - SymbolLine[0 1000 500 1500 800] - SymbolLine[500 1500 500 2500 800] - SymbolLine[500 2500 1000 3000 800] - SymbolLine[500 3500 1000 3000 800] - SymbolLine[500 3500 500 4500 800] - SymbolLine[0 5000 500 4500 800] -) -Symbol['~' 1200] -( - SymbolLine[0 3500 500 3000 800] - SymbolLine[500 3000 1000 3000 800] - SymbolLine[1000 3000 1500 3500 800] - SymbolLine[1500 3500 2000 3500 800] - SymbolLine[2000 3500 2500 3000 800] -) -Via[45000 135000 30000 10000 0 10000 "" "thermal(0S)"] -Via[255000 135000 30000 10000 0 10000 "" ""] -Via[150000 135000 30000 10000 0 10000 "" "thermal(0)"] -Layer(1 "component") -( - Polygon("clearpoly") - ( - [5000 95000] [290000 95000] [290000 175000] [5000 175000] - ) -) -Layer(2 "solder") -( -) -Layer(3 "GND") -( -) -Layer(4 "power") -( -) -Layer(5 "signal1") -( -) -Layer(6 "signal2") -( -) -Layer(7 "unused") -( -) -Layer(8 "unused") -( -) -Layer(9 "silk") -( -) -Layer(10 "silk") -( - Line[255000 180000 255000 160000 2500 10000 "clearline"] - Line[255000 160000 260000 165000 2500 10000 "clearline"] - Line[45000 160000 50000 165000 2500 10000 "clearline"] - Line[45000 160000 40000 165000 2500 10000 "clearline"] - Line[45000 180000 45000 160000 2500 10000 "clearline"] - Line[255000 160000 250000 165000 2500 10000 "clearline"] - Line[150000 160000 155000 165000 2500 10000 "clearline"] - Line[150000 160000 145000 165000 2500 10000 "clearline"] - Line[150000 180000 150000 160000 2500 10000 "clearline"] - Text[220000 190000 0 200 "no connection" ""] - Text[15000 180000 0 200 "Via/Pin with " ""] - Text[5000 190000 0 200 "solid connection " ""] - Text[225000 180000 0 200 "Via/Pin with" ""] - Text[120000 180000 0 200 "Via/Pin with " ""] - Text[130000 190000 0 200 "thermal" ""] -) Index: trunk/doc/letter_size.texi =================================================================== --- trunk/doc/letter_size.texi (revision 1036) +++ trunk/doc/letter_size.texi (nonexistent) @@ -1,16 +0,0 @@ -@c Generated file. Do not edit directly -@c $Id$ -@multitable @columnfractions 0.167 0.167 0.167 0.167 0.167 0.167 -@item Drill @tab Diameter @tab Drill @tab Diameter @tab Drill @tab Diameter -@item Size @tab (inches) @tab Size @tab (inches) @tab Size @tab (inches) - -@item A @tab .2340 @tab B @tab .2380 @tab C @tab .2420 -@item D @tab .2460 @tab E @tab .2500 @tab F @tab .2570 -@item G @tab .2610 @tab H @tab .2660 @tab I @tab .2720 -@item J @tab .2770 @tab K @tab .2810 @tab L @tab .2900 -@item M @tab .2950 @tab N @tab .3020 @tab O @tab .3160 -@item P @tab .3230 @tab Q @tab .3320 @tab R @tab .3390 -@item S @tab .3480 @tab T @tab .3580 @tab U @tab .3680 -@item V @tab .3770 @tab W @tab .3860 @tab X @tab .3970 -@item Y @tab .4040 @tab Z @tab .4130 @tab @tab @end multitable - Index: trunk/doc/mdate-sh =================================================================== --- trunk/doc/mdate-sh (revision 1036) +++ trunk/doc/mdate-sh (nonexistent) @@ -1,193 +0,0 @@ -#!/bin/sh -# Get modification time of a file or directory and pretty-print it. - -scriptversion=2005-02-07.09 - -# Copyright (C) 1995, 1996, 1997, 2003, 2004, 2005 Free Software -# Foundation, Inc. -# written by Ulrich Drepper , June 1995 -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software Foundation, -# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -# This file is maintained in Automake, please report -# bugs to or send patches to -# . - -case $1 in - '') - echo "$0: No file. Try \`$0 --help' for more information." 1>&2 - exit 1; - ;; - -h | --h*) - cat <<\EOF -Usage: mdate-sh [--help] [--version] FILE - -Pretty-print the modification time of FILE. - -Report bugs to . -EOF - exit $? - ;; - -v | --v*) - echo "mdate-sh $scriptversion" - exit $? - ;; -esac - -# Prevent date giving response in another language. -LANG=C -export LANG -LC_ALL=C -export LC_ALL -LC_TIME=C -export LC_TIME - -save_arg1="$1" - -# Find out how to get the extended ls output of a file or directory. -if ls -L /dev/null 1>/dev/null 2>&1; then - ls_command='ls -L -l -d' -else - ls_command='ls -l -d' -fi - -# A `ls -l' line looks as follows on OS/2. -# drwxrwx--- 0 Aug 11 2001 foo -# This differs from Unix, which adds ownership information. -# drwxrwx--- 2 root root 4096 Aug 11 2001 foo -# -# To find the date, we split the line on spaces and iterate on words -# until we find a month. This cannot work with files whose owner is a -# user named `Jan', or `Feb', etc. However, it's unlikely that `/' -# will be owned by a user whose name is a month. So we first look at -# the extended ls output of the root directory to decide how many -# words should be skipped to get the date. - -# On HPUX /bin/sh, "set" interprets "-rw-r--r--" as options, so the "x" below. -set x`ls -l -d /` - -# Find which argument is the month. -month= -command= -until test $month -do - shift - # Add another shift to the command. - command="$command shift;" - case $1 in - Jan) month=January; nummonth=1;; - Feb) month=February; nummonth=2;; - Mar) month=March; nummonth=3;; - Apr) month=April; nummonth=4;; - May) month=May; nummonth=5;; - Jun) month=June; nummonth=6;; - Jul) month=July; nummonth=7;; - Aug) month=August; nummonth=8;; - Sep) month=September; nummonth=9;; - Oct) month=October; nummonth=10;; - Nov) month=November; nummonth=11;; - Dec) month=December; nummonth=12;; - esac -done - -# Get the extended ls output of the file or directory. -set dummy x`eval "$ls_command \"\$save_arg1\""` - -# Remove all preceding arguments -eval $command - -# Because of the dummy argument above, month is in $2. -# -# On a POSIX system, we should have -# -# $# = 5 -# $1 = file size -# $2 = month -# $3 = day -# $4 = year or time -# $5 = filename -# -# On Darwin 7.7.0 and 7.6.0, we have -# -# $# = 4 -# $1 = day -# $2 = month -# $3 = year or time -# $4 = filename - -# Get the month. -case $2 in - Jan) month=January; nummonth=1;; - Feb) month=February; nummonth=2;; - Mar) month=March; nummonth=3;; - Apr) month=April; nummonth=4;; - May) month=May; nummonth=5;; - Jun) month=June; nummonth=6;; - Jul) month=July; nummonth=7;; - Aug) month=August; nummonth=8;; - Sep) month=September; nummonth=9;; - Oct) month=October; nummonth=10;; - Nov) month=November; nummonth=11;; - Dec) month=December; nummonth=12;; -esac - -case $3 in - ???*) day=$1;; - *) day=$3; shift;; -esac - -# Here we have to deal with the problem that the ls output gives either -# the time of day or the year. -case $3 in - *:*) set `date`; eval year=\$$# - case $2 in - Jan) nummonthtod=1;; - Feb) nummonthtod=2;; - Mar) nummonthtod=3;; - Apr) nummonthtod=4;; - May) nummonthtod=5;; - Jun) nummonthtod=6;; - Jul) nummonthtod=7;; - Aug) nummonthtod=8;; - Sep) nummonthtod=9;; - Oct) nummonthtod=10;; - Nov) nummonthtod=11;; - Dec) nummonthtod=12;; - esac - # For the first six month of the year the time notation can also - # be used for files modified in the last year. - if (expr $nummonth \> $nummonthtod) > /dev/null; - then - year=`expr $year - 1` - fi;; - *) year=$3;; -esac - -# The result. -echo $day $month $year - -# Local Variables: -# mode: shell-script -# sh-indentation: 2 -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "scriptversion=" -# time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-end: "$" -# End: Index: trunk/doc/options.texi =================================================================== --- trunk/doc/options.texi (revision 1036) +++ trunk/doc/options.texi (nonexistent) @@ -1,896 +0,0 @@ -@c key options -@menu -* General Options:: -* General GUI Options:: -* GTK+ GUI Options:: -* lesstif GUI Options:: -* Colors:: -* Layer Names:: -* Paths:: -* Sizes:: -* Commands:: -* DRC Options:: -* BOM Creation:: -* Gerber Export:: -* Postscript Export:: -* Encapsulated Postscript Export:: -* PNG Options:: -* lpr Printing Options:: -* nelma Options:: -@end menu -@c options General Options -@node General Options -@section General Options -@c ./../src/main.c 434 -@ftable @code -@item --help -Show help on command line options. -@end ftable -@c ./../src/main.c 439 -@ftable @code -@item --version -Show version. -@end ftable -@c ./../src/main.c 443 -@ftable @code -@item --verbose -Be verbose on stdout. -@end ftable -@c ./../src/main.c 448 -@ftable @code -@item --copyright -Show copyright. -@end ftable -@c ./../src/main.c 453 -@ftable @code -@item --show-defaults -Show option defaults. -@end ftable -@c ./../src/main.c 458 -@ftable @code -@item --show-actions -Show available actions and exit. -@end ftable -@c ./../src/main.c 463 -@ftable @code -@item --dump-actions -Dump actions (for documentation). -@end ftable -@c ./../src/main.c 468 -@ftable @code -@item --grid-units-mm -Set default grid units. Can be mm or mil. Defaults to mil. -@end ftable -@c ./../src/main.c 686 -@ftable @code -@item --backup-interval -Time between automatic backups in seconds. Set to @code{0} to disable. -The default value is @code{60}. -@end ftable -@c ./../src/main.c 723 -@ftable @code -@item --groups -Layer group string. Defaults to @code{"1,c:2:3:4:5:6,s:7:8"}. -@end ftable -@c ./../src/main.c 788 -@ftable @code -@item --route-styles -A string that defines the route styles. Defaults to @* -@code{"Signal,1000,3600,2000,1000:Power,2500,6000,3500,1000 - :Fat,4000,6000,3500,1000:Skinny,600,2402,1181,600"} -@end ftable -@c ./../src/main.c 807 -@ftable @code -@item --element-path -A colon separated list of directories or commands (starts with '|'). -The path is passed to the program specified in @option{--element-command}. -@end ftable -@c ./../src/main.c 817 -@ftable @code -@item --action-script -If set, this file is executed at startup. -@end ftable -@c ./../src/main.c 822 -@ftable @code -@item --action-string -If set, this string of actions is executed at startup. -@end ftable -@c ./../src/main.c 827 -@ftable @code -@item --fab-author -Name of author to be put in the Gerber files. -@end ftable -@c ./../src/main.c 832 -@ftable @code -@item --layer-stack -Initial layer stackup, for setting up an export. A comma separated list of layer -names, layer numbers and layer groups. -@end ftable -@c ./../src/main.c 883 -@ftable @code -@item --save-last-command -If set, the last user command is saved. -@end ftable -@c ./../src/main.c 887 -@ftable @code -@item --save-in-tmp -If set, all data which would otherwise be lost are saved in a temporary file -@file{/tmp/PCB.%i.save} . Sequence @samp{%i} is replaced by the process ID. -@end ftable -@c ./../src/main.c 901 -@ftable @code -@item --reset-after-element -If set, all found connections are reset before a new component is scanned. -@end ftable -@c ./../src/main.c 906 -@ftable @code -@item --ring-bell-finished -Execute the bell command when all rats are routed. -@end ftable -@c options General GUI Options -@node General GUI Options -@section General GUI Options -@c ./../src/main.c 842 -@ftable @code -@item --pinout-offset-x -Horizontal offset of the pin number display. Defaults to @code{100mil}. -@end ftable -@c ./../src/main.c 847 -@ftable @code -@item --pinout-offset-y -Vertical offset of the pin number display. Defaults to @code{100mil}. -@end ftable -@c ./../src/main.c 852 -@ftable @code -@item --pinout-text-offset-x -Horizontal offset of the pin name display. Defaults to @code{800mil}. -@end ftable -@c ./../src/main.c 857 -@ftable @code -@item --pinout-text-offset-y -Vertical offset of the pin name display. Defaults to @code{-100mil}. -@end ftable -@c ./../src/main.c 862 -@ftable @code -@item --draw-grid -If set, draw the grid at start-up. -@end ftable -@c ./../src/main.c 866 -@ftable @code -@item --clear-line -If set, new lines clear polygons. -@end ftable -@c ./../src/main.c 870 -@ftable @code -@item --full-poly -If set, new polygons are full ones. -@end ftable -@c ./../src/main.c 874 -@ftable @code -@item --unique-names -If set, you will not be permitted to change the name of an component to match that -of another component. -@end ftable -@c ./../src/main.c 878 -@ftable @code -@item --snap-pin -If set, pin centers and pad end points are treated as additional grid points -that the cursor can snap to. -@end ftable -@c ./../src/main.c 892 -@ftable @code -@item --all-direction-lines -Allow all directions, when drawing new lines. -@end ftable -@c ./../src/main.c 897 -@ftable @code -@item --show-number -Pinout shows number. -@end ftable -@c options GTK+ GUI Options -@node GTK+ GUI Options -@section GTK+ GUI Options -@c ./../src/hid/gtk/gui-top-window.c 1615 -@ftable @code -@item --listen -Listen for actions on stdin. -@end ftable -@c ./../src/hid/gtk/gui-top-window.c 1621 -@ftable @code -@item --bg-image -File name of an image to put into the background of the GUI canvas. The image must -be a color PPM image, in binary (not ASCII) format. It can be any size, and will be -automatically scaled to fit the canvas. -@end ftable -@c ./../src/hid/gtk/gui-top-window.c 1627 -@ftable @code -@item --pcb-menu -Location of the @file{gpcb-menu.res} file which defines the menu for the GTK+ GUI. -@end ftable -@c options lesstif GUI Options -@node lesstif GUI Options -@section lesstif GUI Options -@c ./../src/hid/lesstif/main.c 201 -@ftable @code -@item --listen -Listen for actions on stdin. -@end ftable -@c ./../src/hid/lesstif/main.c 207 -@ftable @code -@item --bg-image -File name of an image to put into the background of the GUI canvas. The image must -be a color PPM image, in binary (not ASCII) format. It can be any size, and will be -automatically scaled to fit the canvas. -@end ftable -@c ./../src/hid/lesstif/main.c 213 -@ftable @code -@item --pcb-menu -Location of the @file{pcb-menu.res} file which defines the menu for the lesstif GUI. -@end ftable -@c options Colors -@node Colors -@section Colors -@c ./../src/main.c 473 -@ftable @code -@item --black-color -Color value for black. Default: @samp{#000000} -@end ftable -@c ./../src/main.c 477 -@ftable @code -@item --black-color -Color value for white. Default: @samp{#ffffff} -@end ftable -@c ./../src/main.c 481 -@ftable @code -@item --background-color -Background color of the canvas. Default: @samp{#e5e5e5} -@end ftable -@c ./../src/main.c 486 -@ftable @code -@item --crosshair-color -Color of the crosshair. Default: @samp{#ff0000} -@end ftable -@c ./../src/main.c 491 -@ftable @code -@item --cross-color -Color of the cross. Default: @samp{#cdcd00} -@end ftable -@c ./../src/main.c 495 -@ftable @code -@item --via-color -Color of vias. Default: @samp{#7f7f7f} -@end ftable -@c ./../src/main.c 499 -@ftable @code -@item --via-selected-color -Color of selected vias. Default: @samp{#00ffff} -@end ftable -@c ./../src/main.c 504 -@ftable @code -@item --pin-color -Color of pins. Default: @samp{#4d4d4d} -@end ftable -@c ./../src/main.c 508 -@ftable @code -@item --pin-selected-color -Color of selected pins. Default: @samp{#00ffff} -@end ftable -@c ./../src/main.c 513 -@ftable @code -@item --pin-name-color -Color of pin names and pin numbers. Default: @samp{#ff0000} -@end ftable -@c ./../src/main.c 518 -@ftable @code -@item --element-color -Color of components. Default: @samp{#000000} -@end ftable -@c ./../src/main.c 522 -@ftable @code -@item --rat-color -Color of ratlines. Default: @samp{#b8860b} -@end ftable -@c ./../src/main.c 526 -@ftable @code -@item --invisible-objects-color -Color of invisible objects. Default: @samp{#cccccc} -@end ftable -@c ./../src/main.c 531 -@ftable @code -@item --invisible-mark-color -Color of invisible marks. Default: @samp{#cccccc} -@end ftable -@c ./../src/main.c 536 -@ftable @code -@item --element-selected-color -Color of selected components. Default: @samp{#00ffff} -@end ftable -@c ./../src/main.c 541 -@ftable @code -@item --rat-selected-color -Color of selected rats. Default: @samp{#00ffff} -@end ftable -@c ./../src/main.c 546 -@ftable @code -@item --connected-color -Color to indicate connections. Default: @samp{#00ff00} -@end ftable -@c ./../src/main.c 551 -@ftable @code -@item --off-limit-color -Color of off-canvas area. Default: @samp{#cccccc} -@end ftable -@c ./../src/main.c 556 -@ftable @code -@item --grid-color -Color of the grid. Default: @samp{#ff0000} -@end ftable -@c ./../src/main.c 560 -@ftable @code -@item --layer-color- -Color of layer @code{}, where @code{} is an integer from 1 to 16. -@end ftable -@c ./../src/main.c 578 -@ftable @code -@item --layer-selected-color- -Color of layer @code{}, when selected. @code{} is an integer from 1 to 16. -@end ftable -@c ./../src/main.c 597 -@ftable @code -@item --warn-color -Color of offending objects during DRC. Default value is @code{"#ff8000"} -@end ftable -@c ./../src/main.c 601 -@ftable @code -@item --mask-color -Color of the mask layer. Default value is @code{"#ff0000"} -@end ftable -@c options Layer Names -@node Layer Names -@section Layer Names -@c ./../src/main.c 691 -@ftable @code -@item --layer-name-1 -Name of the 1st Layer. Default is @code{"top"}. -@end ftable -@c ./../src/main.c 695 -@ftable @code -@item --layer-name-2 -Name of the 2nd Layer. Default is @code{"ground"}. -@end ftable -@c ./../src/main.c 699 -@ftable @code -@item --layer-name-3 -Name of the 3nd Layer. Default is @code{"signal2"}. -@end ftable -@c ./../src/main.c 703 -@ftable @code -@item --layer-name-4 -Name of the 4rd Layer. Default is @code{"signal3"}. -@end ftable -@c ./../src/main.c 707 -@ftable @code -@item --layer-name-5 -Name of the 5rd Layer. Default is @code{"power"}. -@end ftable -@c ./../src/main.c 711 -@ftable @code -@item --layer-name-6 -Name of the 6rd Layer. Default is @code{"bottom"}. -@end ftable -@c ./../src/main.c 715 -@ftable @code -@item --layer-name-7 -Name of the 7rd Layer. Default is @code{"outline"}. -@end ftable -@c ./../src/main.c 719 -@ftable @code -@item --layer-name-8 -Name of the 8rd Layer. Default is @code{"spare"}. -@end ftable -@c options Paths -@node Paths -@section Paths -@c ./../src/main.c 769 -@ftable @code -@item --lib-newlib -Top level directory for the newlib style library. -@end ftable -@c ./../src/main.c 778 -@ftable @code -@item --lib-name -The default filename for the library. -@end ftable -@c ./../src/main.c 783 -@ftable @code -@item --default-font -The name of the default font. -@end ftable -@c ./../src/main.c 794 -@ftable @code -@item --file-path -A colon separated list of directories or commands (starts with '|'). The path -is passed to the program specified in @option{--file-command} together with the selected -filename. -@end ftable -@c ./../src/main.c 802 -@ftable @code -@item --font-path -A colon separated list of directories to search the default font. Defaults to -the default library path. -@end ftable -@c ./../src/main.c 812 -@ftable @code -@item --lib-path -A colon separated list of directories that will be passed to the commands specified -by @option{--element-command} and @option{--element-contents-command}. -@end ftable -@c options Sizes -@node Sizes -@section Sizes -@c ./../src/main.c 606 -All parameters should be given with an unit. If no unit is given, 1/100 mil -(cmil) will be used. Write units without space to the -number like @code{3mm}, not @code{3 mm}. -Valid Units are: - @table @samp - @item km - Kilometer - @item m - Meter - @item cm - Centimeter - @item mm - Millimeter - @item um - Micrometer - @item nm - Nanometer - @item in - Inch (1in = 0.0254m) - @item mil - Mil (1000mil = 1in) - @item cmil - Centimil (1/100 mil) -@end table - -@ftable @code -@item --via-thickness -Default diameter of vias. Default value is @code{60mil}. -@end ftable -@c ./../src/main.c 611 -@ftable @code -@item --via-drilling-hole -Default diameter of holes. Default value is @code{28mil}. -@end ftable -@c ./../src/main.c 616 -@ftable @code -@item --line-thickness -Default thickness of new lines. Default value is @code{10mil}. -@end ftable -@c ./../src/main.c 621 -@ftable @code -@item --rat-thickness -Thickness of rats. Values from 1 to 19 are fixed width in screen pixels. -Anything larger means PCB units (i.e. 100 means "1 mil"). Default value -is @code{10mil}. -@end ftable -@c ./../src/main.c 625 -@ftable @code -@item --keepaway -Default minimum distance between a track and adjacent copper. -Default value is @code{10mil}. -@end ftable -@c ./../src/main.c 629 -@ftable @code -@item --default-PCB-width -Default width of the canvas. Default value is @code{6000mil}. -@end ftable -@c ./../src/main.c 634 -@ftable @code -@item --default-PCB-height -Default height of the canvas. Default value is @code{5000mil}. -@end ftable -@c ./../src/main.c 639 -@ftable @code -@item --text-scale -Default text scale. This value is in percent. Default value is @code{100}. -@end ftable -@c ./../src/main.c 643 -@ftable @code -@item --alignment-distance -Specifies the distance between the board outline and alignment targets. -Default value is @code{2mil}. -@end ftable -@c ./../src/main.c 677 -@ftable @code -@item --grid -Initial grid size. Default value is @code{10mil}. -@end ftable -@c ./../src/main.c 681 -@ftable @code -@item --minimum polygon area -Minimum polygon area. -@end ftable -@c options Commands -@node Commands -@section Commands -@c ./../src/main.c 728 -pcb uses external commands for input output operations. These commands can be -configured at start-up to meet local requirements. The command string may include -special sequences @code{%f}, @code{%p} or @code{%a}. These are replaced when the -command is called. The sequence @code{%f} is replaced by the file name, -@code{%p} gets the path and @code{%a} indicates a package name. -@c ./../src/main.c 731 -@ftable @code -@item --font-command -Command to load a font. -@end ftable -@c ./../src/main.c 735 -@ftable @code -@item --file-command -Command to read a file. -@end ftable -@c ./../src/main.c 739 -@ftable @code -@item --element-command -Command to read a footprint. @* -Defaults to @code{"M4PATH='%p';export M4PATH;echo 'include(%f)' | m4"} -@end ftable -@c ./../src/main.c 745 -@ftable @code -@item --print-file -Command to print to a file. -@end ftable -@c ./../src/main.c 749 -@ftable @code -@item --lib-command-dir -Path to the command that queries the library. -@end ftable -@c ./../src/main.c 754 -@ftable @code -@item --lib-command -Command to query the library. @* -Defaults to @code{"QueryLibrary.sh '%p' '%f' %a"} -@end ftable -@c ./../src/main.c 759 -@ftable @code -@item --lib-contents-command -Command to query the contents of the library. @* -Defaults to @code{"ListLibraryContents.sh %p %f"} or, -on Windows builds, an empty string (to disable this feature). -@end ftable -@c ./../src/main.c 774 -@ftable @code -@item --save-command -Command to save to a file. -@end ftable -@c ./../src/main.c 798 -@ftable @code -@item --rat-command -Command for reading a netlist. Sequence @code{%f} is replaced by the netlist filename. -@end ftable -@c options DRC Options -@node DRC Options -@section DRC Options -@c ./../src/main.c 648 -All parameters should be given with an unit. If no unit is given, 1/100 mil -(cmil) will be used for backward compability. Valid units are given in section -@ref{Sizes}. -@c ./../src/main.c 652 -@ftable @code -@item --bloat -Minimum spacing. Default value is @code{10mil}. -@end ftable -@c ./../src/main.c 656 -@ftable @code -@item --shrink -Minimum touching overlap. Default value is @code{10mil}. -@end ftable -@c ./../src/main.c 660 -@ftable @code -@item --min-width -Minimum width of copper. Default value is @code{10mil}. -@end ftable -@c ./../src/main.c 664 -@ftable @code -@item --min-silk -Minimum width of lines in silk. Default value is @code{10mil}. -@end ftable -@c ./../src/main.c 668 -@ftable @code -@item --min-drill -Minimum diameter of holes. Default value is @code{15mil}. -@end ftable -@c ./../src/main.c 672 -@ftable @code -@item --min-ring -Minimum width of annular ring. Default value is @code{10mil}. -@end ftable -@c options BOM Creation -@node BOM Creation -@section BOM Creation -@c ./../src/hid/bom/bom.c 30 -@ftable @code -@item --bomfile -Name of the BOM output file. -@end ftable -@c ./../src/hid/bom/bom.c 35 -@ftable @code -@item --xyfile -Name of the XY output file. -@end ftable -@c ./../src/hid/bom/bom.c 41 -@ftable @code -@item --xy-unit -Unit of XY dimensions. Defaults to mil. -@end ftable -@c options Gerber Export -@node Gerber Export -@section Gerber Export -@c ./../src/hid/gerber/gerber.c 338 -@ftable @code -@item --gerberfile -Gerber output file prefix. Can include a path. -@end ftable -@c ./../src/hid/gerber/gerber.c 344 -@ftable @code -@item --all-layers -Output contains all layers, even empty ones. -@end ftable -@c ./../src/hid/gerber/gerber.c 350 -@ftable @code -@item --verbose -Print file names and aperture counts on stdout. -@end ftable -@c options Postscript Export -@node Postscript Export -@section Postscript Export -@c ./../src/hid/ps/ps.c 149 -@ftable @code -@item --psfile -Name of the postscript output file. Can contain a path. -@end ftable -@c ./../src/hid/ps/ps.c 155 -@ftable @code -@cindex drill-helper -@item --drill-helper -Print a centering target in large drill holes. -@end ftable -@c ./../src/hid/ps/ps.c 161 -@ftable @code -@cindex align-marks -@item --align-marks -Print alignment marks on each sheet. This is meant to ease alignment during exposure. -@end ftable -@c ./../src/hid/ps/ps.c 167 -@ftable @code -@item --outline -Print the contents of the outline layer on each sheet. -@end ftable -@c ./../src/hid/ps/ps.c 172 -@ftable @code -@item --mirror -Print mirror image. -@end ftable -@c ./../src/hid/ps/ps.c 178 -@ftable @code -@item --fill-page -Scale output to make the board fit the page. -@end ftable -@c ./../src/hid/ps/ps.c 184 -@ftable @code -@item --auto-mirror -Print mirror image of appropriate layers. -@end ftable -@c ./../src/hid/ps/ps.c 190 -@ftable @code -@item --ps-color -Postscript output in color. -@end ftable -@c ./../src/hid/ps/ps.c 196 -@ftable @code -@cindex ps-bloat -@item --ps-bloat -Amount to add to trace/pad/pin edges. -@end ftable -@c ./../src/hid/ps/ps.c 202 -@ftable @code -@cindex ps-invert -@item --ps-invert -Draw objects as white-on-black. -@end ftable -@c ./../src/hid/ps/ps.c 208 -@ftable @code -@item --media -Size of the media, the postscript is fitted to. The parameter -@code{} can be any of the standard names for paper size: @samp{A0} -to @samp{A10}, @samp{B0} to @samp{B10}, @samp{Letter}, @samp{11x17}, -@samp{Ledger}, @samp{Legal}, @samp{Executive}, @samp{A-Size}, @samp{B-size}, -@samp{C-Size}, @samp{D-size}, @samp{E-size}, @samp{US-Business_Card}, -@samp{Intl-Business_Card}. -@end ftable -@c ./../src/hid/ps/ps.c 214 -@ftable @code -@cindex psfade -@item --psfade -Fade amount for assembly drawings (0.0=missing, 1.0=solid). -@end ftable -@c ./../src/hid/ps/ps.c 220 -@ftable @code -@item --scale -Scale value to compensate for printer sizing errors (1.0 = full scale). -@end ftable -@c ./../src/hid/ps/ps.c 226 -@ftable @code -@cindex multi-file -@item --multi-file -Produce multiple files, one per page, instead of a single multi page file. -@end ftable -@c ./../src/hid/ps/ps.c 232 -@ftable @code -@item --xcalib -Paper width. Used for x-Axis calibration. -@end ftable -@c ./../src/hid/ps/ps.c 238 -@ftable @code -@item --ycalib -Paper height. Used for y-Axis calibration. -@end ftable -@c ./../src/hid/ps/ps.c 244 -@ftable @code -@item --drill-copper -Draw drill holes in pins / vias, instead of leaving solid copper. -@end ftable -@c ./../src/hid/ps/ps.c 250 -@ftable @code -@cindex show-legend -@item --show-legend -Print file name and scale on printout. -@end ftable -@c options Encapsulated Postscript Export -@node Encapsulated Postscript Export -@section Encapsulated Postscript Export -@c ./../src/hid/ps/eps.c 78 -@ftable @code -@item --eps-file -Name of the encapsulated postscript output file. Can contain a path. -@end ftable -@c ./../src/hid/ps/eps.c 84 -@ftable @code -@item --eps-scale -Scale EPS output by the parameter @samp{num}. -@end ftable -@c ./../src/hid/ps/eps.c 90 -@ftable @code -@cindex as-shown (EPS) -@item --as-shown -Export layers as shown on screen. -@end ftable -@c ./../src/hid/ps/eps.c 96 -@ftable @code -@item --monochrome -Convert output to monochrome. -@end ftable -@c ./../src/hid/ps/eps.c 102 -@ftable @code -@cindex only-visible -@item --only-visible -Limit the bounds of the EPS file to the visible items. -@end ftable -@c options PNG Options -@node PNG Options -@section PNG Options -@c ./../src/hid/png/png.c 168 -@ftable @code -@item --outfile -Name of the file to be exported to. Can contain a path. -@end ftable -@c ./../src/hid/png/png.c 174 -@ftable @code -@item --dpi -Scale factor in pixels/inch. Set to 0 to scale to size specified in the layout. -@end ftable -@c ./../src/hid/png/png.c 180 -@ftable @code -@item --x-max -Width of the png image in pixels. No constraint, when set to 0. -@end ftable -@c ./../src/hid/png/png.c 186 -@ftable @code -@item --y-max -Height of the png output in pixels. No constraint, when set to 0. -@end ftable -@c ./../src/hid/png/png.c 192 -@ftable @code -@item --xy-max -Maximum width and height of the PNG output in pixels. No constraint, when set to 0. -@end ftable -@c ./../src/hid/png/png.c 198 -@ftable @code -@item --as-shown -Export layers as shown on screen. -@end ftable -@c ./../src/hid/png/png.c 204 -@ftable @code -@item --monochrome -Convert output to monochrome. -@end ftable -@c ./../src/hid/png/png.c 210 -@ftable @code -@item --only-vivible -Limit the bounds of the exported PNG image to the visible items. -@end ftable -@c ./../src/hid/png/png.c 216 -@ftable @code -@item --use-alpha -Make the background and any holes transparent. -@end ftable -@c ./../src/hid/png/png.c 222 -@ftable @code -@item --format -File format to be exported. Parameter @code{} can be @samp{PNG}, -@samp{GIF}, or @samp{JPEG}. -@end ftable -@c ./../src/hid/png/png.c 228 -@ftable @code -@item --png-bloat -Amount of extra thickness to add to traces, pads, or pin edges. The parameter -@samp{} is a number, appended by a dimension @samp{mm}, @samp{mil}, or -@samp{pix}. If no dimension is given, the default dimension is 1/100 mil. -@end ftable -@c ./../src/hid/png/png.c 234 -@ftable @code -@cindex photo-mode -@item --photo-mode -Export a photo realistic image of the layout. -@end ftable -@c ./../src/hid/png/png.c 240 -@ftable @code -@item --photo-flip-x -In photo-realistic mode, export the reverse side of the layout. Left-right flip. -@end ftable -@c ./../src/hid/png/png.c 246 -@ftable @code -@item --photo-flip-y -In photo-realistic mode, export the reverse side of the layout. Up-down flip. -@end ftable -@c options lpr Printing Options -@node lpr Printing Options -@section lpr Printing Options -@c ./../src/hid/lpr/lpr.c 33 -@ftable @code -@item --lprcommand -Command to use for printing. Defaults to @code{lpr}. This can be used to produce -PDF output with a virtual PDF printer. Example: @* -@code{--lprcommand "lp -d CUPS-PDF-Printer"}. -@end ftable -@noindent In addition, all @ref{Postscript Export} options are valid. -@c options nelma Options -@node nelma Options -@section nelma Options -@c ./../src/hid/nelma/nelma.c 157 -@ftable @code -@item -- basename -File name prefix. -@end ftable -@c ./../src/hid/nelma/nelma.c 163 -@ftable @code -@item --dpi -Horizontal scale factor (grid points/inch). -@end ftable -@c ./../src/hid/nelma/nelma.c 169 -@ftable @code -@item --copper-height -Copper layer height (um). -@end ftable -@c ./../src/hid/nelma/nelma.c 175 -@ftable @code -@item --substrate-height -Substrate layer height (um). -@end ftable -@c ./../src/hid/nelma/nelma.c 181 -@ftable @code -@item --substrate-epsilon -Substrate relative epsilon. -@end ftable Index: trunk/doc/gcode.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: trunk/doc/gcode.png =================================================================== --- trunk/doc/gcode.png (revision 1036) +++ trunk/doc/gcode.png (nonexistent) Property changes on: trunk/doc/gcode.png ___________________________________________________________________ Deleted: svn:mime-type ## -1 +0,0 ## -application/octet-stream \ No newline at end of property Index: trunk/doc/pad.pcb =================================================================== --- trunk/doc/pad.pcb (revision 1036) +++ trunk/doc/pad.pcb (nonexistent) @@ -1,911 +0,0 @@ -# release: pcb-bin 1.99q - -PCB["pad" 600000 500000] - -Grid[2000.00000000 0 0 1] -Cursor[88600 72400 2.000000] -Thermal[0.500000] -DRC[699 400 800 800 1000 750] -Flags(0x0000000000000840) -Groups("1,s:2,c:3:4:5:6:7:8") -Styles["Signal,1000,3600,2000,1000:Power,2500,6000,3500,1000:Fat,4000,6000,3500,1000:Skinny,200,2402,1181,600"] - -Symbol[' ' 1800] -( -) -Symbol['!' 1200] -( - SymbolLine[0 4500 0 5000 800] - SymbolLine[0 1000 0 3500 800] -) -Symbol['"' 1200] -( - SymbolLine[0 1000 0 2000 800] - SymbolLine[1000 1000 1000 2000 800] -) -Symbol['#' 1200] -( - SymbolLine[0 3500 2000 3500 800] - SymbolLine[0 2500 2000 2500 800] - SymbolLine[1500 2000 1500 4000 800] - SymbolLine[500 2000 500 4000 800] -) -Symbol['$' 1200] -( - SymbolLine[1500 1500 2000 2000 800] - SymbolLine[500 1500 1500 1500 800] - SymbolLine[0 2000 500 1500 800] - SymbolLine[0 2000 0 2500 800] - SymbolLine[0 2500 500 3000 800] - SymbolLine[500 3000 1500 3000 800] - SymbolLine[1500 3000 2000 3500 800] - SymbolLine[2000 3500 2000 4000 800] - SymbolLine[1500 4500 2000 4000 800] - SymbolLine[500 4500 1500 4500 800] - SymbolLine[0 4000 500 4500 800] - SymbolLine[1000 1000 1000 5000 800] -) -Symbol['%' 1200] -( - SymbolLine[0 1500 0 2000 800] - SymbolLine[0 1500 500 1000 800] - SymbolLine[500 1000 1000 1000 800] - SymbolLine[1000 1000 1500 1500 800] - SymbolLine[1500 1500 1500 2000 800] - SymbolLine[1000 2500 1500 2000 800] - SymbolLine[500 2500 1000 2500 800] - SymbolLine[0 2000 500 2500 800] - SymbolLine[0 5000 4000 1000 800] - SymbolLine[3500 5000 4000 4500 800] - SymbolLine[4000 4000 4000 4500 800] - SymbolLine[3500 3500 4000 4000 800] - SymbolLine[3000 3500 3500 3500 800] - SymbolLine[2500 4000 3000 3500 800] - SymbolLine[2500 4000 2500 4500 800] - SymbolLine[2500 4500 3000 5000 800] - SymbolLine[3000 5000 3500 5000 800] -) -Symbol['&' 1200] -( - SymbolLine[0 4500 500 5000 800] - SymbolLine[0 1500 0 2500 800] - SymbolLine[0 1500 500 1000 800] - SymbolLine[0 3500 1500 2000 800] - SymbolLine[500 5000 1000 5000 800] - SymbolLine[1000 5000 2000 4000 800] - SymbolLine[0 2500 2500 5000 800] - SymbolLine[500 1000 1000 1000 800] - SymbolLine[1000 1000 1500 1500 800] - SymbolLine[1500 1500 1500 2000 800] - SymbolLine[0 3500 0 4500 800] -) -Symbol[''' 1200] -( - SymbolLine[0 2000 1000 1000 800] -) -Symbol['(' 1200] -( - SymbolLine[0 4500 500 5000 800] - SymbolLine[0 1500 500 1000 800] - SymbolLine[0 1500 0 4500 800] -) -Symbol[')' 1200] -( - SymbolLine[0 1000 500 1500 800] - SymbolLine[500 1500 500 4500 800] - SymbolLine[0 5000 500 4500 800] -) -Symbol['*' 1200] -( - SymbolLine[0 2000 2000 4000 800] - SymbolLine[0 4000 2000 2000 800] - SymbolLine[0 3000 2000 3000 800] - SymbolLine[1000 2000 1000 4000 800] -) -Symbol['+' 1200] -( - SymbolLine[0 3000 2000 3000 800] - SymbolLine[1000 2000 1000 4000 800] -) -Symbol[',' 1200] -( - SymbolLine[0 6000 1000 5000 800] -) -Symbol['-' 1200] -( - SymbolLine[0 3000 2000 3000 800] -) -Symbol['.' 1200] -( - SymbolLine[0 5000 500 5000 800] -) -Symbol['/' 1200] -( - SymbolLine[0 4500 3000 1500 800] -) -Symbol['0' 1200] -( - SymbolLine[0 4500 500 5000 800] - SymbolLine[0 1500 0 4500 800] - SymbolLine[0 1500 500 1000 800] - SymbolLine[500 1000 1500 1000 800] - SymbolLine[1500 1000 2000 1500 800] - SymbolLine[2000 1500 2000 4500 800] - SymbolLine[1500 5000 2000 4500 800] - SymbolLine[500 5000 1500 5000 800] - SymbolLine[0 4000 2000 2000 800] -) -Symbol['1' 1200] -( - SymbolLine[500 5000 1500 5000 800] - SymbolLine[1000 1000 1000 5000 800] - SymbolLine[0 2000 1000 1000 800] -) -Symbol['2' 1200] -( - SymbolLine[0 1500 500 1000 800] - SymbolLine[500 1000 2000 1000 800] - SymbolLine[2000 1000 2500 1500 800] - SymbolLine[2500 1500 2500 2500 800] - SymbolLine[0 5000 2500 2500 800] - SymbolLine[0 5000 2500 5000 800] -) -Symbol['3' 1200] -( - SymbolLine[0 1500 500 1000 800] - SymbolLine[500 1000 1500 1000 800] - SymbolLine[1500 1000 2000 1500 800] - SymbolLine[2000 1500 2000 4500 800] - SymbolLine[1500 5000 2000 4500 800] - SymbolLine[500 5000 1500 5000 800] - SymbolLine[0 4500 500 5000 800] - SymbolLine[500 3000 2000 3000 800] -) -Symbol['4' 1200] -( - SymbolLine[0 3000 2000 1000 800] - SymbolLine[0 3000 2500 3000 800] - SymbolLine[2000 1000 2000 5000 800] -) -Symbol['5' 1200] -( - SymbolLine[0 1000 2000 1000 800] - SymbolLine[0 1000 0 3000 800] - SymbolLine[0 3000 500 2500 800] - SymbolLine[500 2500 1500 2500 800] - SymbolLine[1500 2500 2000 3000 800] - SymbolLine[2000 3000 2000 4500 800] - SymbolLine[1500 5000 2000 4500 800] - SymbolLine[500 5000 1500 5000 800] - SymbolLine[0 4500 500 5000 800] -) -Symbol['6' 1200] -( - SymbolLine[1500 1000 2000 1500 800] - SymbolLine[500 1000 1500 1000 800] - SymbolLine[0 1500 500 1000 800] - SymbolLine[0 1500 0 4500 800] - SymbolLine[0 4500 500 5000 800] - SymbolLine[1500 3000 2000 3500 800] - SymbolLine[0 3000 1500 3000 800] - SymbolLine[500 5000 1500 5000 800] - SymbolLine[1500 5000 2000 4500 800] - SymbolLine[2000 3500 2000 4500 800] -) -Symbol['7' 1200] -( - SymbolLine[0 5000 2500 2500 800] - SymbolLine[2500 1000 2500 2500 800] - SymbolLine[0 1000 2500 1000 800] -) -Symbol['8' 1200] -( - SymbolLine[0 4500 500 5000 800] - SymbolLine[0 3500 0 4500 800] - SymbolLine[0 3500 500 3000 800] - SymbolLine[500 3000 1500 3000 800] - SymbolLine[1500 3000 2000 3500 800] - SymbolLine[2000 3500 2000 4500 800] - SymbolLine[1500 5000 2000 4500 800] - SymbolLine[500 5000 1500 5000 800] - SymbolLine[0 2500 500 3000 800] - SymbolLine[0 1500 0 2500 800] - SymbolLine[0 1500 500 1000 800] - SymbolLine[500 1000 1500 1000 800] - SymbolLine[1500 1000 2000 1500 800] - SymbolLine[2000 1500 2000 2500 800] - SymbolLine[1500 3000 2000 2500 800] -) -Symbol['9' 1200] -( - SymbolLine[0 5000 2000 3000 800] - SymbolLine[2000 1500 2000 3000 800] - SymbolLine[1500 1000 2000 1500 800] - SymbolLine[500 1000 1500 1000 800] - SymbolLine[0 1500 500 1000 800] - SymbolLine[0 1500 0 2500 800] - SymbolLine[0 2500 500 3000 800] - SymbolLine[500 3000 2000 3000 800] -) -Symbol[':' 1200] -( - SymbolLine[0 2500 500 2500 800] - SymbolLine[0 3500 500 3500 800] -) -Symbol[';' 1200] -( - SymbolLine[0 5000 1000 4000 800] - SymbolLine[1000 2500 1000 3000 800] -) -Symbol['<' 1200] -( - SymbolLine[0 3000 1000 2000 800] - SymbolLine[0 3000 1000 4000 800] -) -Symbol['=' 1200] -( - SymbolLine[0 2500 2000 2500 800] - SymbolLine[0 3500 2000 3500 800] -) -Symbol['>' 1200] -( - SymbolLine[0 2000 1000 3000 800] - SymbolLine[0 4000 1000 3000 800] -) -Symbol['?' 1200] -( - SymbolLine[1000 3000 1000 3500 800] - SymbolLine[1000 4500 1000 5000 800] - SymbolLine[0 1500 0 2000 800] - SymbolLine[0 1500 500 1000 800] - SymbolLine[500 1000 1500 1000 800] - SymbolLine[1500 1000 2000 1500 800] - SymbolLine[2000 1500 2000 2000 800] - SymbolLine[1000 3000 2000 2000 800] -) -Symbol['@' 1200] -( - SymbolLine[0 1000 0 4000 800] - SymbolLine[0 4000 1000 5000 800] - SymbolLine[1000 5000 4000 5000 800] - SymbolLine[5000 3500 5000 1000 800] - SymbolLine[5000 1000 4000 0 800] - SymbolLine[4000 0 1000 0 800] - SymbolLine[1000 0 0 1000 800] - SymbolLine[1500 2000 1500 3000 800] - SymbolLine[1500 3000 2000 3500 800] - SymbolLine[2000 3500 3000 3500 800] - SymbolLine[3000 3500 3500 3000 800] - SymbolLine[3500 3000 4000 3500 800] - SymbolLine[3500 3000 3500 1500 800] - SymbolLine[3500 2000 3000 1500 800] - SymbolLine[2000 1500 3000 1500 800] - SymbolLine[2000 1500 1500 2000 800] - SymbolLine[4000 3500 5000 3500 800] -) -Symbol['A' 1200] -( - SymbolLine[0 1500 0 5000 800] - SymbolLine[0 1500 500 1000 800] - SymbolLine[500 1000 2000 1000 800] - SymbolLine[2000 1000 2500 1500 800] - SymbolLine[2500 1500 2500 5000 800] - SymbolLine[0 3000 2500 3000 800] -) -Symbol['B' 1200] -( - SymbolLine[0 5000 2000 5000 800] - SymbolLine[2000 5000 2500 4500 800] - SymbolLine[2500 3500 2500 4500 800] - SymbolLine[2000 3000 2500 3500 800] - SymbolLine[500 3000 2000 3000 800] - SymbolLine[500 1000 500 5000 800] - SymbolLine[0 1000 2000 1000 800] - SymbolLine[2000 1000 2500 1500 800] - SymbolLine[2500 1500 2500 2500 800] - SymbolLine[2000 3000 2500 2500 800] -) -Symbol['C' 1200] -( - SymbolLine[500 5000 2000 5000 800] - SymbolLine[0 4500 500 5000 800] - SymbolLine[0 1500 0 4500 800] - SymbolLine[0 1500 500 1000 800] - SymbolLine[500 1000 2000 1000 800] -) -Symbol['D' 1200] -( - SymbolLine[500 1000 500 5000 800] - SymbolLine[2000 1000 2500 1500 800] - SymbolLine[2500 1500 2500 4500 800] - SymbolLine[2000 5000 2500 4500 800] - SymbolLine[0 5000 2000 5000 800] - SymbolLine[0 1000 2000 1000 800] -) -Symbol['E' 1200] -( - SymbolLine[0 3000 1500 3000 800] - SymbolLine[0 5000 2000 5000 800] - SymbolLine[0 1000 0 5000 800] - SymbolLine[0 1000 2000 1000 800] -) -Symbol['F' 1200] -( - SymbolLine[0 1000 0 5000 800] - SymbolLine[0 1000 2000 1000 800] - SymbolLine[0 3000 1500 3000 800] -) -Symbol['G' 1200] -( - SymbolLine[2000 1000 2500 1500 800] - SymbolLine[500 1000 2000 1000 800] - SymbolLine[0 1500 500 1000 800] - SymbolLine[0 1500 0 4500 800] - SymbolLine[0 4500 500 5000 800] - SymbolLine[500 5000 2000 5000 800] - SymbolLine[2000 5000 2500 4500 800] - SymbolLine[2500 3500 2500 4500 800] - SymbolLine[2000 3000 2500 3500 800] - SymbolLine[1000 3000 2000 3000 800] -) -Symbol['H' 1200] -( - SymbolLine[0 1000 0 5000 800] - SymbolLine[2500 1000 2500 5000 800] - SymbolLine[0 3000 2500 3000 800] -) -Symbol['I' 1200] -( - SymbolLine[0 1000 1000 1000 800] - SymbolLine[500 1000 500 5000 800] - SymbolLine[0 5000 1000 5000 800] -) -Symbol['J' 1200] -( - SymbolLine[0 1000 1500 1000 800] - SymbolLine[1500 1000 1500 4500 800] - SymbolLine[1000 5000 1500 4500 800] - SymbolLine[500 5000 1000 5000 800] - SymbolLine[0 4500 500 5000 800] -) -Symbol['K' 1200] -( - SymbolLine[0 1000 0 5000 800] - SymbolLine[0 3000 2000 1000 800] - SymbolLine[0 3000 2000 5000 800] -) -Symbol['L' 1200] -( - SymbolLine[0 1000 0 5000 800] - SymbolLine[0 5000 2000 5000 800] -) -Symbol['M' 1200] -( - SymbolLine[0 1000 0 5000 800] - SymbolLine[0 1000 1500 2500 800] - SymbolLine[1500 2500 3000 1000 800] - SymbolLine[3000 1000 3000 5000 800] -) -Symbol['N' 1200] -( - SymbolLine[0 1000 0 5000 800] - SymbolLine[0 1000 0 1500 800] - SymbolLine[0 1500 2500 4000 800] - SymbolLine[2500 1000 2500 5000 800] -) -Symbol['O' 1200] -( - SymbolLine[0 1500 0 4500 800] - SymbolLine[0 1500 500 1000 800] - SymbolLine[500 1000 1500 1000 800] - SymbolLine[1500 1000 2000 1500 800] - SymbolLine[2000 1500 2000 4500 800] - SymbolLine[1500 5000 2000 4500 800] - SymbolLine[500 5000 1500 5000 800] - SymbolLine[0 4500 500 5000 800] -) -Symbol['P' 1200] -( - SymbolLine[500 1000 500 5000 800] - SymbolLine[0 1000 2000 1000 800] - SymbolLine[2000 1000 2500 1500 800] - SymbolLine[2500 1500 2500 2500 800] - SymbolLine[2000 3000 2500 2500 800] - SymbolLine[500 3000 2000 3000 800] -) -Symbol['Q' 1200] -( - SymbolLine[0 1500 0 4500 800] - SymbolLine[0 1500 500 1000 800] - SymbolLine[500 1000 1500 1000 800] - SymbolLine[1500 1000 2000 1500 800] - SymbolLine[2000 1500 2000 4500 800] - SymbolLine[1500 5000 2000 4500 800] - SymbolLine[500 5000 1500 5000 800] - SymbolLine[0 4500 500 5000 800] - SymbolLine[1000 4000 2000 5000 800] -) -Symbol['R' 1200] -( - SymbolLine[0 1000 2000 1000 800] - SymbolLine[2000 1000 2500 1500 800] - SymbolLine[2500 1500 2500 2500 800] - SymbolLine[2000 3000 2500 2500 800] - SymbolLine[500 3000 2000 3000 800] - SymbolLine[500 1000 500 5000 800] - SymbolLine[500 3000 2500 5000 800] -) -Symbol['S' 1200] -( - SymbolLine[2000 1000 2500 1500 800] - SymbolLine[500 1000 2000 1000 800] - SymbolLine[0 1500 500 1000 800] - SymbolLine[0 1500 0 2500 800] - SymbolLine[0 2500 500 3000 800] - SymbolLine[500 3000 2000 3000 800] - SymbolLine[2000 3000 2500 3500 800] - SymbolLine[2500 3500 2500 4500 800] - SymbolLine[2000 5000 2500 4500 800] - SymbolLine[500 5000 2000 5000 800] - SymbolLine[0 4500 500 5000 800] -) -Symbol['T' 1200] -( - SymbolLine[0 1000 2000 1000 800] - SymbolLine[1000 1000 1000 5000 800] -) -Symbol['U' 1200] -( - SymbolLine[0 1000 0 4500 800] - SymbolLine[0 4500 500 5000 800] - SymbolLine[500 5000 1500 5000 800] - SymbolLine[1500 5000 2000 4500 800] - SymbolLine[2000 1000 2000 4500 800] -) -Symbol['V' 1200] -( - SymbolLine[0 1000 0 4000 800] - SymbolLine[0 4000 1000 5000 800] - SymbolLine[1000 5000 2000 4000 800] - SymbolLine[2000 1000 2000 4000 800] -) -Symbol['W' 1200] -( - SymbolLine[0 1000 0 5000 800] - SymbolLine[0 5000 1500 3500 800] - SymbolLine[1500 3500 3000 5000 800] - SymbolLine[3000 1000 3000 5000 800] -) -Symbol['X' 1200] -( - SymbolLine[0 1000 0 1500 800] - SymbolLine[0 1500 2500 4000 800] - SymbolLine[2500 4000 2500 5000 800] - SymbolLine[0 4000 0 5000 800] - SymbolLine[0 4000 2500 1500 800] - SymbolLine[2500 1000 2500 1500 800] -) -Symbol['Y' 1200] -( - SymbolLine[0 1000 0 1500 800] - SymbolLine[0 1500 1000 2500 800] - SymbolLine[1000 2500 2000 1500 800] - SymbolLine[2000 1000 2000 1500 800] - SymbolLine[1000 2500 1000 5000 800] -) -Symbol['Z' 1200] -( - SymbolLine[0 1000 2500 1000 800] - SymbolLine[2500 1000 2500 1500 800] - SymbolLine[0 4000 2500 1500 800] - SymbolLine[0 4000 0 5000 800] - SymbolLine[0 5000 2500 5000 800] -) -Symbol['[' 1200] -( - SymbolLine[0 1000 500 1000 800] - SymbolLine[0 1000 0 5000 800] - SymbolLine[0 5000 500 5000 800] -) -Symbol['\' 1200] -( - SymbolLine[0 1500 3000 4500 800] -) -Symbol[']' 1200] -( - SymbolLine[0 1000 500 1000 800] - SymbolLine[500 1000 500 5000 800] - SymbolLine[0 5000 500 5000 800] -) -Symbol['^' 1200] -( - SymbolLine[0 1500 500 1000 800] - SymbolLine[500 1000 1000 1500 800] -) -Symbol['_' 1200] -( - SymbolLine[0 5000 2000 5000 800] -) -Symbol['a' 1200] -( - SymbolLine[1500 3000 2000 3500 800] - SymbolLine[500 3000 1500 3000 800] - SymbolLine[0 3500 500 3000 800] - SymbolLine[0 3500 0 4500 800] - SymbolLine[0 4500 500 5000 800] - SymbolLine[2000 3000 2000 4500 800] - SymbolLine[2000 4500 2500 5000 800] - SymbolLine[500 5000 1500 5000 800] - SymbolLine[1500 5000 2000 4500 800] -) -Symbol['b' 1200] -( - SymbolLine[0 1000 0 5000 800] - SymbolLine[0 4500 500 5000 800] - SymbolLine[500 5000 1500 5000 800] - SymbolLine[1500 5000 2000 4500 800] - SymbolLine[2000 3500 2000 4500 800] - SymbolLine[1500 3000 2000 3500 800] - SymbolLine[500 3000 1500 3000 800] - SymbolLine[0 3500 500 3000 800] -) -Symbol['c' 1200] -( - SymbolLine[500 3000 2000 3000 800] - SymbolLine[0 3500 500 3000 800] - SymbolLine[0 3500 0 4500 800] - SymbolLine[0 4500 500 5000 800] - SymbolLine[500 5000 2000 5000 800] -) -Symbol['d' 1200] -( - SymbolLine[2000 1000 2000 5000 800] - SymbolLine[1500 5000 2000 4500 800] - SymbolLine[500 5000 1500 5000 800] - SymbolLine[0 4500 500 5000 800] - SymbolLine[0 3500 0 4500 800] - SymbolLine[0 3500 500 3000 800] - SymbolLine[500 3000 1500 3000 800] - SymbolLine[1500 3000 2000 3500 800] -) -Symbol['e' 1200] -( - SymbolLine[500 5000 2000 5000 800] - SymbolLine[0 4500 500 5000 800] - SymbolLine[0 3500 0 4500 800] - SymbolLine[0 3500 500 3000 800] - SymbolLine[500 3000 1500 3000 800] - SymbolLine[1500 3000 2000 3500 800] - SymbolLine[0 4000 2000 4000 800] - SymbolLine[2000 4000 2000 3500 800] -) -Symbol['f' 1000] -( - SymbolLine[500 1500 500 5000 800] - SymbolLine[500 1500 1000 1000 800] - SymbolLine[1000 1000 1500 1000 800] - SymbolLine[0 3000 1000 3000 800] -) -Symbol['g' 1200] -( - SymbolLine[1500 3000 2000 3500 800] - SymbolLine[500 3000 1500 3000 800] - SymbolLine[0 3500 500 3000 800] - SymbolLine[0 3500 0 4500 800] - SymbolLine[0 4500 500 5000 800] - SymbolLine[500 5000 1500 5000 800] - SymbolLine[1500 5000 2000 4500 800] - SymbolLine[0 6000 500 6500 800] - SymbolLine[500 6500 1500 6500 800] - SymbolLine[1500 6500 2000 6000 800] - SymbolLine[2000 3000 2000 6000 800] -) -Symbol['h' 1200] -( - SymbolLine[0 1000 0 5000 800] - SymbolLine[0 3500 500 3000 800] - SymbolLine[500 3000 1500 3000 800] - SymbolLine[1500 3000 2000 3500 800] - SymbolLine[2000 3500 2000 5000 800] -) -Symbol['i' 1000] -( - SymbolLine[0 2000 0 2500 800] - SymbolLine[0 3500 0 5000 800] -) -Symbol['j' 1000] -( - SymbolLine[500 2000 500 2500 800] - SymbolLine[500 3500 500 6000 800] - SymbolLine[0 6500 500 6000 800] -) -Symbol['k' 1200] -( - SymbolLine[0 1000 0 5000 800] - SymbolLine[0 3500 1500 5000 800] - SymbolLine[0 3500 1000 2500 800] -) -Symbol['l' 1000] -( - SymbolLine[0 1000 0 4500 800] - SymbolLine[0 4500 500 5000 800] -) -Symbol['m' 1200] -( - SymbolLine[500 3500 500 5000 800] - SymbolLine[500 3500 1000 3000 800] - SymbolLine[1000 3000 1500 3000 800] - SymbolLine[1500 3000 2000 3500 800] - SymbolLine[2000 3500 2000 5000 800] - SymbolLine[2000 3500 2500 3000 800] - SymbolLine[2500 3000 3000 3000 800] - SymbolLine[3000 3000 3500 3500 800] - SymbolLine[3500 3500 3500 5000 800] - SymbolLine[0 3000 500 3500 800] -) -Symbol['n' 1200] -( - SymbolLine[500 3500 500 5000 800] - SymbolLine[500 3500 1000 3000 800] - SymbolLine[1000 3000 1500 3000 800] - SymbolLine[1500 3000 2000 3500 800] - SymbolLine[2000 3500 2000 5000 800] - SymbolLine[0 3000 500 3500 800] -) -Symbol['o' 1200] -( - SymbolLine[0 3500 0 4500 800] - SymbolLine[0 3500 500 3000 800] - SymbolLine[500 3000 1500 3000 800] - SymbolLine[1500 3000 2000 3500 800] - SymbolLine[2000 3500 2000 4500 800] - SymbolLine[1500 5000 2000 4500 800] - SymbolLine[500 5000 1500 5000 800] - SymbolLine[0 4500 500 5000 800] -) -Symbol['p' 1200] -( - SymbolLine[500 3500 500 6500 800] - SymbolLine[0 3000 500 3500 800] - SymbolLine[500 3500 1000 3000 800] - SymbolLine[1000 3000 2000 3000 800] - SymbolLine[2000 3000 2500 3500 800] - SymbolLine[2500 3500 2500 4500 800] - SymbolLine[2000 5000 2500 4500 800] - SymbolLine[1000 5000 2000 5000 800] - SymbolLine[500 4500 1000 5000 800] -) -Symbol['q' 1200] -( - SymbolLine[2000 3500 2000 6500 800] - SymbolLine[1500 3000 2000 3500 800] - SymbolLine[500 3000 1500 3000 800] - SymbolLine[0 3500 500 3000 800] - SymbolLine[0 3500 0 4500 800] - SymbolLine[0 4500 500 5000 800] - SymbolLine[500 5000 1500 5000 800] - SymbolLine[1500 5000 2000 4500 800] -) -Symbol['r' 1200] -( - SymbolLine[500 3500 500 5000 800] - SymbolLine[500 3500 1000 3000 800] - SymbolLine[1000 3000 2000 3000 800] - SymbolLine[0 3000 500 3500 800] -) -Symbol['s' 1200] -( - SymbolLine[500 5000 2000 5000 800] - SymbolLine[2000 5000 2500 4500 800] - SymbolLine[2000 4000 2500 4500 800] - SymbolLine[500 4000 2000 4000 800] - SymbolLine[0 3500 500 4000 800] - SymbolLine[0 3500 500 3000 800] - SymbolLine[500 3000 2000 3000 800] - SymbolLine[2000 3000 2500 3500 800] - SymbolLine[0 4500 500 5000 800] -) -Symbol['t' 1000] -( - SymbolLine[500 1000 500 4500 800] - SymbolLine[500 4500 1000 5000 800] - SymbolLine[0 2500 1000 2500 800] -) -Symbol['u' 1200] -( - SymbolLine[0 3000 0 4500 800] - SymbolLine[0 4500 500 5000 800] - SymbolLine[500 5000 1500 5000 800] - SymbolLine[1500 5000 2000 4500 800] - SymbolLine[2000 3000 2000 4500 800] -) -Symbol['v' 1200] -( - SymbolLine[0 3000 0 4000 800] - SymbolLine[0 4000 1000 5000 800] - SymbolLine[1000 5000 2000 4000 800] - SymbolLine[2000 3000 2000 4000 800] -) -Symbol['w' 1200] -( - SymbolLine[0 3000 0 4500 800] - SymbolLine[0 4500 500 5000 800] - SymbolLine[500 5000 1000 5000 800] - SymbolLine[1000 5000 1500 4500 800] - SymbolLine[1500 3000 1500 4500 800] - SymbolLine[1500 4500 2000 5000 800] - SymbolLine[2000 5000 2500 5000 800] - SymbolLine[2500 5000 3000 4500 800] - SymbolLine[3000 3000 3000 4500 800] -) -Symbol['x' 1200] -( - SymbolLine[0 3000 2000 5000 800] - SymbolLine[0 5000 2000 3000 800] -) -Symbol['y' 1200] -( - SymbolLine[0 3000 0 4500 800] - SymbolLine[0 4500 500 5000 800] - SymbolLine[2000 3000 2000 6000 800] - SymbolLine[1500 6500 2000 6000 800] - SymbolLine[500 6500 1500 6500 800] - SymbolLine[0 6000 500 6500 800] - SymbolLine[500 5000 1500 5000 800] - SymbolLine[1500 5000 2000 4500 800] -) -Symbol['z' 1200] -( - SymbolLine[0 3000 2000 3000 800] - SymbolLine[0 5000 2000 3000 800] - SymbolLine[0 5000 2000 5000 800] -) -Symbol['{' 1200] -( - SymbolLine[500 1500 1000 1000 800] - SymbolLine[500 1500 500 2500 800] - SymbolLine[0 3000 500 2500 800] - SymbolLine[0 3000 500 3500 800] - SymbolLine[500 3500 500 4500 800] - SymbolLine[500 4500 1000 5000 800] -) -Symbol['|' 1200] -( - SymbolLine[0 1000 0 5000 800] -) -Symbol['}' 1200] -( - SymbolLine[0 1000 500 1500 800] - SymbolLine[500 1500 500 2500 800] - SymbolLine[500 2500 1000 3000 800] - SymbolLine[500 3500 1000 3000 800] - SymbolLine[500 3500 500 4500 800] - SymbolLine[0 5000 500 4500 800] -) -Symbol['~' 1200] -( - SymbolLine[0 3500 500 3000 800] - SymbolLine[500 3000 1000 3000 800] - SymbolLine[1000 3000 1500 3500 800] - SymbolLine[1500 3500 2000 3500 800] - SymbolLine[2000 3500 2500 3000 800] -) -Layer(1 "component") -( - Line[106000 144000 262000 144000 1000 2000 "clearline"] - Line[106000 144000 106000 84000 1000 2000 "clearline"] - Line[106000 84000 262000 84000 1000 2000 "clearline"] - Line[262000 84000 262000 144000 1000 2000 "clearline"] -) -Layer(2 "solder") -( - Line[256000 90000 256000 138000 1000 2000 "clearline"] - Line[112000 138000 112000 90000 1000 2000 "clearline"] - Line[112000 90000 256000 90000 1000 2000 "clearline"] - Line[112000 138000 256000 138000 1000 2000 "clearline"] -) -Layer(3 "GND") -( -) -Layer(4 "power") -( -) -Layer(5 "signal1") -( - Polygon("clearpoly") - ( - [118000 96000] [250000 96000] [250000 132000] [118000 132000] - ) -) -Layer(6 "signal2") -( -) -Layer(7 "unused") -( -) -Layer(8 "unused") -( -) -Layer(9 "silk") -( -) -Layer(10 "silk") -( - Line[118000 96000 118000 132000 500 2000 "clearline"] - Line[118000 132000 154000 132000 500 2000 "clearline"] - Line[154000 132000 154000 96000 500 2000 "clearline"] - Line[154000 96000 118000 96000 500 2000 "clearline"] - Line[136000 152000 136000 120000 500 1200 "clearline"] - Line[136000 120000 132000 124000 500 1200 "clearline"] - Line[132000 114000 140000 114000 1010 1200 "clearline"] - Line[140000 124000 136000 120000 500 1200 "clearline"] - Line[98000 90000 94000 94000 500 1200 "clearline"] - Line[214000 76000 250000 76000 500 1200 "clearline"] - Line[98000 138000 98000 90000 500 1200 "clearline"] - Line[270000 96000 266000 100000 500 1200 "clearline"] - Line[136000 110000 136000 118000 1010 1200 "clearline"] - Line[214000 96000 214000 132000 500 2000 "clearline"] - Line[252000 132000 276000 132000 500 1200 "clearline"] - Line[218000 72000 214000 76000 500 1200 "clearline"] - Line[214000 76000 218000 80000 500 1200 "clearline"] - Line[270000 96000 274000 100000 500 1200 "clearline"] - Line[252000 96000 276000 96000 500 1200 "clearline"] - Line[214000 132000 250000 132000 500 2000 "clearline"] - Line[136000 90000 140000 86000 500 1200 "clearline"] - Line[232000 150000 232000 120000 500 1200 "clearline"] - Line[236000 124000 232000 120000 500 1200 "clearline"] - Line[232000 110000 232000 118000 1010 1200 "clearline"] - Line[232000 120000 228000 124000 500 1200 "clearline"] - Line[204000 114000 212000 114000 500 1200 "clearline"] - Line[212000 114000 208000 110000 500 1200 "clearline"] - Line[212000 114000 208000 118000 500 1200 "clearline"] - Line[214000 94000 214000 70000 500 1200 "clearline"] - Line[250000 94000 250000 70000 500 1200 "clearline"] - Line[204000 114000 204000 48000 500 1200 "clearline"] - Line[136000 90000 132000 86000 500 1200 "clearline"] - Line[270000 132000 266000 128000 500 1200 "clearline"] - Line[250000 132000 250000 96000 500 2000 "clearline"] - Line[250000 96000 214000 96000 500 2000 "clearline"] - Line[160000 90000 112000 90000 500 2000 "clearline"] - Line[160000 138000 112000 138000 500 2000 "clearline"] - Line[112000 90000 112000 138000 500 2000 "clearline"] - Line[160000 90000 160000 138000 500 2000 "clearline"] - Line[136000 74000 136000 90000 500 1200 "clearline"] - Line[270000 132000 274000 128000 500 1200 "clearline"] - Line[228000 114000 236000 114000 1010 1200 "clearline"] - Line[270000 132000 270000 96000 500 1200 "clearline"] - Line[250000 76000 246000 72000 500 1200 "clearline"] - Line[250000 76000 246000 80000 500 1200 "clearline"] - Line[92000 90000 110000 90000 500 1200 "clearline"] - Line[186000 96000 190000 92000 500 1200 "clearline"] - Line[186000 96000 182000 92000 500 1200 "clearline"] - Line[186000 64000 186000 96000 500 1200 "clearline"] - Line[98000 138000 94000 134000 500 1200 "clearline"] - Line[98000 138000 102000 134000 500 1200 "clearline"] - Line[98000 90000 102000 94000 500 1200 "clearline"] - Line[92000 138000 110000 138000 500 1200 "clearline"] - Line[214000 138000 210000 142000 500 1200 "clearline"] - Line[218000 142000 214000 138000 500 1200 "clearline"] - Line[214000 168000 214000 138000 500 1200 "clearline"] - Line[192000 144000 188000 148000 500 1200 "clearline"] - Line[196000 148000 192000 144000 500 1200 "clearline"] - Line[192000 184000 192000 144000 500 1200 "clearline"] - Line[168000 144000 164000 148000 500 1200 "clearline"] - Line[172000 148000 168000 144000 500 1200 "clearline"] - Line[168000 176000 168000 144000 500 1200 "clearline"] - Line[168000 132000 172000 128000 500 1200 "clearline"] - Line[168000 132000 164000 128000 500 1200 "clearline"] - Line[168000 120000 168000 132000 500 1200 "clearline"] - Text[106000 152000 0 200 "(X0,Y0)" ""] - Text[224000 150000 0 200 "(X1,Y1)" ""] - Text[226000 72000 1 200 "SIZE" ""] - Text[41000 106000 0 200 "Mask Size" ""] - Text[56000 62000 0 200 "Mask Aperture" ""] - Text[130000 52000 0 200 "Pad Shape" ""] - Text[272000 110000 0 200 "SIZE" ""] - Text[132000 36000 0 200 "Pad Aperture" ""] - Text[210000 168000 0 200 "Soldermask Opening" ""] - Text[188000 186000 0 200 "Clearance to non-connecting" ""] - Text[188000 198000 0 200 "polygons" ""] - Text[102000 176000 0 200 "Clearance/2" ""] -) Index: trunk/doc/puller.pdf =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: trunk/doc/puller.pdf =================================================================== --- trunk/doc/puller.pdf (revision 1036) +++ trunk/doc/puller.pdf (nonexistent) Property changes on: trunk/doc/puller.pdf ___________________________________________________________________ Deleted: svn:mime-type ## -1 +0,0 ## -application/octet-stream \ No newline at end of property Index: trunk/doc/texinfo.tex =================================================================== --- trunk/doc/texinfo.tex (revision 1036) +++ trunk/doc/texinfo.tex (nonexistent) @@ -1,7086 +0,0 @@ -% texinfo.tex -- TeX macros to handle Texinfo files. -% -% Load plain if necessary, i.e., if running under initex. -\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi -% -\def\texinfoversion{2005-01-30.17} -% -% Copyright (C) 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995, -% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software -% Foundation, Inc. -% -% This texinfo.tex file is free software; you can redistribute it and/or -% modify it under the terms of the GNU General Public License as -% published by the Free Software Foundation; either version 2, or (at -% your option) any later version. -% -% This texinfo.tex file is distributed in the hope that it will be -% useful, but WITHOUT ANY WARRANTY; without even the implied warranty -% of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -% General Public License for more details. -% -% You should have received a copy of the GNU General Public License -% along with this texinfo.tex file; see the file COPYING. If not, write -% to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -% Boston, MA 02111-1307, USA. -% -% As a special exception, when this file is read by TeX when processing -% a Texinfo source document, you may use the result without -% restriction. (This has been our intent since Texinfo was invented.) -% -% Please try the latest version of texinfo.tex before submitting bug -% reports; you can get the latest version from: -% http://www.gnu.org/software/texinfo/ (the Texinfo home page), or -% ftp://tug.org/tex/texinfo.tex -% (and all CTAN mirrors, see http://www.ctan.org). -% The texinfo.tex in any given distribution could well be out -% of date, so if that's what you're using, please check. -% -% Send bug reports to bug-texinfo@gnu.org. Please include including a -% complete document in each bug report with which we can reproduce the -% problem. Patches are, of course, greatly appreciated. -% -% To process a Texinfo manual with TeX, it's most reliable to use the -% texi2dvi shell script that comes with the distribution. For a simple -% manual foo.texi, however, you can get away with this: -% tex foo.texi -% texindex foo.?? -% tex foo.texi -% tex foo.texi -% dvips foo.dvi -o # or whatever; this makes foo.ps. -% The extra TeX runs get the cross-reference information correct. -% Sometimes one run after texindex suffices, and sometimes you need more -% than two; texi2dvi does it as many times as necessary. -% -% It is possible to adapt texinfo.tex for other languages, to some -% extent. You can get the existing language-specific files from the -% full Texinfo distribution. -% -% The GNU Texinfo home page is http://www.gnu.org/software/texinfo. - - -\message{Loading texinfo [version \texinfoversion]:} - -% If in a .fmt file, print the version number -% and turn on active characters that we couldn't do earlier because -% they might have appeared in the input file name. -\everyjob{\message{[Texinfo version \texinfoversion]}% - \catcode`+=\active \catcode`\_=\active} - -\message{Basics,} -\chardef\other=12 - -% We never want plain's \outer definition of \+ in Texinfo. -% For @tex, we can use \tabalign. -\let\+ = \relax - -% Save some plain tex macros whose names we will redefine. -\let\ptexb=\b -\let\ptexbullet=\bullet -\let\ptexc=\c -\let\ptexcomma=\, -\let\ptexdot=\. -\let\ptexdots=\dots -\let\ptexend=\end -\let\ptexequiv=\equiv -\let\ptexexclam=\! -\let\ptexfootnote=\footnote -\let\ptexgtr=> -\let\ptexhat=^ -\let\ptexi=\i -\let\ptexindent=\indent -\let\ptexinsert=\insert -\let\ptexlbrace=\{ -\let\ptexless=< -\let\ptexnewwrite\newwrite -\let\ptexnoindent=\noindent -\let\ptexplus=+ -\let\ptexrbrace=\} -\let\ptexslash=\/ -\let\ptexstar=\* -\let\ptext=\t - -% If this character appears in an error message or help string, it -% starts a new line in the output. -\newlinechar = `^^J - -% Use TeX 3.0's \inputlineno to get the line number, for better error -% messages, but if we're using an old version of TeX, don't do anything. -% -\ifx\inputlineno\thisisundefined - \let\linenumber = \empty % Pre-3.0. -\else - \def\linenumber{l.\the\inputlineno:\space} -\fi - -% Set up fixed words for English if not already set. -\ifx\putwordAppendix\undefined \gdef\putwordAppendix{Appendix}\fi -\ifx\putwordChapter\undefined \gdef\putwordChapter{Chapter}\fi -\ifx\putwordfile\undefined \gdef\putwordfile{file}\fi -\ifx\putwordin\undefined \gdef\putwordin{in}\fi -\ifx\putwordIndexIsEmpty\undefined \gdef\putwordIndexIsEmpty{(Index is empty)}\fi -\ifx\putwordIndexNonexistent\undefined \gdef\putwordIndexNonexistent{(Index is nonexistent)}\fi -\ifx\putwordInfo\undefined \gdef\putwordInfo{Info}\fi -\ifx\putwordInstanceVariableof\undefined \gdef\putwordInstanceVariableof{Instance Variable of}\fi -\ifx\putwordMethodon\undefined \gdef\putwordMethodon{Method on}\fi -\ifx\putwordNoTitle\undefined \gdef\putwordNoTitle{No Title}\fi -\ifx\putwordof\undefined \gdef\putwordof{of}\fi -\ifx\putwordon\undefined \gdef\putwordon{on}\fi -\ifx\putwordpage\undefined \gdef\putwordpage{page}\fi -\ifx\putwordsection\undefined \gdef\putwordsection{section}\fi -\ifx\putwordSection\undefined \gdef\putwordSection{Section}\fi -\ifx\putwordsee\undefined \gdef\putwordsee{see}\fi -\ifx\putwordSee\undefined \gdef\putwordSee{See}\fi -\ifx\putwordShortTOC\undefined \gdef\putwordShortTOC{Short Contents}\fi -\ifx\putwordTOC\undefined \gdef\putwordTOC{Table of Contents}\fi -% -\ifx\putwordMJan\undefined \gdef\putwordMJan{January}\fi -\ifx\putwordMFeb\undefined \gdef\putwordMFeb{February}\fi -\ifx\putwordMMar\undefined \gdef\putwordMMar{March}\fi -\ifx\putwordMApr\undefined \gdef\putwordMApr{April}\fi -\ifx\putwordMMay\undefined \gdef\putwordMMay{May}\fi -\ifx\putwordMJun\undefined \gdef\putwordMJun{June}\fi -\ifx\putwordMJul\undefined \gdef\putwordMJul{July}\fi -\ifx\putwordMAug\undefined \gdef\putwordMAug{August}\fi -\ifx\putwordMSep\undefined \gdef\putwordMSep{September}\fi -\ifx\putwordMOct\undefined \gdef\putwordMOct{October}\fi -\ifx\putwordMNov\undefined \gdef\putwordMNov{November}\fi -\ifx\putwordMDec\undefined \gdef\putwordMDec{December}\fi -% -\ifx\putwordDefmac\undefined \gdef\putwordDefmac{Macro}\fi -\ifx\putwordDefspec\undefined \gdef\putwordDefspec{Special Form}\fi -\ifx\putwordDefvar\undefined \gdef\putwordDefvar{Variable}\fi -\ifx\putwordDefopt\undefined \gdef\putwordDefopt{User Option}\fi -\ifx\putwordDeffunc\undefined \gdef\putwordDeffunc{Function}\fi - -% In some macros, we cannot use the `\? notation---the left quote is -% in some cases the escape char. -\chardef\colonChar = `\: -\chardef\commaChar = `\, -\chardef\dotChar = `\. -\chardef\exclamChar= `\! -\chardef\questChar = `\? -\chardef\semiChar = `\; -\chardef\underChar = `\_ - -\chardef\spaceChar = `\ % -\chardef\spacecat = 10 -\def\spaceisspace{\catcode\spaceChar=\spacecat} - -% Ignore a token. -% -\def\gobble#1{} - -% The following is used inside several \edef's. -\def\makecsname#1{\expandafter\noexpand\csname#1\endcsname} - -% Hyphenation fixes. -\hyphenation{ - Flor-i-da Ghost-script Ghost-view Mac-OS Post-Script - ap-pen-dix bit-map bit-maps - data-base data-bases eshell fall-ing half-way long-est man-u-script - man-u-scripts mini-buf-fer mini-buf-fers over-view par-a-digm - par-a-digms rath-er rec-tan-gu-lar ro-bot-ics se-vere-ly set-up spa-ces - spell-ing spell-ings - stand-alone strong-est time-stamp time-stamps which-ever white-space - wide-spread wrap-around -} - -% Margin to add to right of even pages, to left of odd pages. -\newdimen\bindingoffset -\newdimen\normaloffset -\newdimen\pagewidth \newdimen\pageheight - -% For a final copy, take out the rectangles -% that mark overfull boxes (in case you have decided -% that the text looks ok even though it passes the margin). -% -\def\finalout{\overfullrule=0pt} - -% @| inserts a changebar to the left of the current line. It should -% surround any changed text. This approach does *not* work if the -% change spans more than two lines of output. To handle that, we would -% have adopt a much more difficult approach (putting marks into the main -% vertical list for the beginning and end of each change). -% -\def\|{% - % \vadjust can only be used in horizontal mode. - \leavevmode - % - % Append this vertical mode material after the current line in the output. - \vadjust{% - % We want to insert a rule with the height and depth of the current - % leading; that is exactly what \strutbox is supposed to record. - \vskip-\baselineskip - % - % \vadjust-items are inserted at the left edge of the type. So - % the \llap here moves out into the left-hand margin. - \llap{% - % - % For a thicker or thinner bar, change the `1pt'. - \vrule height\baselineskip width1pt - % - % This is the space between the bar and the text. - \hskip 12pt - }% - }% -} - -% Sometimes it is convenient to have everything in the transcript file -% and nothing on the terminal. We don't just call \tracingall here, -% since that produces some useless output on the terminal. We also make -% some effort to order the tracing commands to reduce output in the log -% file; cf. trace.sty in LaTeX. -% -\def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}% -\def\loggingall{% - \tracingstats2 - \tracingpages1 - \tracinglostchars2 % 2 gives us more in etex - \tracingparagraphs1 - \tracingoutput1 - \tracingmacros2 - \tracingrestores1 - \showboxbreadth\maxdimen \showboxdepth\maxdimen - \ifx\eTeXversion\undefined\else % etex gives us more logging - \tracingscantokens1 - \tracingifs1 - \tracinggroups1 - \tracingnesting2 - \tracingassigns1 - \fi - \tracingcommands3 % 3 gives us more in etex - \errorcontextlines16 -}% - -% add check for \lastpenalty to plain's definitions. If the last thing -% we did was a \nobreak, we don't want to insert more space. -% -\def\smallbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\smallskipamount - \removelastskip\penalty-50\smallskip\fi\fi} -\def\medbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\medskipamount - \removelastskip\penalty-100\medskip\fi\fi} -\def\bigbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\bigskipamount - \removelastskip\penalty-200\bigskip\fi\fi} - -% For @cropmarks command. -% Do @cropmarks to get crop marks. -% -\newif\ifcropmarks -\let\cropmarks = \cropmarkstrue -% -% Dimensions to add cropmarks at corners. -% Added by P. A. MacKay, 12 Nov. 1986 -% -\newdimen\outerhsize \newdimen\outervsize % set by the paper size routines -\newdimen\cornerlong \cornerlong=1pc -\newdimen\cornerthick \cornerthick=.3pt -\newdimen\topandbottommargin \topandbottommargin=.75in - -% Main output routine. -\chardef\PAGE = 255 -\output = {\onepageout{\pagecontents\PAGE}} - -\newbox\headlinebox -\newbox\footlinebox - -% \onepageout takes a vbox as an argument. Note that \pagecontents -% does insertions, but you have to call it yourself. -\def\onepageout#1{% - \ifcropmarks \hoffset=0pt \else \hoffset=\normaloffset \fi - % - \ifodd\pageno \advance\hoffset by \bindingoffset - \else \advance\hoffset by -\bindingoffset\fi - % - % Do this outside of the \shipout so @code etc. will be expanded in - % the headline as they should be, not taken literally (outputting ''code). - \setbox\headlinebox = \vbox{\let\hsize=\pagewidth \makeheadline}% - \setbox\footlinebox = \vbox{\let\hsize=\pagewidth \makefootline}% - % - {% - % Have to do this stuff outside the \shipout because we want it to - % take effect in \write's, yet the group defined by the \vbox ends - % before the \shipout runs. - % - \escapechar = `\\ % use backslash in output files. - \indexdummies % don't expand commands in the output. - \normalturnoffactive % \ in index entries must not stay \, e.g., if - % the page break happens to be in the middle of an example. - \shipout\vbox{% - % Do this early so pdf references go to the beginning of the page. - \ifpdfmakepagedest \pdfdest name{\the\pageno} xyz\fi - % - \ifcropmarks \vbox to \outervsize\bgroup - \hsize = \outerhsize - \vskip-\topandbottommargin - \vtop to0pt{% - \line{\ewtop\hfil\ewtop}% - \nointerlineskip - \line{% - \vbox{\moveleft\cornerthick\nstop}% - \hfill - \vbox{\moveright\cornerthick\nstop}% - }% - \vss}% - \vskip\topandbottommargin - \line\bgroup - \hfil % center the page within the outer (page) hsize. - \ifodd\pageno\hskip\bindingoffset\fi - \vbox\bgroup - \fi - % - \unvbox\headlinebox - \pagebody{#1}% - \ifdim\ht\footlinebox > 0pt - % Only leave this space if the footline is nonempty. - % (We lessened \vsize for it in \oddfootingxxx.) - % The \baselineskip=24pt in plain's \makefootline has no effect. - \vskip 2\baselineskip - \unvbox\footlinebox - \fi - % - \ifcropmarks - \egroup % end of \vbox\bgroup - \hfil\egroup % end of (centering) \line\bgroup - \vskip\topandbottommargin plus1fill minus1fill - \boxmaxdepth = \cornerthick - \vbox to0pt{\vss - \line{% - \vbox{\moveleft\cornerthick\nsbot}% - \hfill - \vbox{\moveright\cornerthick\nsbot}% - }% - \nointerlineskip - \line{\ewbot\hfil\ewbot}% - }% - \egroup % \vbox from first cropmarks clause - \fi - }% end of \shipout\vbox - }% end of group with \normalturnoffactive - \advancepageno - \ifnum\outputpenalty>-20000 \else\dosupereject\fi -} - -\newinsert\margin \dimen\margin=\maxdimen - -\def\pagebody#1{\vbox to\pageheight{\boxmaxdepth=\maxdepth #1}} -{\catcode`\@ =11 -\gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi -% marginal hacks, juha@viisa.uucp (Juha Takala) -\ifvoid\margin\else % marginal info is present - \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi -\dimen@=\dp#1 \unvbox#1 -\ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi -\ifr@ggedbottom \kern-\dimen@ \vfil \fi} -} - -% Here are the rules for the cropmarks. Note that they are -% offset so that the space between them is truly \outerhsize or \outervsize -% (P. A. MacKay, 12 November, 1986) -% -\def\ewtop{\vrule height\cornerthick depth0pt width\cornerlong} -\def\nstop{\vbox - {\hrule height\cornerthick depth\cornerlong width\cornerthick}} -\def\ewbot{\vrule height0pt depth\cornerthick width\cornerlong} -\def\nsbot{\vbox - {\hrule height\cornerlong depth\cornerthick width\cornerthick}} - -% Parse an argument, then pass it to #1. The argument is the rest of -% the input line (except we remove a trailing comment). #1 should be a -% macro which expects an ordinary undelimited TeX argument. -% -\def\parsearg{\parseargusing{}} -\def\parseargusing#1#2{% - \def\next{#2}% - \begingroup - \obeylines - \spaceisspace - #1% - \parseargline\empty% Insert the \empty token, see \finishparsearg below. -} - -{\obeylines % - \gdef\parseargline#1^^M{% - \endgroup % End of the group started in \parsearg. - \argremovecomment #1\comment\ArgTerm% - }% -} - -% First remove any @comment, then any @c comment. -\def\argremovecomment#1\comment#2\ArgTerm{\argremovec #1\c\ArgTerm} -\def\argremovec#1\c#2\ArgTerm{\argcheckspaces#1\^^M\ArgTerm} - -% Each occurence of `\^^M' or `\^^M' is replaced by a single space. -% -% \argremovec might leave us with trailing space, e.g., -% @end itemize @c foo -% This space token undergoes the same procedure and is eventually removed -% by \finishparsearg. -% -\def\argcheckspaces#1\^^M{\argcheckspacesX#1\^^M \^^M} -\def\argcheckspacesX#1 \^^M{\argcheckspacesY#1\^^M} -\def\argcheckspacesY#1\^^M#2\^^M#3\ArgTerm{% - \def\temp{#3}% - \ifx\temp\empty - % We cannot use \next here, as it holds the macro to run; - % thus we reuse \temp. - \let\temp\finishparsearg - \else - \let\temp\argcheckspaces - \fi - % Put the space token in: - \temp#1 #3\ArgTerm -} - -% If a _delimited_ argument is enclosed in braces, they get stripped; so -% to get _exactly_ the rest of the line, we had to prevent such situation. -% We prepended an \empty token at the very beginning and we expand it now, -% just before passing the control to \next. -% (Similarily, we have to think about #3 of \argcheckspacesY above: it is -% either the null string, or it ends with \^^M---thus there is no danger -% that a pair of braces would be stripped. -% -% But first, we have to remove the trailing space token. -% -\def\finishparsearg#1 \ArgTerm{\expandafter\next\expandafter{#1}} - -% \parseargdef\foo{...} -% is roughly equivalent to -% \def\foo{\parsearg\Xfoo} -% \def\Xfoo#1{...} -% -% Actually, I use \csname\string\foo\endcsname, ie. \\foo, as it is my -% favourite TeX trick. --kasal, 16nov03 - -\def\parseargdef#1{% - \expandafter \doparseargdef \csname\string#1\endcsname #1% -} -\def\doparseargdef#1#2{% - \def#2{\parsearg#1}% - \def#1##1% -} - -% Several utility definitions with active space: -{ - \obeyspaces - \gdef\obeyedspace{ } - - % Make each space character in the input produce a normal interword - % space in the output. Don't allow a line break at this space, as this - % is used only in environments like @example, where each line of input - % should produce a line of output anyway. - % - \gdef\sepspaces{\obeyspaces\let =\tie} - - % If an index command is used in an @example environment, any spaces - % therein should become regular spaces in the raw index file, not the - % expansion of \tie (\leavevmode \penalty \@M \ ). - \gdef\unsepspaces{\let =\space} -} - - -\def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next} - -% Define the framework for environments in texinfo.tex. It's used like this: -% -% \envdef\foo{...} -% \def\Efoo{...} -% -% It's the responsibility of \envdef to insert \begingroup before the -% actual body; @end closes the group after calling \Efoo. \envdef also -% defines \thisenv, so the current environment is known; @end checks -% whether the environment name matches. The \checkenv macro can also be -% used to check whether the current environment is the one expected. -% -% Non-false conditionals (@iftex, @ifset) don't fit into this, so they -% are not treated as enviroments; they don't open a group. (The -% implementation of @end takes care not to call \endgroup in this -% special case.) - - -% At runtime, environments start with this: -\def\startenvironment#1{\begingroup\def\thisenv{#1}} -% initialize -\let\thisenv\empty - -% ... but they get defined via ``\envdef\foo{...}'': -\long\def\envdef#1#2{\def#1{\startenvironment#1#2}} -\def\envparseargdef#1#2{\parseargdef#1{\startenvironment#1#2}} - -% Check whether we're in the right environment: -\def\checkenv#1{% - \def\temp{#1}% - \ifx\thisenv\temp - \else - \badenverr - \fi -} - -% Evironment mismatch, #1 expected: -\def\badenverr{% - \errhelp = \EMsimple - \errmessage{This command can appear only \inenvironment\temp, - not \inenvironment\thisenv}% -} -\def\inenvironment#1{% - \ifx#1\empty - out of any environment% - \else - in environment \expandafter\string#1% - \fi -} - -% @end foo executes the definition of \Efoo. -% But first, it executes a specialized version of \checkenv -% -\parseargdef\end{% - \if 1\csname iscond.#1\endcsname - \else - % The general wording of \badenverr may not be ideal, but... --kasal, 06nov03 - \expandafter\checkenv\csname#1\endcsname - \csname E#1\endcsname - \endgroup - \fi -} - -\newhelp\EMsimple{Press RETURN to continue.} - - -%% Simple single-character @ commands - -% @@ prints an @ -% Kludge this until the fonts are right (grr). -\def\@{{\tt\char64}} - -% This is turned off because it was never documented -% and you can use @w{...} around a quote to suppress ligatures. -%% Define @` and @' to be the same as ` and ' -%% but suppressing ligatures. -%\def\`{{`}} -%\def\'{{'}} - -% Used to generate quoted braces. -\def\mylbrace {{\tt\char123}} -\def\myrbrace {{\tt\char125}} -\let\{=\mylbrace -\let\}=\myrbrace -\begingroup - % Definitions to produce \{ and \} commands for indices, - % and @{ and @} for the aux file. - \catcode`\{ = \other \catcode`\} = \other - \catcode`\[ = 1 \catcode`\] = 2 - \catcode`\! = 0 \catcode`\\ = \other - !gdef!lbracecmd[\{]% - !gdef!rbracecmd[\}]% - !gdef!lbraceatcmd[@{]% - !gdef!rbraceatcmd[@}]% -!endgroup - -% @comma{} to avoid , parsing problems. -\let\comma = , - -% Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent -% Others are defined by plain TeX: @` @' @" @^ @~ @= @u @v @H. -\let\, = \c -\let\dotaccent = \. -\def\ringaccent#1{{\accent23 #1}} -\let\tieaccent = \t -\let\ubaraccent = \b -\let\udotaccent = \d - -% Other special characters: @questiondown @exclamdown @ordf @ordm -% Plain TeX defines: @AA @AE @O @OE @L (plus lowercase versions) @ss. -\def\questiondown{?`} -\def\exclamdown{!`} -\def\ordf{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{a}}} -\def\ordm{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{o}}} - -% Dotless i and dotless j, used for accents. -\def\imacro{i} -\def\jmacro{j} -\def\dotless#1{% - \def\temp{#1}% - \ifx\temp\imacro \ptexi - \else\ifx\temp\jmacro \j - \else \errmessage{@dotless can be used only with i or j}% - \fi\fi -} - -% The \TeX{} logo, as in plain, but resetting the spacing so that a -% period following counts as ending a sentence. (Idea found in latex.) -% -\edef\TeX{\TeX \spacefactor=1000 } - -% @LaTeX{} logo. Not quite the same results as the definition in -% latex.ltx, since we use a different font for the raised A; it's most -% convenient for us to use an explicitly smaller font, rather than using -% the \scriptstyle font (since we don't reset \scriptstyle and -% \scriptscriptstyle). -% -\def\LaTeX{% - L\kern-.36em - {\setbox0=\hbox{T}% - \vbox to \ht0{\hbox{\selectfonts\lllsize A}\vss}}% - \kern-.15em - \TeX -} - -% Be sure we're in horizontal mode when doing a tie, since we make space -% equivalent to this in @example-like environments. Otherwise, a space -% at the beginning of a line will start with \penalty -- and -% since \penalty is valid in vertical mode, we'd end up putting the -% penalty on the vertical list instead of in the new paragraph. -{\catcode`@ = 11 - % Avoid using \@M directly, because that causes trouble - % if the definition is written into an index file. - \global\let\tiepenalty = \@M - \gdef\tie{\leavevmode\penalty\tiepenalty\ } -} - -% @: forces normal size whitespace following. -\def\:{\spacefactor=1000 } - -% @* forces a line break. -\def\*{\hfil\break\hbox{}\ignorespaces} - -% @/ allows a line break. -\let\/=\allowbreak - -% @. is an end-of-sentence period. -\def\.{.\spacefactor=3000 } - -% @! is an end-of-sentence bang. -\def\!{!\spacefactor=3000 } - -% @? is an end-of-sentence query. -\def\?{?\spacefactor=3000 } - -% @w prevents a word break. Without the \leavevmode, @w at the -% beginning of a paragraph, when TeX is still in vertical mode, would -% produce a whole line of output instead of starting the paragraph. -\def\w#1{\leavevmode\hbox{#1}} - -% @group ... @end group forces ... to be all on one page, by enclosing -% it in a TeX vbox. We use \vtop instead of \vbox to construct the box -% to keep its height that of a normal line. According to the rules for -% \topskip (p.114 of the TeXbook), the glue inserted is -% max (\topskip - \ht (first item), 0). If that height is large, -% therefore, no glue is inserted, and the space between the headline and -% the text is small, which looks bad. -% -% Another complication is that the group might be very large. This can -% cause the glue on the previous page to be unduly stretched, because it -% does not have much material. In this case, it's better to add an -% explicit \vfill so that the extra space is at the bottom. The -% threshold for doing this is if the group is more than \vfilllimit -% percent of a page (\vfilllimit can be changed inside of @tex). -% -\newbox\groupbox -\def\vfilllimit{0.7} -% -\envdef\group{% - \ifnum\catcode`\^^M=\active \else - \errhelp = \groupinvalidhelp - \errmessage{@group invalid in context where filling is enabled}% - \fi - \startsavinginserts - % - \setbox\groupbox = \vtop\bgroup - % Do @comment since we are called inside an environment such as - % @example, where each end-of-line in the input causes an - % end-of-line in the output. We don't want the end-of-line after - % the `@group' to put extra space in the output. Since @group - % should appear on a line by itself (according to the Texinfo - % manual), we don't worry about eating any user text. - \comment -} -% -% The \vtop produces a box with normal height and large depth; thus, TeX puts -% \baselineskip glue before it, and (when the next line of text is done) -% \lineskip glue after it. Thus, space below is not quite equal to space -% above. But it's pretty close. -\def\Egroup{% - % To get correct interline space between the last line of the group - % and the first line afterwards, we have to propagate \prevdepth. - \endgraf % Not \par, as it may have been set to \lisppar. - \global\dimen1 = \prevdepth - \egroup % End the \vtop. - % \dimen0 is the vertical size of the group's box. - \dimen0 = \ht\groupbox \advance\dimen0 by \dp\groupbox - % \dimen2 is how much space is left on the page (more or less). - \dimen2 = \pageheight \advance\dimen2 by -\pagetotal - % if the group doesn't fit on the current page, and it's a big big - % group, force a page break. - \ifdim \dimen0 > \dimen2 - \ifdim \pagetotal < \vfilllimit\pageheight - \page - \fi - \fi - \box\groupbox - \prevdepth = \dimen1 - \checkinserts -} -% -% TeX puts in an \escapechar (i.e., `@') at the beginning of the help -% message, so this ends up printing `@group can only ...'. -% -\newhelp\groupinvalidhelp{% -group can only be used in environments such as @example,^^J% -where each line of input produces a line of output.} - -% @need space-in-mils -% forces a page break if there is not space-in-mils remaining. - -\newdimen\mil \mil=0.001in - -% Old definition--didn't work. -%\parseargdef\need{\par % -%% This method tries to make TeX break the page naturally -%% if the depth of the box does not fit. -%{\baselineskip=0pt% -%\vtop to #1\mil{\vfil}\kern -#1\mil\nobreak -%\prevdepth=-1000pt -%}} - -\parseargdef\need{% - % Ensure vertical mode, so we don't make a big box in the middle of a - % paragraph. - \par - % - % If the @need value is less than one line space, it's useless. - \dimen0 = #1\mil - \dimen2 = \ht\strutbox - \advance\dimen2 by \dp\strutbox - \ifdim\dimen0 > \dimen2 - % - % Do a \strut just to make the height of this box be normal, so the - % normal leading is inserted relative to the preceding line. - % And a page break here is fine. - \vtop to #1\mil{\strut\vfil}% - % - % TeX does not even consider page breaks if a penalty added to the - % main vertical list is 10000 or more. But in order to see if the - % empty box we just added fits on the page, we must make it consider - % page breaks. On the other hand, we don't want to actually break the - % page after the empty box. So we use a penalty of 9999. - % - % There is an extremely small chance that TeX will actually break the - % page at this \penalty, if there are no other feasible breakpoints in - % sight. (If the user is using lots of big @group commands, which - % almost-but-not-quite fill up a page, TeX will have a hard time doing - % good page breaking, for example.) However, I could not construct an - % example where a page broke at this \penalty; if it happens in a real - % document, then we can reconsider our strategy. - \penalty9999 - % - % Back up by the size of the box, whether we did a page break or not. - \kern -#1\mil - % - % Do not allow a page break right after this kern. - \nobreak - \fi -} - -% @br forces paragraph break (and is undocumented). - -\let\br = \par - -% @page forces the start of a new page. -% -\def\page{\par\vfill\supereject} - -% @exdent text.... -% outputs text on separate line in roman font, starting at standard page margin - -% This records the amount of indent in the innermost environment. -% That's how much \exdent should take out. -\newskip\exdentamount - -% This defn is used inside fill environments such as @defun. -\parseargdef\exdent{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break} - -% This defn is used inside nofill environments such as @example. -\parseargdef\nofillexdent{{\advance \leftskip by -\exdentamount - \leftline{\hskip\leftskip{\rm#1}}}} - -% @inmargin{WHICH}{TEXT} puts TEXT in the WHICH margin next to the current -% paragraph. For more general purposes, use the \margin insertion -% class. WHICH is `l' or `r'. -% -\newskip\inmarginspacing \inmarginspacing=1cm -\def\strutdepth{\dp\strutbox} -% -\def\doinmargin#1#2{\strut\vadjust{% - \nobreak - \kern-\strutdepth - \vtop to \strutdepth{% - \baselineskip=\strutdepth - \vss - % if you have multiple lines of stuff to put here, you'll need to - % make the vbox yourself of the appropriate size. - \ifx#1l% - \llap{\ignorespaces #2\hskip\inmarginspacing}% - \else - \rlap{\hskip\hsize \hskip\inmarginspacing \ignorespaces #2}% - \fi - \null - }% -}} -\def\inleftmargin{\doinmargin l} -\def\inrightmargin{\doinmargin r} -% -% @inmargin{TEXT [, RIGHT-TEXT]} -% (if RIGHT-TEXT is given, use TEXT for left page, RIGHT-TEXT for right; -% else use TEXT for both). -% -\def\inmargin#1{\parseinmargin #1,,\finish} -\def\parseinmargin#1,#2,#3\finish{% not perfect, but better than nothing. - \setbox0 = \hbox{\ignorespaces #2}% - \ifdim\wd0 > 0pt - \def\lefttext{#1}% have both texts - \def\righttext{#2}% - \else - \def\lefttext{#1}% have only one text - \def\righttext{#1}% - \fi - % - \ifodd\pageno - \def\temp{\inrightmargin\righttext}% odd page -> outside is right margin - \else - \def\temp{\inleftmargin\lefttext}% - \fi - \temp -} - -% @include file insert text of that file as input. -% -\def\include{\parseargusing\filenamecatcodes\includezzz} -\def\includezzz#1{% - \pushthisfilestack - \def\thisfile{#1}% - {% - \makevalueexpandable - \def\temp{\input #1 }% - \expandafter - }\temp - \popthisfilestack -} -\def\filenamecatcodes{% - \catcode`\\=\other - \catcode`~=\other - \catcode`^=\other - \catcode`_=\other - \catcode`|=\other - \catcode`<=\other - \catcode`>=\other - \catcode`+=\other - \catcode`-=\other -} - -\def\pushthisfilestack{% - \expandafter\pushthisfilestackX\popthisfilestack\StackTerm -} -\def\pushthisfilestackX{% - \expandafter\pushthisfilestackY\thisfile\StackTerm -} -\def\pushthisfilestackY #1\StackTerm #2\StackTerm {% - \gdef\popthisfilestack{\gdef\thisfile{#1}\gdef\popthisfilestack{#2}}% -} - -\def\popthisfilestack{\errthisfilestackempty} -\def\errthisfilestackempty{\errmessage{Internal error: - the stack of filenames is empty.}} - -\def\thisfile{} - -% @center line -% outputs that line, centered. -% -\parseargdef\center{% - \ifhmode - \let\next\centerH - \else - \let\next\centerV - \fi - \next{\hfil \ignorespaces#1\unskip \hfil}% -} -\def\centerH#1{% - {% - \hfil\break - \advance\hsize by -\leftskip - \advance\hsize by -\rightskip - \line{#1}% - \break - }% -} -\def\centerV#1{\line{\kern\leftskip #1\kern\rightskip}} - -% @sp n outputs n lines of vertical space - -\parseargdef\sp{\vskip #1\baselineskip} - -% @comment ...line which is ignored... -% @c is the same as @comment -% @ignore ... @end ignore is another way to write a comment - -\def\comment{\begingroup \catcode`\^^M=\other% -\catcode`\@=\other \catcode`\{=\other \catcode`\}=\other% -\commentxxx} -{\catcode`\^^M=\other \gdef\commentxxx#1^^M{\endgroup}} - -\let\c=\comment - -% @paragraphindent NCHARS -% We'll use ems for NCHARS, close enough. -% NCHARS can also be the word `asis' or `none'. -% We cannot feasibly implement @paragraphindent asis, though. -% -\def\asisword{asis} % no translation, these are keywords -\def\noneword{none} -% -\parseargdef\paragraphindent{% - \def\temp{#1}% - \ifx\temp\asisword - \else - \ifx\temp\noneword - \defaultparindent = 0pt - \else - \defaultparindent = #1em - \fi - \fi - \parindent = \defaultparindent -} - -% @exampleindent NCHARS -% We'll use ems for NCHARS like @paragraphindent. -% It seems @exampleindent asis isn't necessary, but -% I preserve it to make it similar to @paragraphindent. -\parseargdef\exampleindent{% - \def\temp{#1}% - \ifx\temp\asisword - \else - \ifx\temp\noneword - \lispnarrowing = 0pt - \else - \lispnarrowing = #1em - \fi - \fi -} - -% @firstparagraphindent WORD -% If WORD is `none', then suppress indentation of the first paragraph -% after a section heading. If WORD is `insert', then do indent at such -% paragraphs. -% -% The paragraph indentation is suppressed or not by calling -% \suppressfirstparagraphindent, which the sectioning commands do. -% We switch the definition of this back and forth according to WORD. -% By default, we suppress indentation. -% -\def\suppressfirstparagraphindent{\dosuppressfirstparagraphindent} -\def\insertword{insert} -% -\parseargdef\firstparagraphindent{% - \def\temp{#1}% - \ifx\temp\noneword - \let\suppressfirstparagraphindent = \dosuppressfirstparagraphindent - \else\ifx\temp\insertword - \let\suppressfirstparagraphindent = \relax - \else - \errhelp = \EMsimple - \errmessage{Unknown @firstparagraphindent option `\temp'}% - \fi\fi -} - -% Here is how we actually suppress indentation. Redefine \everypar to -% \kern backwards by \parindent, and then reset itself to empty. -% -% We also make \indent itself not actually do anything until the next -% paragraph. -% -\gdef\dosuppressfirstparagraphindent{% - \gdef\indent{% - \restorefirstparagraphindent - \indent - }% - \gdef\noindent{% - \restorefirstparagraphindent - \noindent - }% - \global\everypar = {% - \kern -\parindent - \restorefirstparagraphindent - }% -} - -\gdef\restorefirstparagraphindent{% - \global \let \indent = \ptexindent - \global \let \noindent = \ptexnoindent - \global \everypar = {}% -} - - -% @asis just yields its argument. Used with @table, for example. -% -\def\asis#1{#1} - -% @math outputs its argument in math mode. -% -% One complication: _ usually means subscripts, but it could also mean -% an actual _ character, as in @math{@var{some_variable} + 1}. So make -% _ active, and distinguish by seeing if the current family is \slfam, -% which is what @var uses. -{ - \catcode\underChar = \active - \gdef\mathunderscore{% - \catcode\underChar=\active - \def_{\ifnum\fam=\slfam \_\else\sb\fi}% - } -} -% Another complication: we want \\ (and @\) to output a \ character. -% FYI, plain.tex uses \\ as a temporary control sequence (why?), but -% this is not advertised and we don't care. Texinfo does not -% otherwise define @\. -% -% The \mathchar is class=0=ordinary, family=7=ttfam, position=5C=\. -\def\mathbackslash{\ifnum\fam=\ttfam \mathchar"075C \else\backslash \fi} -% -\def\math{% - \tex - \mathunderscore - \let\\ = \mathbackslash - \mathactive - $\finishmath -} -\def\finishmath#1{#1$\endgroup} % Close the group opened by \tex. - -% Some active characters (such as <) are spaced differently in math. -% We have to reset their definitions in case the @math was an argument -% to a command which sets the catcodes (such as @item or @section). -% -{ - \catcode`^ = \active - \catcode`< = \active - \catcode`> = \active - \catcode`+ = \active - \gdef\mathactive{% - \let^ = \ptexhat - \let< = \ptexless - \let> = \ptexgtr - \let+ = \ptexplus - } -} - -% @bullet and @minus need the same treatment as @math, just above. -\def\bullet{$\ptexbullet$} -\def\minus{$-$} - -% @dots{} outputs an ellipsis using the current font. -% We do .5em per period so that it has the same spacing in a typewriter -% font as three actual period characters. -% -\def\dots{% - \leavevmode - \hbox to 1.5em{% - \hskip 0pt plus 0.25fil - .\hfil.\hfil.% - \hskip 0pt plus 0.5fil - }% -} - -% @enddots{} is an end-of-sentence ellipsis. -% -\def\enddots{% - \dots - \spacefactor=3000 -} - -% @comma{} is so commas can be inserted into text without messing up -% Texinfo's parsing. -% -\let\comma = , - -% @refill is a no-op. -\let\refill=\relax - -% If working on a large document in chapters, it is convenient to -% be able to disable indexing, cross-referencing, and contents, for test runs. -% This is done with @novalidate (before @setfilename). -% -\newif\iflinks \linkstrue % by default we want the aux files. -\let\novalidate = \linksfalse - -% @setfilename is done at the beginning of every texinfo file. -% So open here the files we need to have open while reading the input. -% This makes it possible to make a .fmt file for texinfo. -\def\setfilename{% - \fixbackslash % Turn off hack to swallow `\input texinfo'. - \iflinks - \tryauxfile - % Open the new aux file. TeX will close it automatically at exit. - \immediate\openout\auxfile=\jobname.aux - \fi % \openindices needs to do some work in any case. - \openindices - \let\setfilename=\comment % Ignore extra @setfilename cmds. - % - % If texinfo.cnf is present on the system, read it. - % Useful for site-wide @afourpaper, etc. - \openin 1 texinfo.cnf - \ifeof 1 \else \input texinfo.cnf \fi - \closein 1 - % - \comment % Ignore the actual filename. -} - -% Called from \setfilename. -% -\def\openindices{% - \newindex{cp}% - \newcodeindex{fn}% - \newcodeindex{vr}% - \newcodeindex{tp}% - \newcodeindex{ky}% - \newcodeindex{pg}% -} - -% @bye. -\outer\def\bye{\pagealignmacro\tracingstats=1\ptexend} - - -\message{pdf,} -% adobe `portable' document format -\newcount\tempnum -\newcount\lnkcount -\newtoks\filename -\newcount\filenamelength -\newcount\pgn -\newtoks\toksA -\newtoks\toksB -\newtoks\toksC -\newtoks\toksD -\newbox\boxA -\newcount\countA -\newif\ifpdf -\newif\ifpdfmakepagedest - -% when pdftex is run in dvi mode, \pdfoutput is defined (so \pdfoutput=1 -% can be set). So we test for \relax and 0 as well as \undefined, -% borrowed from ifpdf.sty. -\ifx\pdfoutput\undefined -\else - \ifx\pdfoutput\relax - \else - \ifcase\pdfoutput - \else - \pdftrue - \fi - \fi -\fi -% -\ifpdf - \input pdfcolor - \pdfcatalog{/PageMode /UseOutlines}% - \def\dopdfimage#1#2#3{% - \def\imagewidth{#2}% - \def\imageheight{#3}% - % without \immediate, pdftex seg faults when the same image is - % included twice. (Version 3.14159-pre-1.0-unofficial-20010704.) - \ifnum\pdftexversion < 14 - \immediate\pdfimage - \else - \immediate\pdfximage - \fi - \ifx\empty\imagewidth\else width \imagewidth \fi - \ifx\empty\imageheight\else height \imageheight \fi - \ifnum\pdftexversion<13 - #1.pdf% - \else - {#1.pdf}% - \fi - \ifnum\pdftexversion < 14 \else - \pdfrefximage \pdflastximage - \fi} - \def\pdfmkdest#1{{% - % We have to set dummies so commands such as @code in a section title - % aren't expanded. - \atdummies - \normalturnoffactive - \pdfdest name{#1} xyz% - }} - \def\pdfmkpgn#1{#1} - \let\linkcolor = \Blue % was Cyan, but that seems light? - \def\endlink{\Black\pdfendlink} - % Adding outlines to PDF; macros for calculating structure of outlines - % come from Petr Olsak - \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0% - \else \csname#1\endcsname \fi} - \def\advancenumber#1{\tempnum=\expnumber{#1}\relax - \advance\tempnum by 1 - \expandafter\xdef\csname#1\endcsname{\the\tempnum}} - % - % #1 is the section text. #2 is the pdf expression for the number - % of subentries (or empty, for subsubsections). #3 is the node - % text, which might be empty if this toc entry had no - % corresponding node. #4 is the page number. - % - \def\dopdfoutline#1#2#3#4{% - % Generate a link to the node text if that exists; else, use the - % page number. We could generate a destination for the section - % text in the case where a section has no node, but it doesn't - % seem worthwhile, since most documents are normally structured. - \def\pdfoutlinedest{#3}% - \ifx\pdfoutlinedest\empty \def\pdfoutlinedest{#4}\fi - % - \pdfoutline goto name{\pdfmkpgn{\pdfoutlinedest}}#2{#1}% - } - % - \def\pdfmakeoutlines{% - \begingroup - % Thanh's hack / proper braces in bookmarks - \edef\mylbrace{\iftrue \string{\else}\fi}\let\{=\mylbrace - \edef\myrbrace{\iffalse{\else\string}\fi}\let\}=\myrbrace - % - % Read toc silently, to get counts of subentries for \pdfoutline. - \def\numchapentry##1##2##3##4{% - \def\thischapnum{##2}% - \def\thissecnum{0}% - \def\thissubsecnum{0}% - }% - \def\numsecentry##1##2##3##4{% - \advancenumber{chap\thischapnum}% - \def\thissecnum{##2}% - \def\thissubsecnum{0}% - }% - \def\numsubsecentry##1##2##3##4{% - \advancenumber{sec\thissecnum}% - \def\thissubsecnum{##2}% - }% - \def\numsubsubsecentry##1##2##3##4{% - \advancenumber{subsec\thissubsecnum}% - }% - \def\thischapnum{0}% - \def\thissecnum{0}% - \def\thissubsecnum{0}% - % - % use \def rather than \let here because we redefine \chapentry et - % al. a second time, below. - \def\appentry{\numchapentry}% - \def\appsecentry{\numsecentry}% - \def\appsubsecentry{\numsubsecentry}% - \def\appsubsubsecentry{\numsubsubsecentry}% - \def\unnchapentry{\numchapentry}% - \def\unnsecentry{\numsecentry}% - \def\unnsubsecentry{\numsubsecentry}% - \def\unnsubsubsecentry{\numsubsubsecentry}% - \input \jobname.toc - % - % Read toc second time, this time actually producing the outlines. - % The `-' means take the \expnumber as the absolute number of - % subentries, which we calculated on our first read of the .toc above. - % - % We use the node names as the destinations. - \def\numchapentry##1##2##3##4{% - \dopdfoutline{##1}{count-\expnumber{chap##2}}{##3}{##4}}% - \def\numsecentry##1##2##3##4{% - \dopdfoutline{##1}{count-\expnumber{sec##2}}{##3}{##4}}% - \def\numsubsecentry##1##2##3##4{% - \dopdfoutline{##1}{count-\expnumber{subsec##2}}{##3}{##4}}% - \def\numsubsubsecentry##1##2##3##4{% count is always zero - \dopdfoutline{##1}{}{##3}{##4}}% - % - % PDF outlines are displayed using system fonts, instead of - % document fonts. Therefore we cannot use special characters, - % since the encoding is unknown. For example, the eogonek from - % Latin 2 (0xea) gets translated to a | character. Info from - % Staszek Wawrykiewicz, 19 Jan 2004 04:09:24 +0100. - % - % xx to do this right, we have to translate 8-bit characters to - % their "best" equivalent, based on the @documentencoding. Right - % now, I guess we'll just let the pdf reader have its way. - \indexnofonts - \turnoffactive - \input \jobname.toc - \endgroup - } - % - \def\makelinks #1,{% - \def\params{#1}\def\E{END}% - \ifx\params\E - \let\nextmakelinks=\relax - \else - \let\nextmakelinks=\makelinks - \ifnum\lnkcount>0,\fi - \picknum{#1}% - \startlink attr{/Border [0 0 0]} - goto name{\pdfmkpgn{\the\pgn}}% - \linkcolor #1% - \advance\lnkcount by 1% - \endlink - \fi - \nextmakelinks - } - \def\picknum#1{\expandafter\pn#1} - \def\pn#1{% - \def\p{#1}% - \ifx\p\lbrace - \let\nextpn=\ppn - \else - \let\nextpn=\ppnn - \def\first{#1} - \fi - \nextpn - } - \def\ppn#1{\pgn=#1\gobble} - \def\ppnn{\pgn=\first} - \def\pdfmklnk#1{\lnkcount=0\makelinks #1,END,} - \def\skipspaces#1{\def\PP{#1}\def\D{|}% - \ifx\PP\D\let\nextsp\relax - \else\let\nextsp\skipspaces - \ifx\p\space\else\addtokens{\filename}{\PP}% - \advance\filenamelength by 1 - \fi - \fi - \nextsp} - \def\getfilename#1{\filenamelength=0\expandafter\skipspaces#1|\relax} - \ifnum\pdftexversion < 14 - \let \startlink \pdfannotlink - \else - \let \startlink \pdfstartlink - \fi - \def\pdfurl#1{% - \begingroup - \normalturnoffactive\def\@{@}% - \makevalueexpandable - \leavevmode\Red - \startlink attr{/Border [0 0 0]}% - user{/Subtype /Link /A << /S /URI /URI (#1) >>}% - \endgroup} - \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}} - \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks} - \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks} - \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}} - \def\maketoks{% - \expandafter\poptoks\the\toksA|ENDTOKS|\relax - \ifx\first0\adn0 - \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3 - \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6 - \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9 - \else - \ifnum0=\countA\else\makelink\fi - \ifx\first.\let\next=\done\else - \let\next=\maketoks - \addtokens{\toksB}{\the\toksD} - \ifx\first,\addtokens{\toksB}{\space}\fi - \fi - \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi - \next} - \def\makelink{\addtokens{\toksB}% - {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0} - \def\pdflink#1{% - \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}} - \linkcolor #1\endlink} - \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st} -\else - \let\pdfmkdest = \gobble - \let\pdfurl = \gobble - \let\endlink = \relax - \let\linkcolor = \relax - \let\pdfmakeoutlines = \relax -\fi % \ifx\pdfoutput - - -\message{fonts,} - -% Change the current font style to #1, remembering it in \curfontstyle. -% For now, we do not accumulate font styles: @b{@i{foo}} prints foo in -% italics, not bold italics. -% -\def\setfontstyle#1{% - \def\curfontstyle{#1}% not as a control sequence, because we are \edef'd. - \csname ten#1\endcsname % change the current font -} - -% Select #1 fonts with the current style. -% -\def\selectfonts#1{\csname #1fonts\endcsname \csname\curfontstyle\endcsname} - -\def\rm{\fam=0 \setfontstyle{rm}} -\def\it{\fam=\itfam \setfontstyle{it}} -\def\sl{\fam=\slfam \setfontstyle{sl}} -\def\bf{\fam=\bffam \setfontstyle{bf}}\def\bfstylename{bf} -\def\tt{\fam=\ttfam \setfontstyle{tt}} - -% Texinfo sort of supports the sans serif font style, which plain TeX does not. -% So we set up a \sf. -\newfam\sffam -\def\sf{\fam=\sffam \setfontstyle{sf}} -\let\li = \sf % Sometimes we call it \li, not \sf. - -% We don't need math for this font style. -\def\ttsl{\setfontstyle{ttsl}} - -% Default leading. -\newdimen\textleading \textleading = 13.2pt - -% Set the baselineskip to #1, and the lineskip and strut size -% correspondingly. There is no deep meaning behind these magic numbers -% used as factors; they just match (closely enough) what Knuth defined. -% -\def\lineskipfactor{.08333} -\def\strutheightpercent{.70833} -\def\strutdepthpercent {.29167} -% -\def\setleading#1{% - \normalbaselineskip = #1\relax - \normallineskip = \lineskipfactor\normalbaselineskip - \normalbaselines - \setbox\strutbox =\hbox{% - \vrule width0pt height\strutheightpercent\baselineskip - depth \strutdepthpercent \baselineskip - }% -} - -% Set the font macro #1 to the font named #2, adding on the -% specified font prefix (normally `cm'). -% #3 is the font's design size, #4 is a scale factor -\def\setfont#1#2#3#4{\font#1=\fontprefix#2#3 scaled #4} - -% Use cm as the default font prefix. -% To specify the font prefix, you must define \fontprefix -% before you read in texinfo.tex. -\ifx\fontprefix\undefined -\def\fontprefix{cm} -\fi -% Support font families that don't use the same naming scheme as CM. -\def\rmshape{r} -\def\rmbshape{bx} %where the normal face is bold -\def\bfshape{b} -\def\bxshape{bx} -\def\ttshape{tt} -\def\ttbshape{tt} -\def\ttslshape{sltt} -\def\itshape{ti} -\def\itbshape{bxti} -\def\slshape{sl} -\def\slbshape{bxsl} -\def\sfshape{ss} -\def\sfbshape{ss} -\def\scshape{csc} -\def\scbshape{csc} - -% Text fonts (11.2pt, magstep1). -\def\textnominalsize{11pt} -\edef\mainmagstep{\magstephalf} -\setfont\textrm\rmshape{10}{\mainmagstep} -\setfont\texttt\ttshape{10}{\mainmagstep} -\setfont\textbf\bfshape{10}{\mainmagstep} -\setfont\textit\itshape{10}{\mainmagstep} -\setfont\textsl\slshape{10}{\mainmagstep} -\setfont\textsf\sfshape{10}{\mainmagstep} -\setfont\textsc\scshape{10}{\mainmagstep} -\setfont\textttsl\ttslshape{10}{\mainmagstep} -\font\texti=cmmi10 scaled \mainmagstep -\font\textsy=cmsy10 scaled \mainmagstep - -% A few fonts for @defun names and args. -\setfont\defbf\bfshape{10}{\magstep1} -\setfont\deftt\ttshape{10}{\magstep1} -\setfont\defttsl\ttslshape{10}{\magstep1} -\def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf} - -% Fonts for indices, footnotes, small examples (9pt). -\def\smallnominalsize{9pt} -\setfont\smallrm\rmshape{9}{1000} -\setfont\smalltt\ttshape{9}{1000} -\setfont\smallbf\bfshape{10}{900} -\setfont\smallit\itshape{9}{1000} -\setfont\smallsl\slshape{9}{1000} -\setfont\smallsf\sfshape{9}{1000} -\setfont\smallsc\scshape{10}{900} -\setfont\smallttsl\ttslshape{10}{900} -\font\smalli=cmmi9 -\font\smallsy=cmsy9 - -% Fonts for small examples (8pt). -\def\smallernominalsize{8pt} -\setfont\smallerrm\rmshape{8}{1000} -\setfont\smallertt\ttshape{8}{1000} -\setfont\smallerbf\bfshape{10}{800} -\setfont\smallerit\itshape{8}{1000} -\setfont\smallersl\slshape{8}{1000} -\setfont\smallersf\sfshape{8}{1000} -\setfont\smallersc\scshape{10}{800} -\setfont\smallerttsl\ttslshape{10}{800} -\font\smalleri=cmmi8 -\font\smallersy=cmsy8 - -% Fonts for title page (20.4pt): -\def\titlenominalsize{20pt} -\setfont\titlerm\rmbshape{12}{\magstep3} -\setfont\titleit\itbshape{10}{\magstep4} -\setfont\titlesl\slbshape{10}{\magstep4} -\setfont\titlett\ttbshape{12}{\magstep3} -\setfont\titlettsl\ttslshape{10}{\magstep4} -\setfont\titlesf\sfbshape{17}{\magstep1} -\let\titlebf=\titlerm -\setfont\titlesc\scbshape{10}{\magstep4} -\font\titlei=cmmi12 scaled \magstep3 -\font\titlesy=cmsy10 scaled \magstep4 -\def\authorrm{\secrm} -\def\authortt{\sectt} - -% Chapter (and unnumbered) fonts (17.28pt). -\def\chapnominalsize{17pt} -\setfont\chaprm\rmbshape{12}{\magstep2} -\setfont\chapit\itbshape{10}{\magstep3} -\setfont\chapsl\slbshape{10}{\magstep3} -\setfont\chaptt\ttbshape{12}{\magstep2} -\setfont\chapttsl\ttslshape{10}{\magstep3} -\setfont\chapsf\sfbshape{17}{1000} -\let\chapbf=\chaprm -\setfont\chapsc\scbshape{10}{\magstep3} -\font\chapi=cmmi12 scaled \magstep2 -\font\chapsy=cmsy10 scaled \magstep3 - -% Section fonts (14.4pt). -\def\secnominalsize{14pt} -\setfont\secrm\rmbshape{12}{\magstep1} -\setfont\secit\itbshape{10}{\magstep2} -\setfont\secsl\slbshape{10}{\magstep2} -\setfont\sectt\ttbshape{12}{\magstep1} -\setfont\secttsl\ttslshape{10}{\magstep2} -\setfont\secsf\sfbshape{12}{\magstep1} -\let\secbf\secrm -\setfont\secsc\scbshape{10}{\magstep2} -\font\seci=cmmi12 scaled \magstep1 -\font\secsy=cmsy10 scaled \magstep2 - -% Subsection fonts (13.15pt). -\def\ssecnominalsize{13pt} -\setfont\ssecrm\rmbshape{12}{\magstephalf} -\setfont\ssecit\itbshape{10}{1315} -\setfont\ssecsl\slbshape{10}{1315} -\setfont\ssectt\ttbshape{12}{\magstephalf} -\setfont\ssecttsl\ttslshape{10}{1315} -\setfont\ssecsf\sfbshape{12}{\magstephalf} -\let\ssecbf\ssecrm -\setfont\ssecsc\scbshape{10}{1315} -\font\sseci=cmmi12 scaled \magstephalf -\font\ssecsy=cmsy10 scaled 1315 - -% Reduced fonts for @acro in text (10pt). -\def\reducednominalsize{10pt} -\setfont\reducedrm\rmshape{10}{1000} -\setfont\reducedtt\ttshape{10}{1000} -\setfont\reducedbf\bfshape{10}{1000} -\setfont\reducedit\itshape{10}{1000} -\setfont\reducedsl\slshape{10}{1000} -\setfont\reducedsf\sfshape{10}{1000} -\setfont\reducedsc\scshape{10}{1000} -\setfont\reducedttsl\ttslshape{10}{1000} -\font\reducedi=cmmi10 -\font\reducedsy=cmsy10 - -% In order for the font changes to affect most math symbols and letters, -% we have to define the \textfont of the standard families. Since -% texinfo doesn't allow for producing subscripts and superscripts except -% in the main text, we don't bother to reset \scriptfont and -% \scriptscriptfont (which would also require loading a lot more fonts). -% -\def\resetmathfonts{% - \textfont0=\tenrm \textfont1=\teni \textfont2=\tensy - \textfont\itfam=\tenit \textfont\slfam=\tensl \textfont\bffam=\tenbf - \textfont\ttfam=\tentt \textfont\sffam=\tensf -} - -% The font-changing commands redefine the meanings of \tenSTYLE, instead -% of just \STYLE. We do this because \STYLE needs to also set the -% current \fam for math mode. Our \STYLE (e.g., \rm) commands hardwire -% \tenSTYLE to set the current font. -% -% Each font-changing command also sets the names \lsize (one size lower) -% and \lllsize (three sizes lower). These relative commands are used in -% the LaTeX logo and acronyms. -% -% This all needs generalizing, badly. -% -\def\textfonts{% - \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl - \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc - \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy - \let\tenttsl=\textttsl - \def\curfontsize{text}% - \def\lsize{reduced}\def\lllsize{smaller}% - \resetmathfonts \setleading{\textleading}} -\def\titlefonts{% - \let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl - \let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc - \let\tensf=\titlesf \let\teni=\titlei \let\tensy=\titlesy - \let\tenttsl=\titlettsl - \def\curfontsize{title}% - \def\lsize{chap}\def\lllsize{subsec}% - \resetmathfonts \setleading{25pt}} -\def\titlefont#1{{\titlefonts\rm #1}} -\def\chapfonts{% - \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl - \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc - \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy - \let\tenttsl=\chapttsl - \def\curfontsize{chap}% - \def\lsize{sec}\def\lllsize{text}% - \resetmathfonts \setleading{19pt}} -\def\secfonts{% - \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl - \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc - \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy - \let\tenttsl=\secttsl - \def\curfontsize{sec}% - \def\lsize{subsec}\def\lllsize{reduced}% - \resetmathfonts \setleading{16pt}} -\def\subsecfonts{% - \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl - \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc - \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy - \let\tenttsl=\ssecttsl - \def\curfontsize{ssec}% - \def\lsize{text}\def\lllsize{small}% - \resetmathfonts \setleading{15pt}} -\let\subsubsecfonts = \subsecfonts -\def\reducedfonts{% - \let\tenrm=\reducedrm \let\tenit=\reducedit \let\tensl=\reducedsl - \let\tenbf=\reducedbf \let\tentt=\reducedtt \let\reducedcaps=\reducedsc - \let\tensf=\reducedsf \let\teni=\reducedi \let\tensy=\reducedsy - \let\tenttsl=\reducedttsl - \def\curfontsize{reduced}% - \def\lsize{small}\def\lllsize{smaller}% - \resetmathfonts \setleading{10.5pt}} -\def\smallfonts{% - \let\tenrm=\smallrm \let\tenit=\smallit \let\tensl=\smallsl - \let\tenbf=\smallbf \let\tentt=\smalltt \let\smallcaps=\smallsc - \let\tensf=\smallsf \let\teni=\smalli \let\tensy=\smallsy - \let\tenttsl=\smallttsl - \def\curfontsize{small}% - \def\lsize{smaller}\def\lllsize{smaller}% - \resetmathfonts \setleading{10.5pt}} -\def\smallerfonts{% - \let\tenrm=\smallerrm \let\tenit=\smallerit \let\tensl=\smallersl - \let\tenbf=\smallerbf \let\tentt=\smallertt \let\smallcaps=\smallersc - \let\tensf=\smallersf \let\teni=\smalleri \let\tensy=\smallersy - \let\tenttsl=\smallerttsl - \def\curfontsize{smaller}% - \def\lsize{smaller}\def\lllsize{smaller}% - \resetmathfonts \setleading{9.5pt}} - -% Set the fonts to use with the @small... environments. -\let\smallexamplefonts = \smallfonts - -% About \smallexamplefonts. If we use \smallfonts (9pt), @smallexample -% can fit this many characters: -% 8.5x11=86 smallbook=72 a4=90 a5=69 -% If we use \scriptfonts (8pt), then we can fit this many characters: -% 8.5x11=90+ smallbook=80 a4=90+ a5=77 -% For me, subjectively, the few extra characters that fit aren't worth -% the additional smallness of 8pt. So I'm making the default 9pt. -% -% By the way, for comparison, here's what fits with @example (10pt): -% 8.5x11=71 smallbook=60 a4=75 a5=58 -% -% I wish the USA used A4 paper. -% --karl, 24jan03. - - -% Set up the default fonts, so we can use them for creating boxes. -% -\textfonts \rm - -% Define these so they can be easily changed for other fonts. -\def\angleleft{$\langle$} -\def\angleright{$\rangle$} - -% Count depth in font-changes, for error checks -\newcount\fontdepth \fontdepth=0 - -% Fonts for short table of contents. -\setfont\shortcontrm\rmshape{12}{1000} -\setfont\shortcontbf\bfshape{10}{\magstep1} % no cmb12 -\setfont\shortcontsl\slshape{12}{1000} -\setfont\shortconttt\ttshape{12}{1000} - -%% Add scribe-like font environments, plus @l for inline lisp (usually sans -%% serif) and @ii for TeX italic - -% \smartitalic{ARG} outputs arg in italics, followed by an italic correction -% unless the following character is such as not to need one. -\def\smartitalicx{\ifx\next,\else\ifx\next-\else\ifx\next.\else - \ptexslash\fi\fi\fi} -\def\smartslanted#1{{\ifusingtt\ttsl\sl #1}\futurelet\next\smartitalicx} -\def\smartitalic#1{{\ifusingtt\ttsl\it #1}\futurelet\next\smartitalicx} - -% like \smartslanted except unconditionally uses \ttsl. -% @var is set to this for defun arguments. -\def\ttslanted#1{{\ttsl #1}\futurelet\next\smartitalicx} - -% like \smartslanted except unconditionally use \sl. We never want -% ttsl for book titles, do we? -\def\cite#1{{\sl #1}\futurelet\next\smartitalicx} - -\let\i=\smartitalic -\let\slanted=\smartslanted -\let\var=\smartslanted -\let\dfn=\smartslanted -\let\emph=\smartitalic - -% @b, explicit bold. -\def\b#1{{\bf #1}} -\let\strong=\b - -% @sansserif, explicit sans. -\def\sansserif#1{{\sf #1}} - -% We can't just use \exhyphenpenalty, because that only has effect at -% the end of a paragraph. Restore normal hyphenation at the end of the -% group within which \nohyphenation is presumably called. -% -\def\nohyphenation{\hyphenchar\font = -1 \aftergroup\restorehyphenation} -\def\restorehyphenation{\hyphenchar\font = `- } - -% Set sfcode to normal for the chars that usually have another value. -% Can't use plain's \frenchspacing because it uses the `\x notation, and -% sometimes \x has an active definition that messes things up. -% -\catcode`@=11 - \def\frenchspacing{% - \sfcode\dotChar =\@m \sfcode\questChar=\@m \sfcode\exclamChar=\@m - \sfcode\colonChar=\@m \sfcode\semiChar =\@m \sfcode\commaChar =\@m - } -\catcode`@=\other - -\def\t#1{% - {\tt \rawbackslash \frenchspacing #1}% - \null -} -\def\samp#1{`\tclose{#1}'\null} -\setfont\keyrm\rmshape{8}{1000} -\font\keysy=cmsy9 -\def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{% - \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{% - \vbox{\hrule\kern-0.4pt - \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}% - \kern-0.4pt\hrule}% - \kern-.06em\raise0.4pt\hbox{\angleright}}}} -% The old definition, with no lozenge: -%\def\key #1{{\ttsl \nohyphenation \uppercase{#1}}\null} -\def\ctrl #1{{\tt \rawbackslash \hat}#1} - -% @file, @option are the same as @samp. -\let\file=\samp -\let\option=\samp - -% @code is a modification of @t, -% which makes spaces the same size as normal in the surrounding text. -\def\tclose#1{% - {% - % Change normal interword space to be same as for the current font. - \spaceskip = \fontdimen2\font - % - % Switch to typewriter. - \tt - % - % But `\ ' produces the large typewriter interword space. - \def\ {{\spaceskip = 0pt{} }}% - % - % Turn off hyphenation. - \nohyphenation - % - \rawbackslash - \frenchspacing - #1% - }% - \null -} - -% We *must* turn on hyphenation at `-' and `_' in @code. -% Otherwise, it is too hard to avoid overfull hboxes -% in the Emacs manual, the Library manual, etc. - -% Unfortunately, TeX uses one parameter (\hyphenchar) to control -% both hyphenation at - and hyphenation within words. -% We must therefore turn them both off (\tclose does that) -% and arrange explicitly to hyphenate at a dash. -% -- rms. -{ - \catcode`\-=\active - \catcode`\_=\active - % - \global\def\code{\begingroup - \catcode`\-=\active \let-\codedash - \catcode`\_=\active \let_\codeunder - \codex - } -} - -\def\realdash{-} -\def\codedash{-\discretionary{}{}{}} -\def\codeunder{% - % this is all so @math{@code{var_name}+1} can work. In math mode, _ - % is "active" (mathcode"8000) and \normalunderscore (or \char95, etc.) - % will therefore expand the active definition of _, which is us - % (inside @code that is), therefore an endless loop. - \ifusingtt{\ifmmode - \mathchar"075F % class 0=ordinary, family 7=ttfam, pos 0x5F=_. - \else\normalunderscore \fi - \discretionary{}{}{}}% - {\_}% -} -\def\codex #1{\tclose{#1}\endgroup} - -% @kbd is like @code, except that if the argument is just one @key command, -% then @kbd has no effect. - -% @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always), -% `example' (@kbd uses ttsl only inside of @example and friends), -% or `code' (@kbd uses normal tty font always). -\parseargdef\kbdinputstyle{% - \def\arg{#1}% - \ifx\arg\worddistinct - \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}% - \else\ifx\arg\wordexample - \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}% - \else\ifx\arg\wordcode - \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}% - \else - \errhelp = \EMsimple - \errmessage{Unknown @kbdinputstyle option `\arg'}% - \fi\fi\fi -} -\def\worddistinct{distinct} -\def\wordexample{example} -\def\wordcode{code} - -% Default is `distinct.' -\kbdinputstyle distinct - -\def\xkey{\key} -\def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{#3}\def\threex{??}% -\ifx\one\xkey\ifx\threex\three \key{#2}% -\else{\tclose{\kbdfont\look}}\fi -\else{\tclose{\kbdfont\look}}\fi} - -% For @indicateurl, @env, @command quotes seem unnecessary, so use \code. -\let\indicateurl=\code -\let\env=\code -\let\command=\code - -% @uref (abbreviation for `urlref') takes an optional (comma-separated) -% second argument specifying the text to display and an optional third -% arg as text to display instead of (rather than in addition to) the url -% itself. First (mandatory) arg is the url. Perhaps eventually put in -% a hypertex \special here. -% -\def\uref#1{\douref #1,,,\finish} -\def\douref#1,#2,#3,#4\finish{\begingroup - \unsepspaces - \pdfurl{#1}% - \setbox0 = \hbox{\ignorespaces #3}% - \ifdim\wd0 > 0pt - \unhbox0 % third arg given, show only that - \else - \setbox0 = \hbox{\ignorespaces #2}% - \ifdim\wd0 > 0pt - \ifpdf - \unhbox0 % PDF: 2nd arg given, show only it - \else - \unhbox0\ (\code{#1})% DVI: 2nd arg given, show both it and url - \fi - \else - \code{#1}% only url given, so show it - \fi - \fi - \endlink -\endgroup} - -% @url synonym for @uref, since that's how everyone uses it. -% -\let\url=\uref - -% rms does not like angle brackets --karl, 17may97. -% So now @email is just like @uref, unless we are pdf. -% -%\def\email#1{\angleleft{\tt #1}\angleright} -\ifpdf - \def\email#1{\doemail#1,,\finish} - \def\doemail#1,#2,#3\finish{\begingroup - \unsepspaces - \pdfurl{mailto:#1}% - \setbox0 = \hbox{\ignorespaces #2}% - \ifdim\wd0>0pt\unhbox0\else\code{#1}\fi - \endlink - \endgroup} -\else - \let\email=\uref -\fi - -% Check if we are currently using a typewriter font. Since all the -% Computer Modern typewriter fonts have zero interword stretch (and -% shrink), and it is reasonable to expect all typewriter fonts to have -% this property, we can check that font parameter. -% -\def\ifmonospace{\ifdim\fontdimen3\font=0pt } - -% Typeset a dimension, e.g., `in' or `pt'. The only reason for the -% argument is to make the input look right: @dmn{pt} instead of @dmn{}pt. -% -\def\dmn#1{\thinspace #1} - -\def\kbd#1{\def\look{#1}\expandafter\kbdfoo\look??\par} - -% @l was never documented to mean ``switch to the Lisp font'', -% and it is not used as such in any manual I can find. We need it for -% Polish suppressed-l. --karl, 22sep96. -%\def\l#1{{\li #1}\null} - -% Explicit font changes: @r, @sc, undocumented @ii. -\def\r#1{{\rm #1}} % roman font -\def\sc#1{{\smallcaps#1}} % smallcaps font -\def\ii#1{{\it #1}} % italic font - -% @acronym for "FBI", "NATO", and the like. -% We print this one point size smaller, since it's intended for -% all-uppercase. -% -\def\acronym#1{\doacronym #1,,\finish} -\def\doacronym#1,#2,#3\finish{% - {\selectfonts\lsize #1}% - \def\temp{#2}% - \ifx\temp\empty \else - \space ({\unsepspaces \ignorespaces \temp \unskip})% - \fi -} - -% @abbr for "Comput. J." and the like. -% No font change, but don't do end-of-sentence spacing. -% -\def\abbr#1{\doabbr #1,,\finish} -\def\doabbr#1,#2,#3\finish{% - {\frenchspacing #1}% - \def\temp{#2}% - \ifx\temp\empty \else - \space ({\unsepspaces \ignorespaces \temp \unskip})% - \fi -} - -% @pounds{} is a sterling sign, which Knuth put in the CM italic font. -% -\def\pounds{{\it\$}} - -% @euro{} comes from a separate font, depending on the current style. -% We use the free feym* fonts from the eurosym package by Henrik -% Theiling, which support regular, slanted, bold and bold slanted (and -% "outlined" (blackboard board, sort of) versions, which we don't need). -% It is available from http://www.ctan.org/tex-archive/fonts/eurosym. -% -% Although only regular is the truly official Euro symbol, we ignore -% that. The Euro is designed to be slightly taller than the regular -% font height. -% -% feymr - regular -% feymo - slanted -% feybr - bold -% feybo - bold slanted -% -% There is no good (free) typewriter version, to my knowledge. -% A feymr10 euro is ~7.3pt wide, while a normal cmtt10 char is ~5.25pt wide. -% Hmm. -% -% Also doesn't work in math. Do we need to do math with euro symbols? -% Hope not. -% -% -\def\euro{{\eurofont e}} -\def\eurofont{% - % We set the font at each command, rather than predefining it in - % \textfonts and the other font-switching commands, so that - % installations which never need the symbol don't have to have the - % font installed. - % - % There is only one designed size (nominal 10pt), so we always scale - % that to the current nominal size. - % - % By the way, simply using "at 1em" works for cmr10 and the like, but - % does not work for cmbx10 and other extended/shrunken fonts. - % - \def\eurosize{\csname\curfontsize nominalsize\endcsname}% - % - \ifx\curfontstyle\bfstylename - % bold: - \font\thiseurofont = \ifusingit{feybo10}{feybr10} at \eurosize - \else - % regular: - \font\thiseurofont = \ifusingit{feymo10}{feymr10} at \eurosize - \fi - \thiseurofont -} - -% @registeredsymbol - R in a circle. The font for the R should really -% be smaller yet, but lllsize is the best we can do for now. -% Adapted from the plain.tex definition of \copyright. -% -\def\registeredsymbol{% - $^{{\ooalign{\hfil\raise.07ex\hbox{\selectfonts\lllsize R}% - \hfil\crcr\Orb}}% - }$% -} - -% Laurent Siebenmann reports \Orb undefined with: -% Textures 1.7.7 (preloaded format=plain 93.10.14) (68K) 16 APR 2004 02:38 -% so we'll define it if necessary. -% -\ifx\Orb\undefined -\def\Orb{\mathhexbox20D} -\fi - - -\message{page headings,} - -\newskip\titlepagetopglue \titlepagetopglue = 1.5in -\newskip\titlepagebottomglue \titlepagebottomglue = 2pc - -% First the title page. Must do @settitle before @titlepage. -\newif\ifseenauthor -\newif\iffinishedtitlepage - -% Do an implicit @contents or @shortcontents after @end titlepage if the -% user says @setcontentsaftertitlepage or @setshortcontentsaftertitlepage. -% -\newif\ifsetcontentsaftertitlepage - \let\setcontentsaftertitlepage = \setcontentsaftertitlepagetrue -\newif\ifsetshortcontentsaftertitlepage - \let\setshortcontentsaftertitlepage = \setshortcontentsaftertitlepagetrue - -\parseargdef\shorttitlepage{\begingroup\hbox{}\vskip 1.5in \chaprm \centerline{#1}% - \endgroup\page\hbox{}\page} - -\envdef\titlepage{% - % Open one extra group, as we want to close it in the middle of \Etitlepage. - \begingroup - \parindent=0pt \textfonts - % Leave some space at the very top of the page. - \vglue\titlepagetopglue - % No rule at page bottom unless we print one at the top with @title. - \finishedtitlepagetrue - % - % Most title ``pages'' are actually two pages long, with space - % at the top of the second. We don't want the ragged left on the second. - \let\oldpage = \page - \def\page{% - \iffinishedtitlepage\else - \finishtitlepage - \fi - \let\page = \oldpage - \page - \null - }% -} - -\def\Etitlepage{% - \iffinishedtitlepage\else - \finishtitlepage - \fi - % It is important to do the page break before ending the group, - % because the headline and footline are only empty inside the group. - % If we use the new definition of \page, we always get a blank page - % after the title page, which we certainly don't want. - \oldpage - \endgroup - % - % Need this before the \...aftertitlepage checks so that if they are - % in effect the toc pages will come out with page numbers. - \HEADINGSon - % - % If they want short, they certainly want long too. - \ifsetshortcontentsaftertitlepage - \shortcontents - \contents - \global\let\shortcontents = \relax - \global\let\contents = \relax - \fi - % - \ifsetcontentsaftertitlepage - \contents - \global\let\contents = \relax - \global\let\shortcontents = \relax - \fi -} - -\def\finishtitlepage{% - \vskip4pt \hrule height 2pt width \hsize - \vskip\titlepagebottomglue - \finishedtitlepagetrue -} - -%%% Macros to be used within @titlepage: - -\let\subtitlerm=\tenrm -\def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines} - -\def\authorfont{\authorrm \normalbaselineskip = 16pt \normalbaselines - \let\tt=\authortt} - -\parseargdef\title{% - \checkenv\titlepage - \leftline{\titlefonts\rm #1} - % print a rule at the page bottom also. - \finishedtitlepagefalse - \vskip4pt \hrule height 4pt width \hsize \vskip4pt -} - -\parseargdef\subtitle{% - \checkenv\titlepage - {\subtitlefont \rightline{#1}}% -} - -% @author should come last, but may come many times. -% It can also be used inside @quotation. -% -\parseargdef\author{% - \def\temp{\quotation}% - \ifx\thisenv\temp - \def\quotationauthor{#1}% printed in \Equotation. - \else - \checkenv\titlepage - \ifseenauthor\else \vskip 0pt plus 1filll \seenauthortrue \fi - {\authorfont \leftline{#1}}% - \fi -} - - -%%% Set up page headings and footings. - -\let\thispage=\folio - -\newtoks\evenheadline % headline on even pages -\newtoks\oddheadline % headline on odd pages -\newtoks\evenfootline % footline on even pages -\newtoks\oddfootline % footline on odd pages - -% Now make TeX use those variables -\headline={{\textfonts\rm \ifodd\pageno \the\oddheadline - \else \the\evenheadline \fi}} -\footline={{\textfonts\rm \ifodd\pageno \the\oddfootline - \else \the\evenfootline \fi}\HEADINGShook} -\let\HEADINGShook=\relax - -% Commands to set those variables. -% For example, this is what @headings on does -% @evenheading @thistitle|@thispage|@thischapter -% @oddheading @thischapter|@thispage|@thistitle -% @evenfooting @thisfile|| -% @oddfooting ||@thisfile - - -\def\evenheading{\parsearg\evenheadingxxx} -\def\evenheadingxxx #1{\evenheadingyyy #1\|\|\|\|\finish} -\def\evenheadingyyy #1\|#2\|#3\|#4\finish{% -\global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} - -\def\oddheading{\parsearg\oddheadingxxx} -\def\oddheadingxxx #1{\oddheadingyyy #1\|\|\|\|\finish} -\def\oddheadingyyy #1\|#2\|#3\|#4\finish{% -\global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} - -\parseargdef\everyheading{\oddheadingxxx{#1}\evenheadingxxx{#1}}% - -\def\evenfooting{\parsearg\evenfootingxxx} -\def\evenfootingxxx #1{\evenfootingyyy #1\|\|\|\|\finish} -\def\evenfootingyyy #1\|#2\|#3\|#4\finish{% -\global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} - -\def\oddfooting{\parsearg\oddfootingxxx} -\def\oddfootingxxx #1{\oddfootingyyy #1\|\|\|\|\finish} -\def\oddfootingyyy #1\|#2\|#3\|#4\finish{% - \global\oddfootline = {\rlap{\centerline{#2}}\line{#1\hfil#3}}% - % - % Leave some space for the footline. Hopefully ok to assume - % @evenfooting will not be used by itself. - \global\advance\pageheight by -\baselineskip - \global\advance\vsize by -\baselineskip -} - -\parseargdef\everyfooting{\oddfootingxxx{#1}\evenfootingxxx{#1}} - - -% @headings double turns headings on for double-sided printing. -% @headings single turns headings on for single-sided printing. -% @headings off turns them off. -% @headings on same as @headings double, retained for compatibility. -% @headings after turns on double-sided headings after this page. -% @headings doubleafter turns on double-sided headings after this page. -% @headings singleafter turns on single-sided headings after this page. -% By default, they are off at the start of a document, -% and turned `on' after @end titlepage. - -\def\headings #1 {\csname HEADINGS#1\endcsname} - -\def\HEADINGSoff{% -\global\evenheadline={\hfil} \global\evenfootline={\hfil} -\global\oddheadline={\hfil} \global\oddfootline={\hfil}} -\HEADINGSoff -% When we turn headings on, set the page number to 1. -% For double-sided printing, put current file name in lower left corner, -% chapter name on inside top of right hand pages, document -% title on inside top of left hand pages, and page numbers on outside top -% edge of all pages. -\def\HEADINGSdouble{% -\global\pageno=1 -\global\evenfootline={\hfil} -\global\oddfootline={\hfil} -\global\evenheadline={\line{\folio\hfil\thistitle}} -\global\oddheadline={\line{\thischapter\hfil\folio}} -\global\let\contentsalignmacro = \chapoddpage -} -\let\contentsalignmacro = \chappager - -% For single-sided printing, chapter title goes across top left of page, -% page number on top right. -\def\HEADINGSsingle{% -\global\pageno=1 -\global\evenfootline={\hfil} -\global\oddfootline={\hfil} -\global\evenheadline={\line{\thischapter\hfil\folio}} -\global\oddheadline={\line{\thischapter\hfil\folio}} -\global\let\contentsalignmacro = \chappager -} -\def\HEADINGSon{\HEADINGSdouble} - -\def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdoublex} -\let\HEADINGSdoubleafter=\HEADINGSafter -\def\HEADINGSdoublex{% -\global\evenfootline={\hfil} -\global\oddfootline={\hfil} -\global\evenheadline={\line{\folio\hfil\thistitle}} -\global\oddheadline={\line{\thischapter\hfil\folio}} -\global\let\contentsalignmacro = \chapoddpage -} - -\def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex} -\def\HEADINGSsinglex{% -\global\evenfootline={\hfil} -\global\oddfootline={\hfil} -\global\evenheadline={\line{\thischapter\hfil\folio}} -\global\oddheadline={\line{\thischapter\hfil\folio}} -\global\let\contentsalignmacro = \chappager -} - -% Subroutines used in generating headings -% This produces Day Month Year style of output. -% Only define if not already defined, in case a txi-??.tex file has set -% up a different format (e.g., txi-cs.tex does this). -\ifx\today\undefined -\def\today{% - \number\day\space - \ifcase\month - \or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr - \or\putwordMMay\or\putwordMJun\or\putwordMJul\or\putwordMAug - \or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec - \fi - \space\number\year} -\fi - -% @settitle line... specifies the title of the document, for headings. -% It generates no output of its own. -\def\thistitle{\putwordNoTitle} -\def\settitle{\parsearg{\gdef\thistitle}} - - -\message{tables,} -% Tables -- @table, @ftable, @vtable, @item(x). - -% default indentation of table text -\newdimen\tableindent \tableindent=.8in -% default indentation of @itemize and @enumerate text -\newdimen\itemindent \itemindent=.3in -% margin between end of table item and start of table text. -\newdimen\itemmargin \itemmargin=.1in - -% used internally for \itemindent minus \itemmargin -\newdimen\itemmax - -% Note @table, @ftable, and @vtable define @item, @itemx, etc., with -% these defs. -% They also define \itemindex -% to index the item name in whatever manner is desired (perhaps none). - -\newif\ifitemxneedsnegativevskip - -\def\itemxpar{\par\ifitemxneedsnegativevskip\nobreak\vskip-\parskip\nobreak\fi} - -\def\internalBitem{\smallbreak \parsearg\itemzzz} -\def\internalBitemx{\itemxpar \parsearg\itemzzz} - -\def\itemzzz #1{\begingroup % - \advance\hsize by -\rightskip - \advance\hsize by -\tableindent - \setbox0=\hbox{\itemindicate{#1}}% - \itemindex{#1}% - \nobreak % This prevents a break before @itemx. - % - % If the item text does not fit in the space we have, put it on a line - % by itself, and do not allow a page break either before or after that - % line. We do not start a paragraph here because then if the next - % command is, e.g., @kindex, the whatsit would get put into the - % horizontal list on a line by itself, resulting in extra blank space. - \ifdim \wd0>\itemmax - % - % Make this a paragraph so we get the \parskip glue and wrapping, - % but leave it ragged-right. - \begingroup - \advance\leftskip by-\tableindent - \advance\hsize by\tableindent - \advance\rightskip by0pt plus1fil - \leavevmode\unhbox0\par - \endgroup - % - % We're going to be starting a paragraph, but we don't want the - % \parskip glue -- logically it's part of the @item we just started. - \nobreak \vskip-\parskip - % - % Stop a page break at the \parskip glue coming up. However, if - % what follows is an environment such as @example, there will be no - % \parskip glue; then the negative vskip we just inserted would - % cause the example and the item to crash together. So we use this - % bizarre value of 10001 as a signal to \aboveenvbreak to insert - % \parskip glue after all. Section titles are handled this way also. - % - \penalty 10001 - \endgroup - \itemxneedsnegativevskipfalse - \else - % The item text fits into the space. Start a paragraph, so that the - % following text (if any) will end up on the same line. - \noindent - % Do this with kerns and \unhbox so that if there is a footnote in - % the item text, it can migrate to the main vertical list and - % eventually be printed. - \nobreak\kern-\tableindent - \dimen0 = \itemmax \advance\dimen0 by \itemmargin \advance\dimen0 by -\wd0 - \unhbox0 - \nobreak\kern\dimen0 - \endgroup - \itemxneedsnegativevskiptrue - \fi -} - -\def\item{\errmessage{@item while not in a list environment}} -\def\itemx{\errmessage{@itemx while not in a list environment}} - -% @table, @ftable, @vtable. -\envdef\table{% - \let\itemindex\gobble - \tablecheck{table}% -} -\envdef\ftable{% - \def\itemindex ##1{\doind {fn}{\code{##1}}}% - \tablecheck{ftable}% -} -\envdef\vtable{% - \def\itemindex ##1{\doind {vr}{\code{##1}}}% - \tablecheck{vtable}% -} -\def\tablecheck#1{% - \ifnum \the\catcode`\^^M=\active - \endgroup - \errmessage{This command won't work in this context; perhaps the problem is - that we are \inenvironment\thisenv}% - \def\next{\doignore{#1}}% - \else - \let\next\tablex - \fi - \next -} -\def\tablex#1{% - \def\itemindicate{#1}% - \parsearg\tabley -} -\def\tabley#1{% - {% - \makevalueexpandable - \edef\temp{\noexpand\tablez #1\space\space\space}% - \expandafter - }\temp \endtablez -} -\def\tablez #1 #2 #3 #4\endtablez{% - \aboveenvbreak - \ifnum 0#1>0 \advance \leftskip by #1\mil \fi - \ifnum 0#2>0 \tableindent=#2\mil \fi - \ifnum 0#3>0 \advance \rightskip by #3\mil \fi - \itemmax=\tableindent - \advance \itemmax by -\itemmargin - \advance \leftskip by \tableindent - \exdentamount=\tableindent - \parindent = 0pt - \parskip = \smallskipamount - \ifdim \parskip=0pt \parskip=2pt \fi - \let\item = \internalBitem - \let\itemx = \internalBitemx -} -\def\Etable{\endgraf\afterenvbreak} -\let\Eftable\Etable -\let\Evtable\Etable -\let\Eitemize\Etable -\let\Eenumerate\Etable - -% This is the counter used by @enumerate, which is really @itemize - -\newcount \itemno - -\envdef\itemize{\parsearg\doitemize} - -\def\doitemize#1{% - \aboveenvbreak - \itemmax=\itemindent - \advance\itemmax by -\itemmargin - \advance\leftskip by \itemindent - \exdentamount=\itemindent - \parindent=0pt - \parskip=\smallskipamount - \ifdim\parskip=0pt \parskip=2pt \fi - \def\itemcontents{#1}% - % @itemize with no arg is equivalent to @itemize @bullet. - \ifx\itemcontents\empty\def\itemcontents{\bullet}\fi - \let\item=\itemizeitem -} - -% Definition of @item while inside @itemize and @enumerate. -% -\def\itemizeitem{% - \advance\itemno by 1 % for enumerations - {\let\par=\endgraf \smallbreak}% reasonable place to break - {% - % If the document has an @itemize directly after a section title, a - % \nobreak will be last on the list, and \sectionheading will have - % done a \vskip-\parskip. In that case, we don't want to zero - % parskip, or the item text will crash with the heading. On the - % other hand, when there is normal text preceding the item (as there - % usually is), we do want to zero parskip, or there would be too much - % space. In that case, we won't have a \nobreak before. At least - % that's the theory. - \ifnum\lastpenalty<10000 \parskip=0in \fi - \noindent - \hbox to 0pt{\hss \itemcontents \kern\itemmargin}% - \vadjust{\penalty 1200}}% not good to break after first line of item. - \flushcr -} - -% \splitoff TOKENS\endmark defines \first to be the first token in -% TOKENS, and \rest to be the remainder. -% -\def\splitoff#1#2\endmark{\def\first{#1}\def\rest{#2}}% - -% Allow an optional argument of an uppercase letter, lowercase letter, -% or number, to specify the first label in the enumerated list. No -% argument is the same as `1'. -% -\envparseargdef\enumerate{\enumeratey #1 \endenumeratey} -\def\enumeratey #1 #2\endenumeratey{% - % If we were given no argument, pretend we were given `1'. - \def\thearg{#1}% - \ifx\thearg\empty \def\thearg{1}\fi - % - % Detect if the argument is a single token. If so, it might be a - % letter. Otherwise, the only valid thing it can be is a number. - % (We will always have one token, because of the test we just made. - % This is a good thing, since \splitoff doesn't work given nothing at - % all -- the first parameter is undelimited.) - \expandafter\splitoff\thearg\endmark - \ifx\rest\empty - % Only one token in the argument. It could still be anything. - % A ``lowercase letter'' is one whose \lccode is nonzero. - % An ``uppercase letter'' is one whose \lccode is both nonzero, and - % not equal to itself. - % Otherwise, we assume it's a number. - % - % We need the \relax at the end of the \ifnum lines to stop TeX from - % continuing to look for a . - % - \ifnum\lccode\expandafter`\thearg=0\relax - \numericenumerate % a number (we hope) - \else - % It's a letter. - \ifnum\lccode\expandafter`\thearg=\expandafter`\thearg\relax - \lowercaseenumerate % lowercase letter - \else - \uppercaseenumerate % uppercase letter - \fi - \fi - \else - % Multiple tokens in the argument. We hope it's a number. - \numericenumerate - \fi -} - -% An @enumerate whose labels are integers. The starting integer is -% given in \thearg. -% -\def\numericenumerate{% - \itemno = \thearg - \startenumeration{\the\itemno}% -} - -% The starting (lowercase) letter is in \thearg. -\def\lowercaseenumerate{% - \itemno = \expandafter`\thearg - \startenumeration{% - % Be sure we're not beyond the end of the alphabet. - \ifnum\itemno=0 - \errmessage{No more lowercase letters in @enumerate; get a bigger - alphabet}% - \fi - \char\lccode\itemno - }% -} - -% The starting (uppercase) letter is in \thearg. -\def\uppercaseenumerate{% - \itemno = \expandafter`\thearg - \startenumeration{% - % Be sure we're not beyond the end of the alphabet. - \ifnum\itemno=0 - \errmessage{No more uppercase letters in @enumerate; get a bigger - alphabet} - \fi - \char\uccode\itemno - }% -} - -% Call \doitemize, adding a period to the first argument and supplying the -% common last two arguments. Also subtract one from the initial value in -% \itemno, since @item increments \itemno. -% -\def\startenumeration#1{% - \advance\itemno by -1 - \doitemize{#1.}\flushcr -} - -% @alphaenumerate and @capsenumerate are abbreviations for giving an arg -% to @enumerate. -% -\def\alphaenumerate{\enumerate{a}} -\def\capsenumerate{\enumerate{A}} -\def\Ealphaenumerate{\Eenumerate} -\def\Ecapsenumerate{\Eenumerate} - - -% @multitable macros -% Amy Hendrickson, 8/18/94, 3/6/96 -% -% @multitable ... @end multitable will make as many columns as desired. -% Contents of each column will wrap at width given in preamble. Width -% can be specified either with sample text given in a template line, -% or in percent of \hsize, the current width of text on page. - -% Table can continue over pages but will only break between lines. - -% To make preamble: -% -% Either define widths of columns in terms of percent of \hsize: -% @multitable @columnfractions .25 .3 .45 -% @item ... -% -% Numbers following @columnfractions are the percent of the total -% current hsize to be used for each column. You may use as many -% columns as desired. - - -% Or use a template: -% @multitable {Column 1 template} {Column 2 template} {Column 3 template} -% @item ... -% using the widest term desired in each column. - -% Each new table line starts with @item, each subsequent new column -% starts with @tab. Empty columns may be produced by supplying @tab's -% with nothing between them for as many times as empty columns are needed, -% ie, @tab@tab@tab will produce two empty columns. - -% @item, @tab do not need to be on their own lines, but it will not hurt -% if they are. - -% Sample multitable: - -% @multitable {Column 1 template} {Column 2 template} {Column 3 template} -% @item first col stuff @tab second col stuff @tab third col -% @item -% first col stuff -% @tab -% second col stuff -% @tab -% third col -% @item first col stuff @tab second col stuff -% @tab Many paragraphs of text may be used in any column. -% -% They will wrap at the width determined by the template. -% @item@tab@tab This will be in third column. -% @end multitable - -% Default dimensions may be reset by user. -% @multitableparskip is vertical space between paragraphs in table. -% @multitableparindent is paragraph indent in table. -% @multitablecolmargin is horizontal space to be left between columns. -% @multitablelinespace is space to leave between table items, baseline -% to baseline. -% 0pt means it depends on current normal line spacing. -% -\newskip\multitableparskip -\newskip\multitableparindent -\newdimen\multitablecolspace -\newskip\multitablelinespace -\multitableparskip=0pt -\multitableparindent=6pt -\multitablecolspace=12pt -\multitablelinespace=0pt - -% Macros used to set up halign preamble: -% -\let\endsetuptable\relax -\def\xendsetuptable{\endsetuptable} -\let\columnfractions\relax -\def\xcolumnfractions{\columnfractions} -\newif\ifsetpercent - -% #1 is the @columnfraction, usually a decimal number like .5, but might -% be just 1. We just use it, whatever it is. -% -\def\pickupwholefraction#1 {% - \global\advance\colcount by 1 - \expandafter\xdef\csname col\the\colcount\endcsname{#1\hsize}% - \setuptable -} - -\newcount\colcount -\def\setuptable#1{% - \def\firstarg{#1}% - \ifx\firstarg\xendsetuptable - \let\go = \relax - \else - \ifx\firstarg\xcolumnfractions - \global\setpercenttrue - \else - \ifsetpercent - \let\go\pickupwholefraction - \else - \global\advance\colcount by 1 - \setbox0=\hbox{#1\unskip\space}% Add a normal word space as a - % separator; typically that is always in the input, anyway. - \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}% - \fi - \fi - \ifx\go\pickupwholefraction - % Put the argument back for the \pickupwholefraction call, so - % we'll always have a period there to be parsed. - \def\go{\pickupwholefraction#1}% - \else - \let\go = \setuptable - \fi% - \fi - \go -} - -% multitable-only commands. -% -% @headitem starts a heading row, which we typeset in bold. -% Assignments have to be global since we are inside the implicit group -% of an alignment entry. Note that \everycr resets \everytab. -\def\headitem{\checkenv\multitable \crcr \global\everytab={\bf}\the\everytab}% -% -% A \tab used to include \hskip1sp. But then the space in a template -% line is not enough. That is bad. So let's go back to just `&' until -% we encounter the problem it was intended to solve again. -% --karl, nathan@acm.org, 20apr99. -\def\tab{\checkenv\multitable &\the\everytab}% - -% @multitable ... @end multitable definitions: -% -\newtoks\everytab % insert after every tab. -% -\envdef\multitable{% - \vskip\parskip - \startsavinginserts - % - % @item within a multitable starts a normal row. - % We use \def instead of \let so that if one of the multitable entries - % contains an @itemize, we don't choke on the \item (seen as \crcr aka - % \endtemplate) expanding \doitemize. - \def\item{\crcr}% - % - \tolerance=9500 - \hbadness=9500 - \setmultitablespacing - \parskip=\multitableparskip - \parindent=\multitableparindent - \overfullrule=0pt - \global\colcount=0 - % - \everycr = {% - \noalign{% - \global\everytab={}% - \global\colcount=0 % Reset the column counter. - % Check for saved footnotes, etc. - \checkinserts - % Keeps underfull box messages off when table breaks over pages. - %\filbreak - % Maybe so, but it also creates really weird page breaks when the - % table breaks over pages. Wouldn't \vfil be better? Wait until the - % problem manifests itself, so it can be fixed for real --karl. - }% - }% - % - \parsearg\domultitable -} -\def\domultitable#1{% - % To parse everything between @multitable and @item: - \setuptable#1 \endsetuptable - % - % This preamble sets up a generic column definition, which will - % be used as many times as user calls for columns. - % \vtop will set a single line and will also let text wrap and - % continue for many paragraphs if desired. - \halign\bgroup &% - \global\advance\colcount by 1 - \multistrut - \vtop{% - % Use the current \colcount to find the correct column width: - \hsize=\expandafter\csname col\the\colcount\endcsname - % - % In order to keep entries from bumping into each other - % we will add a \leftskip of \multitablecolspace to all columns after - % the first one. - % - % If a template has been used, we will add \multitablecolspace - % to the width of each template entry. - % - % If the user has set preamble in terms of percent of \hsize we will - % use that dimension as the width of the column, and the \leftskip - % will keep entries from bumping into each other. Table will start at - % left margin and final column will justify at right margin. - % - % Make sure we don't inherit \rightskip from the outer environment. - \rightskip=0pt - \ifnum\colcount=1 - % The first column will be indented with the surrounding text. - \advance\hsize by\leftskip - \else - \ifsetpercent \else - % If user has not set preamble in terms of percent of \hsize - % we will advance \hsize by \multitablecolspace. - \advance\hsize by \multitablecolspace - \fi - % In either case we will make \leftskip=\multitablecolspace: - \leftskip=\multitablecolspace - \fi - % Ignoring space at the beginning and end avoids an occasional spurious - % blank line, when TeX decides to break the line at the space before the - % box from the multistrut, so the strut ends up on a line by itself. - % For example: - % @multitable @columnfractions .11 .89 - % @item @code{#} - % @tab Legal holiday which is valid in major parts of the whole country. - % Is automatically provided with highlighting sequences respectively - % marking characters. - \noindent\ignorespaces##\unskip\multistrut - }\cr -} -\def\Emultitable{% - \crcr - \egroup % end the \halign - \global\setpercentfalse -} - -\def\setmultitablespacing{% - \def\multistrut{\strut}% just use the standard line spacing - % - % Compute \multitablelinespace (if not defined by user) for use in - % \multitableparskip calculation. We used define \multistrut based on - % this, but (ironically) that caused the spacing to be off. - % See bug-texinfo report from Werner Lemberg, 31 Oct 2004 12:52:20 +0100. -\ifdim\multitablelinespace=0pt -\setbox0=\vbox{X}\global\multitablelinespace=\the\baselineskip -\global\advance\multitablelinespace by-\ht0 -\fi -%% Test to see if parskip is larger than space between lines of -%% table. If not, do nothing. -%% If so, set to same dimension as multitablelinespace. -\ifdim\multitableparskip>\multitablelinespace -\global\multitableparskip=\multitablelinespace -\global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller - %% than skip between lines in the table. -\fi% -\ifdim\multitableparskip=0pt -\global\multitableparskip=\multitablelinespace -\global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller - %% than skip between lines in the table. -\fi} - - -\message{conditionals,} - -% @iftex, @ifnotdocbook, @ifnothtml, @ifnotinfo, @ifnotplaintext, -% @ifnotxml always succeed. They currently do nothing; we don't -% attempt to check whether the conditionals are properly nested. But we -% have to remember that they are conditionals, so that @end doesn't -% attempt to close an environment group. -% -\def\makecond#1{% - \expandafter\let\csname #1\endcsname = \relax - \expandafter\let\csname iscond.#1\endcsname = 1 -} -\makecond{iftex} -\makecond{ifnotdocbook} -\makecond{ifnothtml} -\makecond{ifnotinfo} -\makecond{ifnotplaintext} -\makecond{ifnotxml} - -% Ignore @ignore, @ifhtml, @ifinfo, and the like. -% -\def\direntry{\doignore{direntry}} -\def\documentdescription{\doignore{documentdescription}} -\def\docbook{\doignore{docbook}} -\def\html{\doignore{html}} -\def\ifdocbook{\doignore{ifdocbook}} -\def\ifhtml{\doignore{ifhtml}} -\def\ifinfo{\doignore{ifinfo}} -\def\ifnottex{\doignore{ifnottex}} -\def\ifplaintext{\doignore{ifplaintext}} -\def\ifxml{\doignore{ifxml}} -\def\ignore{\doignore{ignore}} -\def\menu{\doignore{menu}} -\def\xml{\doignore{xml}} - -% Ignore text until a line `@end #1', keeping track of nested conditionals. -% -% A count to remember the depth of nesting. -\newcount\doignorecount - -\def\doignore#1{\begingroup - % Scan in ``verbatim'' mode: - \catcode`\@ = \other - \catcode`\{ = \other - \catcode`\} = \other - % - % Make sure that spaces turn into tokens that match what \doignoretext wants. - \spaceisspace - % - % Count number of #1's that we've seen. - \doignorecount = 0 - % - % Swallow text until we reach the matching `@end #1'. - \dodoignore{#1}% -} - -{ \catcode`_=11 % We want to use \_STOP_ which cannot appear in texinfo source. - \obeylines % - % - \gdef\dodoignore#1{% - % #1 contains the command name as a string, e.g., `ifinfo'. - % - % Define a command to find the next `@end #1', which must be on a line - % by itself. - \long\def\doignoretext##1^^M@end #1{\doignoretextyyy##1^^M@#1\_STOP_}% - % And this command to find another #1 command, at the beginning of a - % line. (Otherwise, we would consider a line `@c @ifset', for - % example, to count as an @ifset for nesting.) - \long\def\doignoretextyyy##1^^M@#1##2\_STOP_{\doignoreyyy{##2}\_STOP_}% - % - % And now expand that command. - \obeylines % - \doignoretext ^^M% - }% -} - -\def\doignoreyyy#1{% - \def\temp{#1}% - \ifx\temp\empty % Nothing found. - \let\next\doignoretextzzz - \else % Found a nested condition, ... - \advance\doignorecount by 1 - \let\next\doignoretextyyy % ..., look for another. - % If we're here, #1 ends with ^^M\ifinfo (for example). - \fi - \next #1% the token \_STOP_ is present just after this macro. -} - -% We have to swallow the remaining "\_STOP_". -% -\def\doignoretextzzz#1{% - \ifnum\doignorecount = 0 % We have just found the outermost @end. - \let\next\enddoignore - \else % Still inside a nested condition. - \advance\doignorecount by -1 - \let\next\doignoretext % Look for the next @end. - \fi - \next -} - -% Finish off ignored text. -\def\enddoignore{\endgroup\ignorespaces} - - -% @set VAR sets the variable VAR to an empty value. -% @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE. -% -% Since we want to separate VAR from REST-OF-LINE (which might be -% empty), we can't just use \parsearg; we have to insert a space of our -% own to delimit the rest of the line, and then take it out again if we -% didn't need it. -% We rely on the fact that \parsearg sets \catcode`\ =10. -% -\parseargdef\set{\setyyy#1 \endsetyyy} -\def\setyyy#1 #2\endsetyyy{% - {% - \makevalueexpandable - \def\temp{#2}% - \edef\next{\gdef\makecsname{SET#1}}% - \ifx\temp\empty - \next{}% - \else - \setzzz#2\endsetzzz - \fi - }% -} -% Remove the trailing space \setxxx inserted. -\def\setzzz#1 \endsetzzz{\next{#1}} - -% @clear VAR clears (i.e., unsets) the variable VAR. -% -\parseargdef\clear{% - {% - \makevalueexpandable - \global\expandafter\let\csname SET#1\endcsname=\relax - }% -} - -% @value{foo} gets the text saved in variable foo. -\def\value{\begingroup\makevalueexpandable\valuexxx} -\def\valuexxx#1{\expandablevalue{#1}\endgroup} -{ - \catcode`\- = \active \catcode`\_ = \active - % - \gdef\makevalueexpandable{% - \let\value = \expandablevalue - % We don't want these characters active, ... - \catcode`\-=\other \catcode`\_=\other - % ..., but we might end up with active ones in the argument if - % we're called from @code, as @code{@value{foo-bar_}}, though. - % So \let them to their normal equivalents. - \let-\realdash \let_\normalunderscore - } -} - -% We have this subroutine so that we can handle at least some @value's -% properly in indexes (we call \makevalueexpandable in \indexdummies). -% The command has to be fully expandable (if the variable is set), since -% the result winds up in the index file. This means that if the -% variable's value contains other Texinfo commands, it's almost certain -% it will fail (although perhaps we could fix that with sufficient work -% to do a one-level expansion on the result, instead of complete). -% -\def\expandablevalue#1{% - \expandafter\ifx\csname SET#1\endcsname\relax - {[No value for ``#1'']}% - \message{Variable `#1', used in @value, is not set.}% - \else - \csname SET#1\endcsname - \fi -} - -% @ifset VAR ... @end ifset reads the `...' iff VAR has been defined -% with @set. -% -% To get special treatment of `@end ifset,' call \makeond and the redefine. -% -\makecond{ifset} -\def\ifset{\parsearg{\doifset{\let\next=\ifsetfail}}} -\def\doifset#1#2{% - {% - \makevalueexpandable - \let\next=\empty - \expandafter\ifx\csname SET#2\endcsname\relax - #1% If not set, redefine \next. - \fi - \expandafter - }\next -} -\def\ifsetfail{\doignore{ifset}} - -% @ifclear VAR ... @end ifclear reads the `...' iff VAR has never been -% defined with @set, or has been undefined with @clear. -% -% The `\else' inside the `\doifset' parameter is a trick to reuse the -% above code: if the variable is not set, do nothing, if it is set, -% then redefine \next to \ifclearfail. -% -\makecond{ifclear} -\def\ifclear{\parsearg{\doifset{\else \let\next=\ifclearfail}}} -\def\ifclearfail{\doignore{ifclear}} - -% @dircategory CATEGORY -- specify a category of the dir file -% which this file should belong to. Ignore this in TeX. -\let\dircategory=\comment - -% @defininfoenclose. -\let\definfoenclose=\comment - - -\message{indexing,} -% Index generation facilities - -% Define \newwrite to be identical to plain tex's \newwrite -% except not \outer, so it can be used within macros and \if's. -\edef\newwrite{\makecsname{ptexnewwrite}} - -% \newindex {foo} defines an index named foo. -% It automatically defines \fooindex such that -% \fooindex ...rest of line... puts an entry in the index foo. -% It also defines \fooindfile to be the number of the output channel for -% the file that accumulates this index. The file's extension is foo. -% The name of an index should be no more than 2 characters long -% for the sake of vms. -% -\def\newindex#1{% - \iflinks - \expandafter\newwrite \csname#1indfile\endcsname - \openout \csname#1indfile\endcsname \jobname.#1 % Open the file - \fi - \expandafter\xdef\csname#1index\endcsname{% % Define @#1index - \noexpand\doindex{#1}} -} - -% @defindex foo == \newindex{foo} -% -\def\defindex{\parsearg\newindex} - -% Define @defcodeindex, like @defindex except put all entries in @code. -% -\def\defcodeindex{\parsearg\newcodeindex} -% -\def\newcodeindex#1{% - \iflinks - \expandafter\newwrite \csname#1indfile\endcsname - \openout \csname#1indfile\endcsname \jobname.#1 - \fi - \expandafter\xdef\csname#1index\endcsname{% - \noexpand\docodeindex{#1}}% -} - - -% @synindex foo bar makes index foo feed into index bar. -% Do this instead of @defindex foo if you don't want it as a separate index. -% -% @syncodeindex foo bar similar, but put all entries made for index foo -% inside @code. -% -\def\synindex#1 #2 {\dosynindex\doindex{#1}{#2}} -\def\syncodeindex#1 #2 {\dosynindex\docodeindex{#1}{#2}} - -% #1 is \doindex or \docodeindex, #2 the index getting redefined (foo), -% #3 the target index (bar). -\def\dosynindex#1#2#3{% - % Only do \closeout if we haven't already done it, else we'll end up - % closing the target index. - \expandafter \ifx\csname donesynindex#2\endcsname \undefined - % The \closeout helps reduce unnecessary open files; the limit on the - % Acorn RISC OS is a mere 16 files. - \expandafter\closeout\csname#2indfile\endcsname - \expandafter\let\csname\donesynindex#2\endcsname = 1 - \fi - % redefine \fooindfile: - \expandafter\let\expandafter\temp\expandafter=\csname#3indfile\endcsname - \expandafter\let\csname#2indfile\endcsname=\temp - % redefine \fooindex: - \expandafter\xdef\csname#2index\endcsname{\noexpand#1{#3}}% -} - -% Define \doindex, the driver for all \fooindex macros. -% Argument #1 is generated by the calling \fooindex macro, -% and it is "foo", the name of the index. - -% \doindex just uses \parsearg; it calls \doind for the actual work. -% This is because \doind is more useful to call from other macros. - -% There is also \dosubind {index}{topic}{subtopic} -% which makes an entry in a two-level index such as the operation index. - -\def\doindex#1{\edef\indexname{#1}\parsearg\singleindexer} -\def\singleindexer #1{\doind{\indexname}{#1}} - -% like the previous two, but they put @code around the argument. -\def\docodeindex#1{\edef\indexname{#1}\parsearg\singlecodeindexer} -\def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}} - -% Take care of Texinfo commands that can appear in an index entry. -% Since there are some commands we want to expand, and others we don't, -% we have to laboriously prevent expansion for those that we don't. -% -\def\indexdummies{% - \def\@{@}% change to @@ when we switch to @ as escape char in index files. - \def\ {\realbackslash\space }% - % Need these in case \tex is in effect and \{ is a \delimiter again. - % But can't use \lbracecmd and \rbracecmd because texindex assumes - % braces and backslashes are used only as delimiters. - \let\{ = \mylbrace - \let\} = \myrbrace - % - % \definedummyword defines \#1 as \realbackslash #1\space, thus - % effectively preventing its expansion. This is used only for control - % words, not control letters, because the \space would be incorrect - % for control characters, but is needed to separate the control word - % from whatever follows. - % - % For control letters, we have \definedummyletter, which omits the - % space. - % - % These can be used both for control words that take an argument and - % those that do not. If it is followed by {arg} in the input, then - % that will dutifully get written to the index (or wherever). - % - \def\definedummyword##1{% - \expandafter\def\csname ##1\endcsname{\realbackslash ##1\space}% - }% - \def\definedummyletter##1{% - \expandafter\def\csname ##1\endcsname{\realbackslash ##1}% - }% - \let\definedummyaccent\definedummyletter - % - % Do the redefinitions. - \commondummies -} - -% For the aux file, @ is the escape character. So we want to redefine -% everything using @ instead of \realbackslash. When everything uses -% @, this will be simpler. -% -\def\atdummies{% - \def\@{@@}% - \def\ {@ }% - \let\{ = \lbraceatcmd - \let\} = \rbraceatcmd - % - % (See comments in \indexdummies.) - \def\definedummyword##1{% - \expandafter\def\csname ##1\endcsname{@##1\space}% - }% - \def\definedummyletter##1{% - \expandafter\def\csname ##1\endcsname{@##1}% - }% - \let\definedummyaccent\definedummyletter - % - % Do the redefinitions. - \commondummies -} - -% Called from \indexdummies and \atdummies. \definedummyword and -% \definedummyletter must be defined first. -% -\def\commondummies{% - % - \normalturnoffactive - % - \commondummiesnofonts - % - \definedummyletter{_}% - % - % Non-English letters. - \definedummyword{AA}% - \definedummyword{AE}% - \definedummyword{L}% - \definedummyword{OE}% - \definedummyword{O}% - \definedummyword{aa}% - \definedummyword{ae}% - \definedummyword{l}% - \definedummyword{oe}% - \definedummyword{o}% - \definedummyword{ss}% - \definedummyword{exclamdown}% - \definedummyword{questiondown}% - \definedummyword{ordf}% - \definedummyword{ordm}% - % - % Although these internal commands shouldn't show up, sometimes they do. - \definedummyword{bf}% - \definedummyword{gtr}% - \definedummyword{hat}% - \definedummyword{less}% - \definedummyword{sf}% - \definedummyword{sl}% - \definedummyword{tclose}% - \definedummyword{tt}% - % - \definedummyword{LaTeX}% - \definedummyword{TeX}% - % - % Assorted special characters. - \definedummyword{bullet}% - \definedummyword{comma}% - \definedummyword{copyright}% - \definedummyword{registeredsymbol}% - \definedummyword{dots}% - \definedummyword{enddots}% - \definedummyword{equiv}% - \definedummyword{error}% - \definedummyword{euro}% - \definedummyword{expansion}% - \definedummyword{minus}% - \definedummyword{pounds}% - \definedummyword{point}% - \definedummyword{print}% - \definedummyword{result}% - % - % Handle some cases of @value -- where it does not contain any - % (non-fully-expandable) commands. - \makevalueexpandable - % - % Normal spaces, not active ones. - \unsepspaces - % - % No macro expansion. - \turnoffmacros -} - -% \commondummiesnofonts: common to \commondummies and \indexnofonts. -% -% Better have this without active chars. -{ - \catcode`\~=\other - \gdef\commondummiesnofonts{% - % Control letters and accents. - \definedummyletter{!}% - \definedummyaccent{"}% - \definedummyaccent{'}% - \definedummyletter{*}% - \definedummyaccent{,}% - \definedummyletter{.}% - \definedummyletter{/}% - \definedummyletter{:}% - \definedummyaccent{=}% - \definedummyletter{?}% - \definedummyaccent{^}% - \definedummyaccent{`}% - \definedummyaccent{~}% - \definedummyword{u}% - \definedummyword{v}% - \definedummyword{H}% - \definedummyword{dotaccent}% - \definedummyword{ringaccent}% - \definedummyword{tieaccent}% - \definedummyword{ubaraccent}% - \definedummyword{udotaccent}% - \definedummyword{dotless}% - % - % Texinfo font commands. - \definedummyword{b}% - \definedummyword{i}% - \definedummyword{r}% - \definedummyword{sc}% - \definedummyword{t}% - % - % Commands that take arguments. - \definedummyword{acronym}% - \definedummyword{cite}% - \definedummyword{code}% - \definedummyword{command}% - \definedummyword{dfn}% - \definedummyword{emph}% - \definedummyword{env}% - \definedummyword{file}% - \definedummyword{kbd}% - \definedummyword{key}% - \definedummyword{math}% - \definedummyword{option}% - \definedummyword{samp}% - \definedummyword{strong}% - \definedummyword{tie}% - \definedummyword{uref}% - \definedummyword{url}% - \definedummyword{var}% - \definedummyword{verb}% - \definedummyword{w}% - } -} - -% \indexnofonts is used when outputting the strings to sort the index -% by, and when constructing control sequence names. It eliminates all -% control sequences and just writes whatever the best ASCII sort string -% would be for a given command (usually its argument). -% -\def\indexnofonts{% - % Accent commands should become @asis. - \def\definedummyaccent##1{% - \expandafter\let\csname ##1\endcsname\asis - }% - % We can just ignore other control letters. - \def\definedummyletter##1{% - \expandafter\def\csname ##1\endcsname{}% - }% - % Hopefully, all control words can become @asis. - \let\definedummyword\definedummyaccent - % - \commondummiesnofonts - % - % Don't no-op \tt, since it isn't a user-level command - % and is used in the definitions of the active chars like <, >, |, etc. - % Likewise with the other plain tex font commands. - %\let\tt=\asis - % - \def\ { }% - \def\@{@}% - % how to handle braces? - \def\_{\normalunderscore}% - % - % Non-English letters. - \def\AA{AA}% - \def\AE{AE}% - \def\L{L}% - \def\OE{OE}% - \def\O{O}% - \def\aa{aa}% - \def\ae{ae}% - \def\l{l}% - \def\oe{oe}% - \def\o{o}% - \def\ss{ss}% - \def\exclamdown{!}% - \def\questiondown{?}% - \def\ordf{a}% - \def\ordm{o}% - % - \def\LaTeX{LaTeX}% - \def\TeX{TeX}% - % - % Assorted special characters. - % (The following {} will end up in the sort string, but that's ok.) - \def\bullet{bullet}% - \def\comma{,}% - \def\copyright{copyright}% - \def\registeredsymbol{R}% - \def\dots{...}% - \def\enddots{...}% - \def\equiv{==}% - \def\error{error}% - \def\euro{euro}% - \def\expansion{==>}% - \def\minus{-}% - \def\pounds{pounds}% - \def\point{.}% - \def\print{-|}% - \def\result{=>}% - % - % Don't write macro names. - \emptyusermacros -} - -\let\indexbackslash=0 %overridden during \printindex. -\let\SETmarginindex=\relax % put index entries in margin (undocumented)? - -% Most index entries go through here, but \dosubind is the general case. -% #1 is the index name, #2 is the entry text. -\def\doind#1#2{\dosubind{#1}{#2}{}} - -% Workhorse for all \fooindexes. -% #1 is name of index, #2 is stuff to put there, #3 is subentry -- -% empty if called from \doind, as we usually are (the main exception -% is with most defuns, which call us directly). -% -\def\dosubind#1#2#3{% - \iflinks - {% - % Store the main index entry text (including the third arg). - \toks0 = {#2}% - % If third arg is present, precede it with a space. - \def\thirdarg{#3}% - \ifx\thirdarg\empty \else - \toks0 = \expandafter{\the\toks0 \space #3}% - \fi - % - \edef\writeto{\csname#1indfile\endcsname}% - % - \ifvmode - \dosubindsanitize - \else - \dosubindwrite - \fi - }% - \fi -} - -% Write the entry in \toks0 to the index file: -% -\def\dosubindwrite{% - % Put the index entry in the margin if desired. - \ifx\SETmarginindex\relax\else - \insert\margin{\hbox{\vrule height8pt depth3pt width0pt \the\toks0}}% - \fi - % - % Remember, we are within a group. - \indexdummies % Must do this here, since \bf, etc expand at this stage - \escapechar=`\\ - \def\backslashcurfont{\indexbackslash}% \indexbackslash isn't defined now - % so it will be output as is; and it will print as backslash. - % - % Process the index entry with all font commands turned off, to - % get the string to sort by. - {\indexnofonts - \edef\temp{\the\toks0}% need full expansion - \xdef\indexsorttmp{\temp}% - }% - % - % Set up the complete index entry, with both the sort key and - % the original text, including any font commands. We write - % three arguments to \entry to the .?? file (four in the - % subentry case), texindex reduces to two when writing the .??s - % sorted result. - \edef\temp{% - \write\writeto{% - \string\entry{\indexsorttmp}{\noexpand\folio}{\the\toks0}}% - }% - \temp -} - -% Take care of unwanted page breaks: -% -% If a skip is the last thing on the list now, preserve it -% by backing up by \lastskip, doing the \write, then inserting -% the skip again. Otherwise, the whatsit generated by the -% \write will make \lastskip zero. The result is that sequences -% like this: -% @end defun -% @tindex whatever -% @defun ... -% will have extra space inserted, because the \medbreak in the -% start of the @defun won't see the skip inserted by the @end of -% the previous defun. -% -% But don't do any of this if we're not in vertical mode. We -% don't want to do a \vskip and prematurely end a paragraph. -% -% Avoid page breaks due to these extra skips, too. -% -% But wait, there is a catch there: -% We'll have to check whether \lastskip is zero skip. \ifdim is not -% sufficient for this purpose, as it ignores stretch and shrink parts -% of the skip. The only way seems to be to check the textual -% representation of the skip. -% -% The following is almost like \def\zeroskipmacro{0.0pt} except that -% the ``p'' and ``t'' characters have catcode \other, not 11 (letter). -% -\edef\zeroskipmacro{\expandafter\the\csname z@skip\endcsname} -% -% ..., ready, GO: -% -\def\dosubindsanitize{% - % \lastskip and \lastpenalty cannot both be nonzero simultaneously. - \skip0 = \lastskip - \edef\lastskipmacro{\the\lastskip}% - \count255 = \lastpenalty - % - % If \lastskip is nonzero, that means the last item was a - % skip. And since a skip is discardable, that means this - % -\skip0 glue we're inserting is preceded by a - % non-discardable item, therefore it is not a potential - % breakpoint, therefore no \nobreak needed. - \ifx\lastskipmacro\zeroskipmacro - \else - \vskip-\skip0 - \fi - % - \dosubindwrite - % - \ifx\lastskipmacro\zeroskipmacro - % If \lastskip was zero, perhaps the last item was a penalty, and - % perhaps it was >=10000, e.g., a \nobreak. In that case, we want - % to re-insert the same penalty (values >10000 are used for various - % signals); since we just inserted a non-discardable item, any - % following glue (such as a \parskip) would be a breakpoint. For example: - % - % @deffn deffn-whatever - % @vindex index-whatever - % Description. - % would allow a break between the index-whatever whatsit - % and the "Description." paragraph. - \ifnum\count255>9999 \penalty\count255 \fi - \else - % On the other hand, if we had a nonzero \lastskip, - % this make-up glue would be preceded by a non-discardable item - % (the whatsit from the \write), so we must insert a \nobreak. - \nobreak\vskip\skip0 - \fi -} - -% The index entry written in the file actually looks like -% \entry {sortstring}{page}{topic} -% or -% \entry {sortstring}{page}{topic}{subtopic} -% The texindex program reads in these files and writes files -% containing these kinds of lines: -% \initial {c} -% before the first topic whose initial is c -% \entry {topic}{pagelist} -% for a topic that is used without subtopics -% \primary {topic} -% for the beginning of a topic that is used with subtopics -% \secondary {subtopic}{pagelist} -% for each subtopic. - -% Define the user-accessible indexing commands -% @findex, @vindex, @kindex, @cindex. - -\def\findex {\fnindex} -\def\kindex {\kyindex} -\def\cindex {\cpindex} -\def\vindex {\vrindex} -\def\tindex {\tpindex} -\def\pindex {\pgindex} - -\def\cindexsub {\begingroup\obeylines\cindexsub} -{\obeylines % -\gdef\cindexsub "#1" #2^^M{\endgroup % -\dosubind{cp}{#2}{#1}}} - -% Define the macros used in formatting output of the sorted index material. - -% @printindex causes a particular index (the ??s file) to get printed. -% It does not print any chapter heading (usually an @unnumbered). -% -\parseargdef\printindex{\begingroup - \dobreak \chapheadingskip{10000}% - % - \smallfonts \rm - \tolerance = 9500 - \everypar = {}% don't want the \kern\-parindent from indentation suppression. - % - % See if the index file exists and is nonempty. - % Change catcode of @ here so that if the index file contains - % \initial {@} - % as its first line, TeX doesn't complain about mismatched braces - % (because it thinks @} is a control sequence). - \catcode`\@ = 11 - \openin 1 \jobname.#1s - \ifeof 1 - % \enddoublecolumns gets confused if there is no text in the index, - % and it loses the chapter title and the aux file entries for the - % index. The easiest way to prevent this problem is to make sure - % there is some text. - \putwordIndexNonexistent - \else - % - % If the index file exists but is empty, then \openin leaves \ifeof - % false. We have to make TeX try to read something from the file, so - % it can discover if there is anything in it. - \read 1 to \temp - \ifeof 1 - \putwordIndexIsEmpty - \else - % Index files are almost Texinfo source, but we use \ as the escape - % character. It would be better to use @, but that's too big a change - % to make right now. - \def\indexbackslash{\backslashcurfont}% - \catcode`\\ = 0 - \escapechar = `\\ - \begindoublecolumns - \input \jobname.#1s - \enddoublecolumns - \fi - \fi - \closein 1 -\endgroup} - -% These macros are used by the sorted index file itself. -% Change them to control the appearance of the index. - -\def\initial#1{{% - % Some minor font changes for the special characters. - \let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt - % - % Remove any glue we may have, we'll be inserting our own. - \removelastskip - % - % We like breaks before the index initials, so insert a bonus. - \nobreak - \vskip 0pt plus 3\baselineskip - \penalty 0 - \vskip 0pt plus -3\baselineskip - % - % Typeset the initial. Making this add up to a whole number of - % baselineskips increases the chance of the dots lining up from column - % to column. It still won't often be perfect, because of the stretch - % we need before each entry, but it's better. - % - % No shrink because it confuses \balancecolumns. - \vskip 1.67\baselineskip plus .5\baselineskip - \leftline{\secbf #1}% - % Do our best not to break after the initial. - \nobreak - \vskip .33\baselineskip plus .1\baselineskip -}} - -% \entry typesets a paragraph consisting of the text (#1), dot leaders, and -% then page number (#2) flushed to the right margin. It is used for index -% and table of contents entries. The paragraph is indented by \leftskip. -% -% A straightforward implementation would start like this: -% \def\entry#1#2{... -% But this frozes the catcodes in the argument, and can cause problems to -% @code, which sets - active. This problem was fixed by a kludge--- -% ``-'' was active throughout whole index, but this isn't really right. -% -% The right solution is to prevent \entry from swallowing the whole text. -% --kasal, 21nov03 -\def\entry{% - \begingroup - % - % Start a new paragraph if necessary, so our assignments below can't - % affect previous text. - \par - % - % Do not fill out the last line with white space. - \parfillskip = 0in - % - % No extra space above this paragraph. - \parskip = 0in - % - % Do not prefer a separate line ending with a hyphen to fewer lines. - \finalhyphendemerits = 0 - % - % \hangindent is only relevant when the entry text and page number - % don't both fit on one line. In that case, bob suggests starting the - % dots pretty far over on the line. Unfortunately, a large - % indentation looks wrong when the entry text itself is broken across - % lines. So we use a small indentation and put up with long leaders. - % - % \hangafter is reset to 1 (which is the value we want) at the start - % of each paragraph, so we need not do anything with that. - \hangindent = 2em - % - % When the entry text needs to be broken, just fill out the first line - % with blank space. - \rightskip = 0pt plus1fil - % - % A bit of stretch before each entry for the benefit of balancing - % columns. - \vskip 0pt plus1pt - % - % Swallow the left brace of the text (first parameter): - \afterassignment\doentry - \let\temp = -} -\def\doentry{% - \bgroup % Instead of the swallowed brace. - \noindent - \aftergroup\finishentry - % And now comes the text of the entry. -} -\def\finishentry#1{% - % #1 is the page number. - % - % The following is kludged to not output a line of dots in the index if - % there are no page numbers. The next person who breaks this will be - % cursed by a Unix daemon. - \def\tempa{{\rm }}% - \def\tempb{#1}% - \edef\tempc{\tempa}% - \edef\tempd{\tempb}% - \ifx\tempc\tempd - \ % - \else - % - % If we must, put the page number on a line of its own, and fill out - % this line with blank space. (The \hfil is overwhelmed with the - % fill leaders glue in \indexdotfill if the page number does fit.) - \hfil\penalty50 - \null\nobreak\indexdotfill % Have leaders before the page number. - % - % The `\ ' here is removed by the implicit \unskip that TeX does as - % part of (the primitive) \par. Without it, a spurious underfull - % \hbox ensues. - \ifpdf - \pdfgettoks#1.% - \ \the\toksA - \else - \ #1% - \fi - \fi - \par - \endgroup -} - -% Like \dotfill except takes at least 1 em. -\def\indexdotfill{\cleaders - \hbox{$\mathsurround=0pt \mkern1.5mu ${\it .}$ \mkern1.5mu$}\hskip 1em plus 1fill} - -\def\primary #1{\line{#1\hfil}} - -\newskip\secondaryindent \secondaryindent=0.5cm -\def\secondary#1#2{{% - \parfillskip=0in - \parskip=0in - \hangindent=1in - \hangafter=1 - \noindent\hskip\secondaryindent\hbox{#1}\indexdotfill - \ifpdf - \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph. - \else - #2 - \fi - \par -}} - -% Define two-column mode, which we use to typeset indexes. -% Adapted from the TeXbook, page 416, which is to say, -% the manmac.tex format used to print the TeXbook itself. -\catcode`\@=11 - -\newbox\partialpage -\newdimen\doublecolumnhsize - -\def\begindoublecolumns{\begingroup % ended by \enddoublecolumns - % Grab any single-column material above us. - \output = {% - % - % Here is a possibility not foreseen in manmac: if we accumulate a - % whole lot of material, we might end up calling this \output - % routine twice in a row (see the doublecol-lose test, which is - % essentially a couple of indexes with @setchapternewpage off). In - % that case we just ship out what is in \partialpage with the normal - % output routine. Generally, \partialpage will be empty when this - % runs and this will be a no-op. See the indexspread.tex test case. - \ifvoid\partialpage \else - \onepageout{\pagecontents\partialpage}% - \fi - % - \global\setbox\partialpage = \vbox{% - % Unvbox the main output page. - \unvbox\PAGE - \kern-\topskip \kern\baselineskip - }% - }% - \eject % run that output routine to set \partialpage - % - % Use the double-column output routine for subsequent pages. - \output = {\doublecolumnout}% - % - % Change the page size parameters. We could do this once outside this - % routine, in each of @smallbook, @afourpaper, and the default 8.5x11 - % format, but then we repeat the same computation. Repeating a couple - % of assignments once per index is clearly meaningless for the - % execution time, so we may as well do it in one place. - % - % First we halve the line length, less a little for the gutter between - % the columns. We compute the gutter based on the line length, so it - % changes automatically with the paper format. The magic constant - % below is chosen so that the gutter has the same value (well, +-<1pt) - % as it did when we hard-coded it. - % - % We put the result in a separate register, \doublecolumhsize, so we - % can restore it in \pagesofar, after \hsize itself has (potentially) - % been clobbered. - % - \doublecolumnhsize = \hsize - \advance\doublecolumnhsize by -.04154\hsize - \divide\doublecolumnhsize by 2 - \hsize = \doublecolumnhsize - % - % Double the \vsize as well. (We don't need a separate register here, - % since nobody clobbers \vsize.) - \vsize = 2\vsize -} - -% The double-column output routine for all double-column pages except -% the last. -% -\def\doublecolumnout{% - \splittopskip=\topskip \splitmaxdepth=\maxdepth - % Get the available space for the double columns -- the normal - % (undoubled) page height minus any material left over from the - % previous page. - \dimen@ = \vsize - \divide\dimen@ by 2 - \advance\dimen@ by -\ht\partialpage - % - % box0 will be the left-hand column, box2 the right. - \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@ - \onepageout\pagesofar - \unvbox255 - \penalty\outputpenalty -} -% -% Re-output the contents of the output page -- any previous material, -% followed by the two boxes we just split, in box0 and box2. -\def\pagesofar{% - \unvbox\partialpage - % - \hsize = \doublecolumnhsize - \wd0=\hsize \wd2=\hsize - \hbox to\pagewidth{\box0\hfil\box2}% -} -% -% All done with double columns. -\def\enddoublecolumns{% - \output = {% - % Split the last of the double-column material. Leave it on the - % current page, no automatic page break. - \balancecolumns - % - % If we end up splitting too much material for the current page, - % though, there will be another page break right after this \output - % invocation ends. Having called \balancecolumns once, we do not - % want to call it again. Therefore, reset \output to its normal - % definition right away. (We hope \balancecolumns will never be - % called on to balance too much material, but if it is, this makes - % the output somewhat more palatable.) - \global\output = {\onepageout{\pagecontents\PAGE}}% - }% - \eject - \endgroup % started in \begindoublecolumns - % - % \pagegoal was set to the doubled \vsize above, since we restarted - % the current page. We're now back to normal single-column - % typesetting, so reset \pagegoal to the normal \vsize (after the - % \endgroup where \vsize got restored). - \pagegoal = \vsize -} -% -% Called at the end of the double column material. -\def\balancecolumns{% - \setbox0 = \vbox{\unvbox255}% like \box255 but more efficient, see p.120. - \dimen@ = \ht0 - \advance\dimen@ by \topskip - \advance\dimen@ by-\baselineskip - \divide\dimen@ by 2 % target to split to - %debug\message{final 2-column material height=\the\ht0, target=\the\dimen@.}% - \splittopskip = \topskip - % Loop until we get a decent breakpoint. - {% - \vbadness = 10000 - \loop - \global\setbox3 = \copy0 - \global\setbox1 = \vsplit3 to \dimen@ - \ifdim\ht3>\dimen@ - \global\advance\dimen@ by 1pt - \repeat - }% - %debug\message{split to \the\dimen@, column heights: \the\ht1, \the\ht3.}% - \setbox0=\vbox to\dimen@{\unvbox1}% - \setbox2=\vbox to\dimen@{\unvbox3}% - % - \pagesofar -} -\catcode`\@ = \other - - -\message{sectioning,} -% Chapters, sections, etc. - -% \unnumberedno is an oxymoron, of course. But we count the unnumbered -% sections so that we can refer to them unambiguously in the pdf -% outlines by their "section number". We avoid collisions with chapter -% numbers by starting them at 10000. (If a document ever has 10000 -% chapters, we're in trouble anyway, I'm sure.) -\newcount\unnumberedno \unnumberedno = 10000 -\newcount\chapno -\newcount\secno \secno=0 -\newcount\subsecno \subsecno=0 -\newcount\subsubsecno \subsubsecno=0 - -% This counter is funny since it counts through charcodes of letters A, B, ... -\newcount\appendixno \appendixno = `\@ -% -% \def\appendixletter{\char\the\appendixno} -% We do the following ugly conditional instead of the above simple -% construct for the sake of pdftex, which needs the actual -% letter in the expansion, not just typeset. -% -\def\appendixletter{% - \ifnum\appendixno=`A A% - \else\ifnum\appendixno=`B B% - \else\ifnum\appendixno=`C C% - \else\ifnum\appendixno=`D D% - \else\ifnum\appendixno=`E E% - \else\ifnum\appendixno=`F F% - \else\ifnum\appendixno=`G G% - \else\ifnum\appendixno=`H H% - \else\ifnum\appendixno=`I I% - \else\ifnum\appendixno=`J J% - \else\ifnum\appendixno=`K K% - \else\ifnum\appendixno=`L L% - \else\ifnum\appendixno=`M M% - \else\ifnum\appendixno=`N N% - \else\ifnum\appendixno=`O O% - \else\ifnum\appendixno=`P P% - \else\ifnum\appendixno=`Q Q% - \else\ifnum\appendixno=`R R% - \else\ifnum\appendixno=`S S% - \else\ifnum\appendixno=`T T% - \else\ifnum\appendixno=`U U% - \else\ifnum\appendixno=`V V% - \else\ifnum\appendixno=`W W% - \else\ifnum\appendixno=`X X% - \else\ifnum\appendixno=`Y Y% - \else\ifnum\appendixno=`Z Z% - % The \the is necessary, despite appearances, because \appendixletter is - % expanded while writing the .toc file. \char\appendixno is not - % expandable, thus it is written literally, thus all appendixes come out - % with the same letter (or @) in the toc without it. - \else\char\the\appendixno - \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi - \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi} - -% Each @chapter defines this as the name of the chapter. -% page headings and footings can use it. @section does likewise. -% However, they are not reliable, because we don't use marks. -\def\thischapter{} -\def\thissection{} - -\newcount\absseclevel % used to calculate proper heading level -\newcount\secbase\secbase=0 % @raisesections/@lowersections modify this count - -% @raisesections: treat @section as chapter, @subsection as section, etc. -\def\raisesections{\global\advance\secbase by -1} -\let\up=\raisesections % original BFox name - -% @lowersections: treat @chapter as section, @section as subsection, etc. -\def\lowersections{\global\advance\secbase by 1} -\let\down=\lowersections % original BFox name - -% we only have subsub. -\chardef\maxseclevel = 3 -% -% A numbered section within an unnumbered changes to unnumbered too. -% To achive this, remember the "biggest" unnum. sec. we are currently in: -\chardef\unmlevel = \maxseclevel -% -% Trace whether the current chapter is an appendix or not: -% \chapheadtype is "N" or "A", unnumbered chapters are ignored. -\def\chapheadtype{N} - -% Choose a heading macro -% #1 is heading type -% #2 is heading level -% #3 is text for heading -\def\genhead#1#2#3{% - % Compute the abs. sec. level: - \absseclevel=#2 - \advance\absseclevel by \secbase - % Make sure \absseclevel doesn't fall outside the range: - \ifnum \absseclevel < 0 - \absseclevel = 0 - \else - \ifnum \absseclevel > 3 - \absseclevel = 3 - \fi - \fi - % The heading type: - \def\headtype{#1}% - \if \headtype U% - \ifnum \absseclevel < \unmlevel - \chardef\unmlevel = \absseclevel - \fi - \else - % Check for appendix sections: - \ifnum \absseclevel = 0 - \edef\chapheadtype{\headtype}% - \else - \if \headtype A\if \chapheadtype N% - \errmessage{@appendix... within a non-appendix chapter}% - \fi\fi - \fi - % Check for numbered within unnumbered: - \ifnum \absseclevel > \unmlevel - \def\headtype{U}% - \else - \chardef\unmlevel = 3 - \fi - \fi - % Now print the heading: - \if \headtype U% - \ifcase\absseclevel - \unnumberedzzz{#3}% - \or \unnumberedseczzz{#3}% - \or \unnumberedsubseczzz{#3}% - \or \unnumberedsubsubseczzz{#3}% - \fi - \else - \if \headtype A% - \ifcase\absseclevel - \appendixzzz{#3}% - \or \appendixsectionzzz{#3}% - \or \appendixsubseczzz{#3}% - \or \appendixsubsubseczzz{#3}% - \fi - \else - \ifcase\absseclevel - \chapterzzz{#3}% - \or \seczzz{#3}% - \or \numberedsubseczzz{#3}% - \or \numberedsubsubseczzz{#3}% - \fi - \fi - \fi - \suppressfirstparagraphindent -} - -% an interface: -\def\numhead{\genhead N} -\def\apphead{\genhead A} -\def\unnmhead{\genhead U} - -% @chapter, @appendix, @unnumbered. Increment top-level counter, reset -% all lower-level sectioning counters to zero. -% -% Also set \chaplevelprefix, which we prepend to @float sequence numbers -% (e.g., figures), q.v. By default (before any chapter), that is empty. -\let\chaplevelprefix = \empty -% -\outer\parseargdef\chapter{\numhead0{#1}} % normally numhead0 calls chapterzzz -\def\chapterzzz#1{% - % section resetting is \global in case the chapter is in a group, such - % as an @include file. - \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 - \global\advance\chapno by 1 - % - % Used for \float. - \gdef\chaplevelprefix{\the\chapno.}% - \resetallfloatnos - % - \message{\putwordChapter\space \the\chapno}% - % - % Write the actual heading. - \chapmacro{#1}{Ynumbered}{\the\chapno}% - % - % So @section and the like are numbered underneath this chapter. - \global\let\section = \numberedsec - \global\let\subsection = \numberedsubsec - \global\let\subsubsection = \numberedsubsubsec -} - -\outer\parseargdef\appendix{\apphead0{#1}} % normally apphead0 calls appendixzzz -\def\appendixzzz#1{% - \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 - \global\advance\appendixno by 1 - \gdef\chaplevelprefix{\appendixletter.}% - \resetallfloatnos - % - \def\appendixnum{\putwordAppendix\space \appendixletter}% - \message{\appendixnum}% - % - \chapmacro{#1}{Yappendix}{\appendixletter}% - % - \global\let\section = \appendixsec - \global\let\subsection = \appendixsubsec - \global\let\subsubsection = \appendixsubsubsec -} - -\outer\parseargdef\unnumbered{\unnmhead0{#1}} % normally unnmhead0 calls unnumberedzzz -\def\unnumberedzzz#1{% - \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 - \global\advance\unnumberedno by 1 - % - % Since an unnumbered has no number, no prefix for figures. - \global\let\chaplevelprefix = \empty - \resetallfloatnos - % - % This used to be simply \message{#1}, but TeX fully expands the - % argument to \message. Therefore, if #1 contained @-commands, TeX - % expanded them. For example, in `@unnumbered The @cite{Book}', TeX - % expanded @cite (which turns out to cause errors because \cite is meant - % to be executed, not expanded). - % - % Anyway, we don't want the fully-expanded definition of @cite to appear - % as a result of the \message, we just want `@cite' itself. We use - % \the to achieve this: TeX expands \the only once, - % simply yielding the contents of . (We also do this for - % the toc entries.) - \toks0 = {#1}% - \message{(\the\toks0)}% - % - \chapmacro{#1}{Ynothing}{\the\unnumberedno}% - % - \global\let\section = \unnumberedsec - \global\let\subsection = \unnumberedsubsec - \global\let\subsubsection = \unnumberedsubsubsec -} - -% @centerchap is like @unnumbered, but the heading is centered. -\outer\parseargdef\centerchap{% - % Well, we could do the following in a group, but that would break - % an assumption that \chapmacro is called at the outermost level. - % Thus we are safer this way: --kasal, 24feb04 - \let\centerparametersmaybe = \centerparameters - \unnmhead0{#1}% - \let\centerparametersmaybe = \relax -} - -% @top is like @unnumbered. -\let\top\unnumbered - -% Sections. -\outer\parseargdef\numberedsec{\numhead1{#1}} % normally calls seczzz -\def\seczzz#1{% - \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 - \sectionheading{#1}{sec}{Ynumbered}{\the\chapno.\the\secno}% -} - -\outer\parseargdef\appendixsection{\apphead1{#1}} % normally calls appendixsectionzzz -\def\appendixsectionzzz#1{% - \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 - \sectionheading{#1}{sec}{Yappendix}{\appendixletter.\the\secno}% -} -\let\appendixsec\appendixsection - -\outer\parseargdef\unnumberedsec{\unnmhead1{#1}} % normally calls unnumberedseczzz -\def\unnumberedseczzz#1{% - \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 - \sectionheading{#1}{sec}{Ynothing}{\the\unnumberedno.\the\secno}% -} - -% Subsections. -\outer\parseargdef\numberedsubsec{\numhead2{#1}} % normally calls numberedsubseczzz -\def\numberedsubseczzz#1{% - \global\subsubsecno=0 \global\advance\subsecno by 1 - \sectionheading{#1}{subsec}{Ynumbered}{\the\chapno.\the\secno.\the\subsecno}% -} - -\outer\parseargdef\appendixsubsec{\apphead2{#1}} % normally calls appendixsubseczzz -\def\appendixsubseczzz#1{% - \global\subsubsecno=0 \global\advance\subsecno by 1 - \sectionheading{#1}{subsec}{Yappendix}% - {\appendixletter.\the\secno.\the\subsecno}% -} - -\outer\parseargdef\unnumberedsubsec{\unnmhead2{#1}} %normally calls unnumberedsubseczzz -\def\unnumberedsubseczzz#1{% - \global\subsubsecno=0 \global\advance\subsecno by 1 - \sectionheading{#1}{subsec}{Ynothing}% - {\the\unnumberedno.\the\secno.\the\subsecno}% -} - -% Subsubsections. -\outer\parseargdef\numberedsubsubsec{\numhead3{#1}} % normally numberedsubsubseczzz -\def\numberedsubsubseczzz#1{% - \global\advance\subsubsecno by 1 - \sectionheading{#1}{subsubsec}{Ynumbered}% - {\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno}% -} - -\outer\parseargdef\appendixsubsubsec{\apphead3{#1}} % normally appendixsubsubseczzz -\def\appendixsubsubseczzz#1{% - \global\advance\subsubsecno by 1 - \sectionheading{#1}{subsubsec}{Yappendix}% - {\appendixletter.\the\secno.\the\subsecno.\the\subsubsecno}% -} - -\outer\parseargdef\unnumberedsubsubsec{\unnmhead3{#1}} %normally unnumberedsubsubseczzz -\def\unnumberedsubsubseczzz#1{% - \global\advance\subsubsecno by 1 - \sectionheading{#1}{subsubsec}{Ynothing}% - {\the\unnumberedno.\the\secno.\the\subsecno.\the\subsubsecno}% -} - -% These macros control what the section commands do, according -% to what kind of chapter we are in (ordinary, appendix, or unnumbered). -% Define them by default for a numbered chapter. -\let\section = \numberedsec -\let\subsection = \numberedsubsec -\let\subsubsection = \numberedsubsubsec - -% Define @majorheading, @heading and @subheading - -% NOTE on use of \vbox for chapter headings, section headings, and such: -% 1) We use \vbox rather than the earlier \line to permit -% overlong headings to fold. -% 2) \hyphenpenalty is set to 10000 because hyphenation in a -% heading is obnoxious; this forbids it. -% 3) Likewise, headings look best if no \parindent is used, and -% if justification is not attempted. Hence \raggedright. - - -\def\majorheading{% - {\advance\chapheadingskip by 10pt \chapbreak }% - \parsearg\chapheadingzzz -} - -\def\chapheading{\chapbreak \parsearg\chapheadingzzz} -\def\chapheadingzzz#1{% - {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 - \parindent=0pt\raggedright - \rm #1\hfill}}% - \bigskip \par\penalty 200\relax - \suppressfirstparagraphindent -} - -% @heading, @subheading, @subsubheading. -\parseargdef\heading{\sectionheading{#1}{sec}{Yomitfromtoc}{} - \suppressfirstparagraphindent} -\parseargdef\subheading{\sectionheading{#1}{subsec}{Yomitfromtoc}{} - \suppressfirstparagraphindent} -\parseargdef\subsubheading{\sectionheading{#1}{subsubsec}{Yomitfromtoc}{} - \suppressfirstparagraphindent} - -% These macros generate a chapter, section, etc. heading only -% (including whitespace, linebreaking, etc. around it), -% given all the information in convenient, parsed form. - -%%% Args are the skip and penalty (usually negative) -\def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi} - -%%% Define plain chapter starts, and page on/off switching for it -% Parameter controlling skip before chapter headings (if needed) - -\newskip\chapheadingskip - -\def\chapbreak{\dobreak \chapheadingskip {-4000}} -\def\chappager{\par\vfill\supereject} -\def\chapoddpage{\chappager \ifodd\pageno \else \hbox to 0pt{} \chappager\fi} - -\def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname} - -\def\CHAPPAGoff{% -\global\let\contentsalignmacro = \chappager -\global\let\pchapsepmacro=\chapbreak -\global\let\pagealignmacro=\chappager} - -\def\CHAPPAGon{% -\global\let\contentsalignmacro = \chappager -\global\let\pchapsepmacro=\chappager -\global\let\pagealignmacro=\chappager -\global\def\HEADINGSon{\HEADINGSsingle}} - -\def\CHAPPAGodd{% -\global\let\contentsalignmacro = \chapoddpage -\global\let\pchapsepmacro=\chapoddpage -\global\let\pagealignmacro=\chapoddpage -\global\def\HEADINGSon{\HEADINGSdouble}} - -\CHAPPAGon - -% Chapter opening. -% -% #1 is the text, #2 is the section type (Ynumbered, Ynothing, -% Yappendix, Yomitfromtoc), #3 the chapter number. -% -% To test against our argument. -\def\Ynothingkeyword{Ynothing} -\def\Yomitfromtockeyword{Yomitfromtoc} -\def\Yappendixkeyword{Yappendix} -% -\def\chapmacro#1#2#3{% - \pchapsepmacro - {% - \chapfonts \rm - % - % Have to define \thissection before calling \donoderef, because the - % xref code eventually uses it. On the other hand, it has to be called - % after \pchapsepmacro, or the headline will change too soon. - \gdef\thissection{#1}% - \gdef\thischaptername{#1}% - % - % Only insert the separating space if we have a chapter/appendix - % number, and don't print the unnumbered ``number''. - \def\temptype{#2}% - \ifx\temptype\Ynothingkeyword - \setbox0 = \hbox{}% - \def\toctype{unnchap}% - \gdef\thischapter{#1}% - \else\ifx\temptype\Yomitfromtockeyword - \setbox0 = \hbox{}% contents like unnumbered, but no toc entry - \def\toctype{omit}% - \gdef\thischapter{}% - \else\ifx\temptype\Yappendixkeyword - \setbox0 = \hbox{\putwordAppendix{} #3\enspace}% - \def\toctype{app}% - % We don't substitute the actual chapter name into \thischapter - % because we don't want its macros evaluated now. And we don't - % use \thissection because that changes with each section. - % - \xdef\thischapter{\putwordAppendix{} \appendixletter: - \noexpand\thischaptername}% - \else - \setbox0 = \hbox{#3\enspace}% - \def\toctype{numchap}% - \xdef\thischapter{\putwordChapter{} \the\chapno: - \noexpand\thischaptername}% - \fi\fi\fi - % - % Write the toc entry for this chapter. Must come before the - % \donoderef, because we include the current node name in the toc - % entry, and \donoderef resets it to empty. - \writetocentry{\toctype}{#1}{#3}% - % - % For pdftex, we have to write out the node definition (aka, make - % the pdfdest) after any page break, but before the actual text has - % been typeset. If the destination for the pdf outline is after the - % text, then jumping from the outline may wind up with the text not - % being visible, for instance under high magnification. - \donoderef{#2}% - % - % Typeset the actual heading. - \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright - \hangindent=\wd0 \centerparametersmaybe - \unhbox0 #1\par}% - }% - \nobreak\bigskip % no page break after a chapter title - \nobreak -} - -% @centerchap -- centered and unnumbered. -\let\centerparametersmaybe = \relax -\def\centerparameters{% - \advance\rightskip by 3\rightskip - \leftskip = \rightskip - \parfillskip = 0pt -} - - -% I don't think this chapter style is supported any more, so I'm not -% updating it with the new noderef stuff. We'll see. --karl, 11aug03. -% -\def\setchapterstyle #1 {\csname CHAPF#1\endcsname} -% -\def\unnchfopen #1{% -\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 - \parindent=0pt\raggedright - \rm #1\hfill}}\bigskip \par\nobreak -} -\def\chfopen #1#2{\chapoddpage {\chapfonts -\vbox to 3in{\vfil \hbox to\hsize{\hfil #2} \hbox to\hsize{\hfil #1} \vfil}}% -\par\penalty 5000 % -} -\def\centerchfopen #1{% -\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 - \parindent=0pt - \hfill {\rm #1}\hfill}}\bigskip \par\nobreak -} -\def\CHAPFopen{% - \global\let\chapmacro=\chfopen - \global\let\centerchapmacro=\centerchfopen} - - -% Section titles. These macros combine the section number parts and -% call the generic \sectionheading to do the printing. -% -\newskip\secheadingskip -\def\secheadingbreak{\dobreak \secheadingskip{-1000}} - -% Subsection titles. -\newskip\subsecheadingskip -\def\subsecheadingbreak{\dobreak \subsecheadingskip{-500}} - -% Subsubsection titles. -\def\subsubsecheadingskip{\subsecheadingskip} -\def\subsubsecheadingbreak{\subsecheadingbreak} - - -% Print any size, any type, section title. -% -% #1 is the text, #2 is the section level (sec/subsec/subsubsec), #3 is -% the section type for xrefs (Ynumbered, Ynothing, Yappendix), #4 is the -% section number. -% -\def\sectionheading#1#2#3#4{% - {% - % Switch to the right set of fonts. - \csname #2fonts\endcsname \rm - % - % Insert space above the heading. - \csname #2headingbreak\endcsname - % - % Only insert the space after the number if we have a section number. - \def\sectionlevel{#2}% - \def\temptype{#3}% - % - \ifx\temptype\Ynothingkeyword - \setbox0 = \hbox{}% - \def\toctype{unn}% - \gdef\thissection{#1}% - \else\ifx\temptype\Yomitfromtockeyword - % for @headings -- no section number, don't include in toc, - % and don't redefine \thissection. - \setbox0 = \hbox{}% - \def\toctype{omit}% - \let\sectionlevel=\empty - \else\ifx\temptype\Yappendixkeyword - \setbox0 = \hbox{#4\enspace}% - \def\toctype{app}% - \gdef\thissection{#1}% - \else - \setbox0 = \hbox{#4\enspace}% - \def\toctype{num}% - \gdef\thissection{#1}% - \fi\fi\fi - % - % Write the toc entry (before \donoderef). See comments in \chfplain. - \writetocentry{\toctype\sectionlevel}{#1}{#4}% - % - % Write the node reference (= pdf destination for pdftex). - % Again, see comments in \chfplain. - \donoderef{#3}% - % - % Output the actual section heading. - \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright - \hangindent=\wd0 % zero if no section number - \unhbox0 #1}% - }% - % Add extra space after the heading -- half of whatever came above it. - % Don't allow stretch, though. - \kern .5 \csname #2headingskip\endcsname - % - % Do not let the kern be a potential breakpoint, as it would be if it - % was followed by glue. - \nobreak - % - % We'll almost certainly start a paragraph next, so don't let that - % glue accumulate. (Not a breakpoint because it's preceded by a - % discardable item.) - \vskip-\parskip - % - % This is purely so the last item on the list is a known \penalty > - % 10000. This is so \startdefun can avoid allowing breakpoints after - % section headings. Otherwise, it would insert a valid breakpoint between: - % - % @section sec-whatever - % @deffn def-whatever - \penalty 10001 -} - - -\message{toc,} -% Table of contents. -\newwrite\tocfile - -% Write an entry to the toc file, opening it if necessary. -% Called from @chapter, etc. -% -% Example usage: \writetocentry{sec}{Section Name}{\the\chapno.\the\secno} -% We append the current node name (if any) and page number as additional -% arguments for the \{chap,sec,...}entry macros which will eventually -% read this. The node name is used in the pdf outlines as the -% destination to jump to. -% -% We open the .toc file for writing here instead of at @setfilename (or -% any other fixed time) so that @contents can be anywhere in the document. -% But if #1 is `omit', then we don't do anything. This is used for the -% table of contents chapter openings themselves. -% -\newif\iftocfileopened -\def\omitkeyword{omit}% -% -\def\writetocentry#1#2#3{% - \edef\writetoctype{#1}% - \ifx\writetoctype\omitkeyword \else - \iftocfileopened\else - \immediate\openout\tocfile = \jobname.toc - \global\tocfileopenedtrue - \fi - % - \iflinks - \toks0 = {#2}% - \toks2 = \expandafter{\lastnode}% - \edef\temp{\write\tocfile{\realbackslash #1entry{\the\toks0}{#3}% - {\the\toks2}{\noexpand\folio}}}% - \temp - \fi - \fi - % - % Tell \shipout to create a pdf destination on each page, if we're - % writing pdf. These are used in the table of contents. We can't - % just write one on every page because the title pages are numbered - % 1 and 2 (the page numbers aren't printed), and so are the first - % two pages of the document. Thus, we'd have two destinations named - % `1', and two named `2'. - \ifpdf \global\pdfmakepagedesttrue \fi -} - -\newskip\contentsrightmargin \contentsrightmargin=1in -\newcount\savepageno -\newcount\lastnegativepageno \lastnegativepageno = -1 - -% Prepare to read what we've written to \tocfile. -% -\def\startcontents#1{% - % If @setchapternewpage on, and @headings double, the contents should - % start on an odd page, unlike chapters. Thus, we maintain - % \contentsalignmacro in parallel with \pagealignmacro. - % From: Torbjorn Granlund - \contentsalignmacro - \immediate\closeout\tocfile - % - % Don't need to put `Contents' or `Short Contents' in the headline. - % It is abundantly clear what they are. - \def\thischapter{}% - \chapmacro{#1}{Yomitfromtoc}{}% - % - \savepageno = \pageno - \begingroup % Set up to handle contents files properly. - \catcode`\\=0 \catcode`\{=1 \catcode`\}=2 \catcode`\@=11 - % We can't do this, because then an actual ^ in a section - % title fails, e.g., @chapter ^ -- exponentiation. --karl, 9jul97. - %\catcode`\^=7 % to see ^^e4 as \"a etc. juha@piuha.ydi.vtt.fi - \raggedbottom % Worry more about breakpoints than the bottom. - \advance\hsize by -\contentsrightmargin % Don't use the full line length. - % - % Roman numerals for page numbers. - \ifnum \pageno>0 \global\pageno = \lastnegativepageno \fi -} - - -% Normal (long) toc. -\def\contents{% - \startcontents{\putwordTOC}% - \openin 1 \jobname.toc - \ifeof 1 \else - \input \jobname.toc - \fi - \vfill \eject - \contentsalignmacro % in case @setchapternewpage odd is in effect - \ifeof 1 \else - \pdfmakeoutlines - \fi - \closein 1 - \endgroup - \lastnegativepageno = \pageno - \global\pageno = \savepageno -} - -% And just the chapters. -\def\summarycontents{% - \startcontents{\putwordShortTOC}% - % - \let\numchapentry = \shortchapentry - \let\appentry = \shortchapentry - \let\unnchapentry = \shortunnchapentry - % We want a true roman here for the page numbers. - \secfonts - \let\rm=\shortcontrm \let\bf=\shortcontbf - \let\sl=\shortcontsl \let\tt=\shortconttt - \rm - \hyphenpenalty = 10000 - \advance\baselineskip by 1pt % Open it up a little. - \def\numsecentry##1##2##3##4{} - \let\appsecentry = \numsecentry - \let\unnsecentry = \numsecentry - \let\numsubsecentry = \numsecentry - \let\appsubsecentry = \numsecentry - \let\unnsubsecentry = \numsecentry - \let\numsubsubsecentry = \numsecentry - \let\appsubsubsecentry = \numsecentry - \let\unnsubsubsecentry = \numsecentry - \openin 1 \jobname.toc - \ifeof 1 \else - \input \jobname.toc - \fi - \closein 1 - \vfill \eject - \contentsalignmacro % in case @setchapternewpage odd is in effect - \endgroup - \lastnegativepageno = \pageno - \global\pageno = \savepageno -} -\let\shortcontents = \summarycontents - -% Typeset the label for a chapter or appendix for the short contents. -% The arg is, e.g., `A' for an appendix, or `3' for a chapter. -% -\def\shortchaplabel#1{% - % This space should be enough, since a single number is .5em, and the - % widest letter (M) is 1em, at least in the Computer Modern fonts. - % But use \hss just in case. - % (This space doesn't include the extra space that gets added after - % the label; that gets put in by \shortchapentry above.) - % - % We'd like to right-justify chapter numbers, but that looks strange - % with appendix letters. And right-justifying numbers and - % left-justifying letters looks strange when there is less than 10 - % chapters. Have to read the whole toc once to know how many chapters - % there are before deciding ... - \hbox to 1em{#1\hss}% -} - -% These macros generate individual entries in the table of contents. -% The first argument is the chapter or section name. -% The last argument is the page number. -% The arguments in between are the chapter number, section number, ... - -% Chapters, in the main contents. -\def\numchapentry#1#2#3#4{\dochapentry{#2\labelspace#1}{#4}} -% -% Chapters, in the short toc. -% See comments in \dochapentry re vbox and related settings. -\def\shortchapentry#1#2#3#4{% - \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#4\egroup}% -} - -% Appendices, in the main contents. -% Need the word Appendix, and a fixed-size box. -% -\def\appendixbox#1{% - % We use M since it's probably the widest letter. - \setbox0 = \hbox{\putwordAppendix{} M}% - \hbox to \wd0{\putwordAppendix{} #1\hss}} -% -\def\appentry#1#2#3#4{\dochapentry{\appendixbox{#2}\labelspace#1}{#4}} - -% Unnumbered chapters. -\def\unnchapentry#1#2#3#4{\dochapentry{#1}{#4}} -\def\shortunnchapentry#1#2#3#4{\tocentry{#1}{\doshortpageno\bgroup#4\egroup}} - -% Sections. -\def\numsecentry#1#2#3#4{\dosecentry{#2\labelspace#1}{#4}} -\let\appsecentry=\numsecentry -\def\unnsecentry#1#2#3#4{\dosecentry{#1}{#4}} - -% Subsections. -\def\numsubsecentry#1#2#3#4{\dosubsecentry{#2\labelspace#1}{#4}} -\let\appsubsecentry=\numsubsecentry -\def\unnsubsecentry#1#2#3#4{\dosubsecentry{#1}{#4}} - -% And subsubsections. -\def\numsubsubsecentry#1#2#3#4{\dosubsubsecentry{#2\labelspace#1}{#4}} -\let\appsubsubsecentry=\numsubsubsecentry -\def\unnsubsubsecentry#1#2#3#4{\dosubsubsecentry{#1}{#4}} - -% This parameter controls the indentation of the various levels. -% Same as \defaultparindent. -\newdimen\tocindent \tocindent = 15pt - -% Now for the actual typesetting. In all these, #1 is the text and #2 is the -% page number. -% -% If the toc has to be broken over pages, we want it to be at chapters -% if at all possible; hence the \penalty. -\def\dochapentry#1#2{% - \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip - \begingroup - \chapentryfonts - \tocentry{#1}{\dopageno\bgroup#2\egroup}% - \endgroup - \nobreak\vskip .25\baselineskip plus.1\baselineskip -} - -\def\dosecentry#1#2{\begingroup - \secentryfonts \leftskip=\tocindent - \tocentry{#1}{\dopageno\bgroup#2\egroup}% -\endgroup} - -\def\dosubsecentry#1#2{\begingroup - \subsecentryfonts \leftskip=2\tocindent - \tocentry{#1}{\dopageno\bgroup#2\egroup}% -\endgroup} - -\def\dosubsubsecentry#1#2{\begingroup - \subsubsecentryfonts \leftskip=3\tocindent - \tocentry{#1}{\dopageno\bgroup#2\egroup}% -\endgroup} - -% We use the same \entry macro as for the index entries. -\let\tocentry = \entry - -% Space between chapter (or whatever) number and the title. -\def\labelspace{\hskip1em \relax} - -\def\dopageno#1{{\rm #1}} -\def\doshortpageno#1{{\rm #1}} - -\def\chapentryfonts{\secfonts \rm} -\def\secentryfonts{\textfonts} -\def\subsecentryfonts{\textfonts} -\def\subsubsecentryfonts{\textfonts} - - -\message{environments,} -% @foo ... @end foo. - -% @point{}, @result{}, @expansion{}, @print{}, @equiv{}. -% -% Since these characters are used in examples, it should be an even number of -% \tt widths. Each \tt character is 1en, so two makes it 1em. -% -\def\point{$\star$} -\def\result{\leavevmode\raise.15ex\hbox to 1em{\hfil$\Rightarrow$\hfil}} -\def\expansion{\leavevmode\raise.1ex\hbox to 1em{\hfil$\mapsto$\hfil}} -\def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}} -\def\equiv{\leavevmode\lower.1ex\hbox to 1em{\hfil$\ptexequiv$\hfil}} - -% The @error{} command. -% Adapted from the TeXbook's \boxit. -% -\newbox\errorbox -% -{\tentt \global\dimen0 = 3em}% Width of the box. -\dimen2 = .55pt % Thickness of rules -% The text. (`r' is open on the right, `e' somewhat less so on the left.) -\setbox0 = \hbox{\kern-.75pt \tensf error\kern-1.5pt} -% -\setbox\errorbox=\hbox to \dimen0{\hfil - \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right. - \advance\hsize by -2\dimen2 % Rules. - \vbox{% - \hrule height\dimen2 - \hbox{\vrule width\dimen2 \kern3pt % Space to left of text. - \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below. - \kern3pt\vrule width\dimen2}% Space to right. - \hrule height\dimen2} - \hfil} -% -\def\error{\leavevmode\lower.7ex\copy\errorbox} - -% @tex ... @end tex escapes into raw Tex temporarily. -% One exception: @ is still an escape character, so that @end tex works. -% But \@ or @@ will get a plain tex @ character. - -\envdef\tex{% - \catcode `\\=0 \catcode `\{=1 \catcode `\}=2 - \catcode `\$=3 \catcode `\&=4 \catcode `\#=6 - \catcode `\^=7 \catcode `\_=8 \catcode `\~=\active \let~=\tie - \catcode `\%=14 - \catcode `\+=\other - \catcode `\"=\other - \catcode `\|=\other - \catcode `\<=\other - \catcode `\>=\other - \escapechar=`\\ - % - \let\b=\ptexb - \let\bullet=\ptexbullet - \let\c=\ptexc - \let\,=\ptexcomma - \let\.=\ptexdot - \let\dots=\ptexdots - \let\equiv=\ptexequiv - \let\!=\ptexexclam - \let\i=\ptexi - \let\indent=\ptexindent - \let\noindent=\ptexnoindent - \let\{=\ptexlbrace - \let\+=\tabalign - \let\}=\ptexrbrace - \let\/=\ptexslash - \let\*=\ptexstar - \let\t=\ptext - % - \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}% - \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}% - \def\@{@}% -} -% There is no need to define \Etex. - -% Define @lisp ... @end lisp. -% @lisp environment forms a group so it can rebind things, -% including the definition of @end lisp (which normally is erroneous). - -% Amount to narrow the margins by for @lisp. -\newskip\lispnarrowing \lispnarrowing=0.4in - -% This is the definition that ^^M gets inside @lisp, @example, and other -% such environments. \null is better than a space, since it doesn't -% have any width. -\def\lisppar{\null\endgraf} - -% This space is always present above and below environments. -\newskip\envskipamount \envskipamount = 0pt - -% Make spacing and below environment symmetrical. We use \parskip here -% to help in doing that, since in @example-like environments \parskip -% is reset to zero; thus the \afterenvbreak inserts no space -- but the -% start of the next paragraph will insert \parskip. -% -\def\aboveenvbreak{{% - % =10000 instead of <10000 because of a special case in \itemzzz and - % \sectionheading, q.v. - \ifnum \lastpenalty=10000 \else - \advance\envskipamount by \parskip - \endgraf - \ifdim\lastskip<\envskipamount - \removelastskip - % it's not a good place to break if the last penalty was \nobreak - % or better ... - \ifnum\lastpenalty<10000 \penalty-50 \fi - \vskip\envskipamount - \fi - \fi -}} - -\let\afterenvbreak = \aboveenvbreak - -% \nonarrowing is a flag. If "set", @lisp etc don't narrow margins. -\let\nonarrowing=\relax - -% @cartouche ... @end cartouche: draw rectangle w/rounded corners around -% environment contents. -\font\circle=lcircle10 -\newdimen\circthick -\newdimen\cartouter\newdimen\cartinner -\newskip\normbskip\newskip\normpskip\newskip\normlskip -\circthick=\fontdimen8\circle -% -\def\ctl{{\circle\char'013\hskip -6pt}}% 6pt from pl file: 1/2charwidth -\def\ctr{{\hskip 6pt\circle\char'010}} -\def\cbl{{\circle\char'012\hskip -6pt}} -\def\cbr{{\hskip 6pt\circle\char'011}} -\def\carttop{\hbox to \cartouter{\hskip\lskip - \ctl\leaders\hrule height\circthick\hfil\ctr - \hskip\rskip}} -\def\cartbot{\hbox to \cartouter{\hskip\lskip - \cbl\leaders\hrule height\circthick\hfil\cbr - \hskip\rskip}} -% -\newskip\lskip\newskip\rskip - -\envdef\cartouche{% - \ifhmode\par\fi % can't be in the midst of a paragraph. - \startsavinginserts - \lskip=\leftskip \rskip=\rightskip - \leftskip=0pt\rightskip=0pt % we want these *outside*. - \cartinner=\hsize \advance\cartinner by-\lskip - \advance\cartinner by-\rskip - \cartouter=\hsize - \advance\cartouter by 18.4pt % allow for 3pt kerns on either - % side, and for 6pt waste from - % each corner char, and rule thickness - \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip - % Flag to tell @lisp, etc., not to narrow margin. - \let\nonarrowing=\comment - \vbox\bgroup - \baselineskip=0pt\parskip=0pt\lineskip=0pt - \carttop - \hbox\bgroup - \hskip\lskip - \vrule\kern3pt - \vbox\bgroup - \kern3pt - \hsize=\cartinner - \baselineskip=\normbskip - \lineskip=\normlskip - \parskip=\normpskip - \vskip -\parskip - \comment % For explanation, see the end of \def\group. -} -\def\Ecartouche{% - \ifhmode\par\fi - \kern3pt - \egroup - \kern3pt\vrule - \hskip\rskip - \egroup - \cartbot - \egroup - \checkinserts -} - - -% This macro is called at the beginning of all the @example variants, -% inside a group. -\def\nonfillstart{% - \aboveenvbreak - \hfuzz = 12pt % Don't be fussy - \sepspaces % Make spaces be word-separators rather than space tokens. - \let\par = \lisppar % don't ignore blank lines - \obeylines % each line of input is a line of output - \parskip = 0pt - \parindent = 0pt - \emergencystretch = 0pt % don't try to avoid overfull boxes - % @cartouche defines \nonarrowing to inhibit narrowing - % at next level down. - \ifx\nonarrowing\relax - \advance \leftskip by \lispnarrowing - \exdentamount=\lispnarrowing - \fi - \let\exdent=\nofillexdent -} - -% If you want all examples etc. small: @set dispenvsize small. -% If you want even small examples the full size: @set dispenvsize nosmall. -% This affects the following displayed environments: -% @example, @display, @format, @lisp -% -\def\smallword{small} -\def\nosmallword{nosmall} -\let\SETdispenvsize\relax -\def\setnormaldispenv{% - \ifx\SETdispenvsize\smallword - \smallexamplefonts \rm - \fi -} -\def\setsmalldispenv{% - \ifx\SETdispenvsize\nosmallword - \else - \smallexamplefonts \rm - \fi -} - -% We often define two environments, @foo and @smallfoo. -% Let's do it by one command: -\def\makedispenv #1#2{ - \expandafter\envdef\csname#1\endcsname {\setnormaldispenv #2} - \expandafter\envdef\csname small#1\endcsname {\setsmalldispenv #2} - \expandafter\let\csname E#1\endcsname \afterenvbreak - \expandafter\let\csname Esmall#1\endcsname \afterenvbreak -} - -% Define two synonyms: -\def\maketwodispenvs #1#2#3{ - \makedispenv{#1}{#3} - \makedispenv{#2}{#3} -} - -% @lisp: indented, narrowed, typewriter font; @example: same as @lisp. -% -% @smallexample and @smalllisp: use smaller fonts. -% Originally contributed by Pavel@xerox. -% -\maketwodispenvs {lisp}{example}{% - \nonfillstart - \tt - \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special. - \gobble % eat return -} - -% @display/@smalldisplay: same as @lisp except keep current font. -% -\makedispenv {display}{% - \nonfillstart - \gobble -} - -% @format/@smallformat: same as @display except don't narrow margins. -% -\makedispenv{format}{% - \let\nonarrowing = t% - \nonfillstart - \gobble -} - -% @flushleft: same as @format, but doesn't obey \SETdispenvsize. -\envdef\flushleft{% - \let\nonarrowing = t% - \nonfillstart - \gobble -} -\let\Eflushleft = \afterenvbreak - -% @flushright. -% -\envdef\flushright{% - \let\nonarrowing = t% - \nonfillstart - \advance\leftskip by 0pt plus 1fill - \gobble -} -\let\Eflushright = \afterenvbreak - - -% @quotation does normal linebreaking (hence we can't use \nonfillstart) -% and narrows the margins. We keep \parskip nonzero in general, since -% we're doing normal filling. So, when using \aboveenvbreak and -% \afterenvbreak, temporarily make \parskip 0. -% -\envdef\quotation{% - {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip - \parindent=0pt - % - % @cartouche defines \nonarrowing to inhibit narrowing at next level down. - \ifx\nonarrowing\relax - \advance\leftskip by \lispnarrowing - \advance\rightskip by \lispnarrowing - \exdentamount = \lispnarrowing - \let\nonarrowing = \relax - \fi - \parsearg\quotationlabel -} - -% We have retained a nonzero parskip for the environment, since we're -% doing normal filling. -% -\def\Equotation{% - \par - \ifx\quotationauthor\undefined\else - % indent a bit. - \leftline{\kern 2\leftskip \sl ---\quotationauthor}% - \fi - {\parskip=0pt \afterenvbreak}% -} - -% If we're given an argument, typeset it in bold with a colon after. -\def\quotationlabel#1{% - \def\temp{#1}% - \ifx\temp\empty \else - {\bf #1: }% - \fi -} - - -% LaTeX-like @verbatim...@end verbatim and @verb{...} -% If we want to allow any as delimiter, -% we need the curly braces so that makeinfo sees the @verb command, eg: -% `@verbx...x' would look like the '@verbx' command. --janneke@gnu.org -% -% [Knuth]: Donald Ervin Knuth, 1996. The TeXbook. -% -% [Knuth] p.344; only we need to do the other characters Texinfo sets -% active too. Otherwise, they get lost as the first character on a -% verbatim line. -\def\dospecials{% - \do\ \do\\\do\{\do\}\do\$\do\&% - \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~% - \do\<\do\>\do\|\do\@\do+\do\"% -} -% -% [Knuth] p. 380 -\def\uncatcodespecials{% - \def\do##1{\catcode`##1=\other}\dospecials} -% -% [Knuth] pp. 380,381,391 -% Disable Spanish ligatures ?` and !` of \tt font -\begingroup - \catcode`\`=\active\gdef`{\relax\lq} -\endgroup -% -% Setup for the @verb command. -% -% Eight spaces for a tab -\begingroup - \catcode`\^^I=\active - \gdef\tabeightspaces{\catcode`\^^I=\active\def^^I{\ \ \ \ \ \ \ \ }} -\endgroup -% -\def\setupverb{% - \tt % easiest (and conventionally used) font for verbatim - \def\par{\leavevmode\endgraf}% - \catcode`\`=\active - \tabeightspaces - % Respect line breaks, - % print special symbols as themselves, and - % make each space count - % must do in this order: - \obeylines \uncatcodespecials \sepspaces -} - -% Setup for the @verbatim environment -% -% Real tab expansion -\newdimen\tabw \setbox0=\hbox{\tt\space} \tabw=8\wd0 % tab amount -% -\def\starttabbox{\setbox0=\hbox\bgroup} -\begingroup - \catcode`\^^I=\active - \gdef\tabexpand{% - \catcode`\^^I=\active - \def^^I{\leavevmode\egroup - \dimen0=\wd0 % the width so far, or since the previous tab - \divide\dimen0 by\tabw - \multiply\dimen0 by\tabw % compute previous multiple of \tabw - \advance\dimen0 by\tabw % advance to next multiple of \tabw - \wd0=\dimen0 \box0 \starttabbox - }% - } -\endgroup -\def\setupverbatim{% - \nonfillstart - \advance\leftskip by -\defbodyindent - % Easiest (and conventionally used) font for verbatim - \tt - \def\par{\leavevmode\egroup\box0\endgraf}% - \catcode`\`=\active - \tabexpand - % Respect line breaks, - % print special symbols as themselves, and - % make each space count - % must do in this order: - \obeylines \uncatcodespecials \sepspaces - \everypar{\starttabbox}% -} - -% Do the @verb magic: verbatim text is quoted by unique -% delimiter characters. Before first delimiter expect a -% right brace, after last delimiter expect closing brace: -% -% \def\doverb'{'#1'}'{#1} -% -% [Knuth] p. 382; only eat outer {} -\begingroup - \catcode`[=1\catcode`]=2\catcode`\{=\other\catcode`\}=\other - \gdef\doverb{#1[\def\next##1#1}[##1\endgroup]\next] -\endgroup -% -\def\verb{\begingroup\setupverb\doverb} -% -% -% Do the @verbatim magic: define the macro \doverbatim so that -% the (first) argument ends when '@end verbatim' is reached, ie: -% -% \def\doverbatim#1@end verbatim{#1} -% -% For Texinfo it's a lot easier than for LaTeX, -% because texinfo's \verbatim doesn't stop at '\end{verbatim}': -% we need not redefine '\', '{' and '}'. -% -% Inspired by LaTeX's verbatim command set [latex.ltx] -% -\begingroup - \catcode`\ =\active - \obeylines % - % ignore everything up to the first ^^M, that's the newline at the end - % of the @verbatim input line itself. Otherwise we get an extra blank - % line in the output. - \xdef\doverbatim#1^^M#2@end verbatim{#2\noexpand\end\gobble verbatim}% - % We really want {...\end verbatim} in the body of the macro, but - % without the active space; thus we have to use \xdef and \gobble. -\endgroup -% -\envdef\verbatim{% - \setupverbatim\doverbatim -} -\let\Everbatim = \afterenvbreak - - -% @verbatiminclude FILE - insert text of file in verbatim environment. -% -\def\verbatiminclude{\parseargusing\filenamecatcodes\doverbatiminclude} -% -\def\doverbatiminclude#1{% - {% - \makevalueexpandable - \setupverbatim - \input #1 - \afterenvbreak - }% -} - -% @copying ... @end copying. -% Save the text away for @insertcopying later. -% -% We save the uninterpreted tokens, rather than creating a box. -% Saving the text in a box would be much easier, but then all the -% typesetting commands (@smallbook, font changes, etc.) have to be done -% beforehand -- and a) we want @copying to be done first in the source -% file; b) letting users define the frontmatter in as flexible order as -% possible is very desirable. -% -\def\copying{\checkenv{}\begingroup\scanargctxt\docopying} -\def\docopying#1@end copying{\endgroup\def\copyingtext{#1}} -% -\def\insertcopying{% - \begingroup - \parindent = 0pt % paragraph indentation looks wrong on title page - \scanexp\copyingtext - \endgroup -} - -\message{defuns,} -% @defun etc. - -\newskip\defbodyindent \defbodyindent=.4in -\newskip\defargsindent \defargsindent=50pt -\newskip\deflastargmargin \deflastargmargin=18pt - -% Start the processing of @deffn: -\def\startdefun{% - \ifnum\lastpenalty<10000 - \medbreak - \else - % If there are two @def commands in a row, we'll have a \nobreak, - % which is there to keep the function description together with its - % header. But if there's nothing but headers, we need to allow a - % break somewhere. Check specifically for penalty 10002, inserted - % by \defargscommonending, instead of 10000, since the sectioning - % commands also insert a nobreak penalty, and we don't want to allow - % a break between a section heading and a defun. - % - \ifnum\lastpenalty=10002 \penalty2000 \fi - % - % Similarly, after a section heading, do not allow a break. - % But do insert the glue. - \medskip % preceded by discardable penalty, so not a breakpoint - \fi - % - \parindent=0in - \advance\leftskip by \defbodyindent - \exdentamount=\defbodyindent -} - -\def\dodefunx#1{% - % First, check whether we are in the right environment: - \checkenv#1% - % - % As above, allow line break if we have multiple x headers in a row. - % It's not a great place, though. - \ifnum\lastpenalty=10002 \penalty3000 \fi - % - % And now, it's time to reuse the body of the original defun: - \expandafter\gobbledefun#1% -} -\def\gobbledefun#1\startdefun{} - -% \printdefunline \deffnheader{text} -% -\def\printdefunline#1#2{% - \begingroup - % call \deffnheader: - #1#2 \endheader - % common ending: - \interlinepenalty = 10000 - \advance\rightskip by 0pt plus 1fil - \endgraf - \nobreak\vskip -\parskip - \penalty 10002 % signal to \startdefun and \dodefunx - % Some of the @defun-type tags do not enable magic parentheses, - % rendering the following check redundant. But we don't optimize. - \checkparencounts - \endgroup -} - -\def\Edefun{\endgraf\medbreak} - -% \makedefun{deffn} creates \deffn, \deffnx and \Edeffn; -% the only thing remainnig is to define \deffnheader. -% -\def\makedefun#1{% - \expandafter\let\csname E#1\endcsname = \Edefun - \edef\temp{\noexpand\domakedefun - \makecsname{#1}\makecsname{#1x}\makecsname{#1header}}% - \temp -} - -% \domakedefun \deffn \deffnx \deffnheader -% -% Define \deffn and \deffnx, without parameters. -% \deffnheader has to be defined explicitly. -% -\def\domakedefun#1#2#3{% - \envdef#1{% - \startdefun - \parseargusing\activeparens{\printdefunline#3}% - }% - \def#2{\dodefunx#1}% - \def#3% -} - -%%% Untyped functions: - -% @deffn category name args -\makedefun{deffn}{\deffngeneral{}} - -% @deffn category class name args -\makedefun{defop}#1 {\defopon{#1\ \putwordon}} - -% \defopon {category on}class name args -\def\defopon#1#2 {\deffngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} } - -% \deffngeneral {subind}category name args -% -\def\deffngeneral#1#2 #3 #4\endheader{% - % Remember that \dosubind{fn}{foo}{} is equivalent to \doind{fn}{foo}. - \dosubind{fn}{\code{#3}}{#1}% - \defname{#2}{}{#3}\magicamp\defunargs{#4\unskip}% -} - -%%% Typed functions: - -% @deftypefn category type name args -\makedefun{deftypefn}{\deftypefngeneral{}} - -% @deftypeop category class type name args -\makedefun{deftypeop}#1 {\deftypeopon{#1\ \putwordon}} - -% \deftypeopon {category on}class type name args -\def\deftypeopon#1#2 {\deftypefngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} } - -% \deftypefngeneral {subind}category type name args -% -\def\deftypefngeneral#1#2 #3 #4 #5\endheader{% - \dosubind{fn}{\code{#4}}{#1}% - \defname{#2}{#3}{#4}\defunargs{#5\unskip}% -} - -%%% Typed variables: - -% @deftypevr category type var args -\makedefun{deftypevr}{\deftypecvgeneral{}} - -% @deftypecv category class type var args -\makedefun{deftypecv}#1 {\deftypecvof{#1\ \putwordof}} - -% \deftypecvof {category of}class type var args -\def\deftypecvof#1#2 {\deftypecvgeneral{\putwordof\ \code{#2}}{#1\ \code{#2}} } - -% \deftypecvgeneral {subind}category type var args -% -\def\deftypecvgeneral#1#2 #3 #4 #5\endheader{% - \dosubind{vr}{\code{#4}}{#1}% - \defname{#2}{#3}{#4}\defunargs{#5\unskip}% -} - -%%% Untyped variables: - -% @defvr category var args -\makedefun{defvr}#1 {\deftypevrheader{#1} {} } - -% @defcv category class var args -\makedefun{defcv}#1 {\defcvof{#1\ \putwordof}} - -% \defcvof {category of}class var args -\def\defcvof#1#2 {\deftypecvof{#1}#2 {} } - -%%% Type: -% @deftp category name args -\makedefun{deftp}#1 #2 #3\endheader{% - \doind{tp}{\code{#2}}% - \defname{#1}{}{#2}\defunargs{#3\unskip}% -} - -% Remaining @defun-like shortcuts: -\makedefun{defun}{\deffnheader{\putwordDeffunc} } -\makedefun{defmac}{\deffnheader{\putwordDefmac} } -\makedefun{defspec}{\deffnheader{\putwordDefspec} } -\makedefun{deftypefun}{\deftypefnheader{\putwordDeffunc} } -\makedefun{defvar}{\defvrheader{\putwordDefvar} } -\makedefun{defopt}{\defvrheader{\putwordDefopt} } -\makedefun{deftypevar}{\deftypevrheader{\putwordDefvar} } -\makedefun{defmethod}{\defopon\putwordMethodon} -\makedefun{deftypemethod}{\deftypeopon\putwordMethodon} -\makedefun{defivar}{\defcvof\putwordInstanceVariableof} -\makedefun{deftypeivar}{\deftypecvof\putwordInstanceVariableof} - -% \defname, which formats the name of the @def (not the args). -% #1 is the category, such as "Function". -% #2 is the return type, if any. -% #3 is the function name. -% -% We are followed by (but not passed) the arguments, if any. -% -\def\defname#1#2#3{% - % Get the values of \leftskip and \rightskip as they were outside the @def... - \advance\leftskip by -\defbodyindent - % - % How we'll format the type name. Putting it in brackets helps - % distinguish it from the body text that may end up on the next line - % just below it. - \def\temp{#1}% - \setbox0=\hbox{\kern\deflastargmargin \ifx\temp\empty\else [\rm\temp]\fi} - % - % Figure out line sizes for the paragraph shape. - % The first line needs space for \box0; but if \rightskip is nonzero, - % we need only space for the part of \box0 which exceeds it: - \dimen0=\hsize \advance\dimen0 by -\wd0 \advance\dimen0 by \rightskip - % The continuations: - \dimen2=\hsize \advance\dimen2 by -\defargsindent - % (plain.tex says that \dimen1 should be used only as global.) - \parshape 2 0in \dimen0 \defargsindent \dimen2 - % - % Put the type name to the right margin. - \noindent - \hbox to 0pt{% - \hfil\box0 \kern-\hsize - % \hsize has to be shortened this way: - \kern\leftskip - % Intentionally do not respect \rightskip, since we need the space. - }% - % - % Allow all lines to be underfull without complaint: - \tolerance=10000 \hbadness=10000 - \exdentamount=\defbodyindent - {% - % defun fonts. We use typewriter by default (used to be bold) because: - % . we're printing identifiers, they should be in tt in principle. - % . in languages with many accents, such as Czech or French, it's - % common to leave accents off identifiers. The result looks ok in - % tt, but exceedingly strange in rm. - % . we don't want -- and --- to be treated as ligatures. - % . this still does not fix the ?` and !` ligatures, but so far no - % one has made identifiers using them :). - \df \tt - \def\temp{#2}% return value type - \ifx\temp\empty\else \tclose{\temp} \fi - #3% output function name - }% - {\rm\enskip}% hskip 0.5 em of \tenrm - % - \boldbrax - % arguments will be output next, if any. -} - -% Print arguments in slanted roman (not ttsl), inconsistently with using -% tt for the name. This is because literal text is sometimes needed in -% the argument list (groff manual), and ttsl and tt are not very -% distinguishable. Prevent hyphenation at `-' chars. -% -\def\defunargs#1{% - % use sl by default (not ttsl), - % tt for the names. - \df \sl \hyphenchar\font=0 - % - % On the other hand, if an argument has two dashes (for instance), we - % want a way to get ttsl. Let's try @var for that. - \let\var=\ttslanted - #1% - \sl\hyphenchar\font=45 -} - -% We want ()&[] to print specially on the defun line. -% -\def\activeparens{% - \catcode`\(=\active \catcode`\)=\active - \catcode`\[=\active \catcode`\]=\active - \catcode`\&=\active -} - -% Make control sequences which act like normal parenthesis chars. -\let\lparen = ( \let\rparen = ) - -% Be sure that we always have a definition for `(', etc. For example, -% if the fn name has parens in it, \boldbrax will not be in effect yet, -% so TeX would otherwise complain about undefined control sequence. -{ - \activeparens - \global\let(=\lparen \global\let)=\rparen - \global\let[=\lbrack \global\let]=\rbrack - \global\let& = \& - - \gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb} - \gdef\magicamp{\let&=\amprm} -} - -\newcount\parencount - -% If we encounter &foo, then turn on ()-hacking afterwards -\newif\ifampseen -\def\amprm#1 {\ampseentrue{\bf\ }} - -\def\parenfont{% - \ifampseen - % At the first level, print parens in roman, - % otherwise use the default font. - \ifnum \parencount=1 \rm \fi - \else - % The \sf parens (in \boldbrax) actually are a little bolder than - % the contained text. This is especially needed for [ and ] . - \sf - \fi -} -\def\infirstlevel#1{% - \ifampseen - \ifnum\parencount=1 - #1% - \fi - \fi -} -\def\bfafterword#1 {#1 \bf} - -\def\opnr{% - \global\advance\parencount by 1 - {\parenfont(}% - \infirstlevel \bfafterword -} -\def\clnr{% - {\parenfont)}% - \infirstlevel \sl - \global\advance\parencount by -1 -} - -\newcount\brackcount -\def\lbrb{% - \global\advance\brackcount by 1 - {\bf[}% -} -\def\rbrb{% - {\bf]}% - \global\advance\brackcount by -1 -} - -\def\checkparencounts{% - \ifnum\parencount=0 \else \badparencount \fi - \ifnum\brackcount=0 \else \badbrackcount \fi -} -\def\badparencount{% - \errmessage{Unbalanced parentheses in @def}% - \global\parencount=0 -} -\def\badbrackcount{% - \errmessage{Unbalanced square braces in @def}% - \global\brackcount=0 -} - - -\message{macros,} -% @macro. - -% To do this right we need a feature of e-TeX, \scantokens, -% which we arrange to emulate with a temporary file in ordinary TeX. -\ifx\eTeXversion\undefined - \newwrite\macscribble - \def\scantokens#1{% - \toks0={#1}% - \immediate\openout\macscribble=\jobname.tmp - \immediate\write\macscribble{\the\toks0}% - \immediate\closeout\macscribble - \input \jobname.tmp - } -\fi - -\def\scanmacro#1{% - \begingroup - \newlinechar`\^^M - \let\xeatspaces\eatspaces - % Undo catcode changes of \startcontents and \doprintindex - % When called from @insertcopying or (short)caption, we need active - % backslash to get it printed correctly. Previously, we had - % \catcode`\\=\other instead. We'll see whether a problem appears - % with macro expansion. --kasal, 19aug04 - \catcode`\@=0 \catcode`\\=\active \escapechar=`\@ - % ... and \example - \spaceisspace - % - % Append \endinput to make sure that TeX does not see the ending newline. - % - % I've verified that it is necessary both for e-TeX and for ordinary TeX - % --kasal, 29nov03 - \scantokens{#1\endinput}% - \endgroup -} - -\def\scanexp#1{% - \edef\temp{\noexpand\scanmacro{#1}}% - \temp -} - -\newcount\paramno % Count of parameters -\newtoks\macname % Macro name -\newif\ifrecursive % Is it recursive? -\def\macrolist{} % List of all defined macros in the form - % \do\macro1\do\macro2... - -% Utility routines. -% This does \let #1 = #2, with \csnames; that is, -% \let \csname#1\endcsname = \csname#2\endcsname -% (except of course we have to play expansion games). -% -\def\cslet#1#2{% - \expandafter\let - \csname#1\expandafter\endcsname - \csname#2\endcsname -} - -% Trim leading and trailing spaces off a string. -% Concepts from aro-bend problem 15 (see CTAN). -{\catcode`\@=11 -\gdef\eatspaces #1{\expandafter\trim@\expandafter{#1 }} -\gdef\trim@ #1{\trim@@ @#1 @ #1 @ @@} -\gdef\trim@@ #1@ #2@ #3@@{\trim@@@\empty #2 @} -\def\unbrace#1{#1} -\unbrace{\gdef\trim@@@ #1 } #2@{#1} -} - -% Trim a single trailing ^^M off a string. -{\catcode`\^^M=\other \catcode`\Q=3% -\gdef\eatcr #1{\eatcra #1Q^^MQ}% -\gdef\eatcra#1^^MQ{\eatcrb#1Q}% -\gdef\eatcrb#1Q#2Q{#1}% -} - -% Macro bodies are absorbed as an argument in a context where -% all characters are catcode 10, 11 or 12, except \ which is active -% (as in normal texinfo). It is necessary to change the definition of \. - -% It's necessary to have hard CRs when the macro is executed. This is -% done by making ^^M (\endlinechar) catcode 12 when reading the macro -% body, and then making it the \newlinechar in \scanmacro. - -\def\scanctxt{% - \catcode`\"=\other - \catcode`\+=\other - \catcode`\<=\other - \catcode`\>=\other - \catcode`\@=\other - \catcode`\^=\other - \catcode`\_=\other - \catcode`\|=\other - \catcode`\~=\other -} - -\def\scanargctxt{% - \scanctxt - \catcode`\\=\other - \catcode`\^^M=\other -} - -\def\macrobodyctxt{% - \scanctxt - \catcode`\{=\other - \catcode`\}=\other - \catcode`\^^M=\other - \usembodybackslash -} - -\def\macroargctxt{% - \scanctxt - \catcode`\\=\other -} - -% \mbodybackslash is the definition of \ in @macro bodies. -% It maps \foo\ => \csname macarg.foo\endcsname => #N -% where N is the macro parameter number. -% We define \csname macarg.\endcsname to be \realbackslash, so -% \\ in macro replacement text gets you a backslash. - -{\catcode`@=0 @catcode`@\=@active - @gdef@usembodybackslash{@let\=@mbodybackslash} - @gdef@mbodybackslash#1\{@csname macarg.#1@endcsname} -} -\expandafter\def\csname macarg.\endcsname{\realbackslash} - -\def\macro{\recursivefalse\parsearg\macroxxx} -\def\rmacro{\recursivetrue\parsearg\macroxxx} - -\def\macroxxx#1{% - \getargs{#1}% now \macname is the macname and \argl the arglist - \ifx\argl\empty % no arguments - \paramno=0% - \else - \expandafter\parsemargdef \argl;% - \fi - \if1\csname ismacro.\the\macname\endcsname - \message{Warning: redefining \the\macname}% - \else - \expandafter\ifx\csname \the\macname\endcsname \relax - \else \errmessage{Macro name \the\macname\space already defined}\fi - \global\cslet{macsave.\the\macname}{\the\macname}% - \global\expandafter\let\csname ismacro.\the\macname\endcsname=1% - % Add the macroname to \macrolist - \toks0 = \expandafter{\macrolist\do}% - \xdef\macrolist{\the\toks0 - \expandafter\noexpand\csname\the\macname\endcsname}% - \fi - \begingroup \macrobodyctxt - \ifrecursive \expandafter\parsermacbody - \else \expandafter\parsemacbody - \fi} - -\parseargdef\unmacro{% - \if1\csname ismacro.#1\endcsname - \global\cslet{#1}{macsave.#1}% - \global\expandafter\let \csname ismacro.#1\endcsname=0% - % Remove the macro name from \macrolist: - \begingroup - \expandafter\let\csname#1\endcsname \relax - \let\do\unmacrodo - \xdef\macrolist{\macrolist}% - \endgroup - \else - \errmessage{Macro #1 not defined}% - \fi -} - -% Called by \do from \dounmacro on each macro. The idea is to omit any -% macro definitions that have been changed to \relax. -% -\def\unmacrodo#1{% - \ifx#1\relax - % remove this - \else - \noexpand\do \noexpand #1% - \fi -} - -% This makes use of the obscure feature that if the last token of a -% is #, then the preceding argument is delimited by -% an opening brace, and that opening brace is not consumed. -\def\getargs#1{\getargsxxx#1{}} -\def\getargsxxx#1#{\getmacname #1 \relax\getmacargs} -\def\getmacname #1 #2\relax{\macname={#1}} -\def\getmacargs#1{\def\argl{#1}} - -% Parse the optional {params} list. Set up \paramno and \paramlist -% so \defmacro knows what to do. Define \macarg.blah for each blah -% in the params list, to be ##N where N is the position in that list. -% That gets used by \mbodybackslash (above). - -% We need to get `macro parameter char #' into several definitions. -% The technique used is stolen from LaTeX: let \hash be something -% unexpandable, insert that wherever you need a #, and then redefine -% it to # just before using the token list produced. -% -% The same technique is used to protect \eatspaces till just before -% the macro is used. - -\def\parsemargdef#1;{\paramno=0\def\paramlist{}% - \let\hash\relax\let\xeatspaces\relax\parsemargdefxxx#1,;,} -\def\parsemargdefxxx#1,{% - \if#1;\let\next=\relax - \else \let\next=\parsemargdefxxx - \advance\paramno by 1% - \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname - {\xeatspaces{\hash\the\paramno}}% - \edef\paramlist{\paramlist\hash\the\paramno,}% - \fi\next} - -% These two commands read recursive and nonrecursive macro bodies. -% (They're different since rec and nonrec macros end differently.) - -\long\def\parsemacbody#1@end macro% -{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% -\long\def\parsermacbody#1@end rmacro% -{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% - -% This defines the macro itself. There are six cases: recursive and -% nonrecursive macros of zero, one, and many arguments. -% Much magic with \expandafter here. -% \xdef is used so that macro definitions will survive the file -% they're defined in; @include reads the file inside a group. -\def\defmacro{% - \let\hash=##% convert placeholders to macro parameter chars - \ifrecursive - \ifcase\paramno - % 0 - \expandafter\xdef\csname\the\macname\endcsname{% - \noexpand\scanmacro{\temp}}% - \or % 1 - \expandafter\xdef\csname\the\macname\endcsname{% - \bgroup\noexpand\macroargctxt - \noexpand\braceorline - \expandafter\noexpand\csname\the\macname xxx\endcsname}% - \expandafter\xdef\csname\the\macname xxx\endcsname##1{% - \egroup\noexpand\scanmacro{\temp}}% - \else % many - \expandafter\xdef\csname\the\macname\endcsname{% - \bgroup\noexpand\macroargctxt - \noexpand\csname\the\macname xx\endcsname}% - \expandafter\xdef\csname\the\macname xx\endcsname##1{% - \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}% - \expandafter\expandafter - \expandafter\xdef - \expandafter\expandafter - \csname\the\macname xxx\endcsname - \paramlist{\egroup\noexpand\scanmacro{\temp}}% - \fi - \else - \ifcase\paramno - % 0 - \expandafter\xdef\csname\the\macname\endcsname{% - \noexpand\norecurse{\the\macname}% - \noexpand\scanmacro{\temp}\egroup}% - \or % 1 - \expandafter\xdef\csname\the\macname\endcsname{% - \bgroup\noexpand\macroargctxt - \noexpand\braceorline - \expandafter\noexpand\csname\the\macname xxx\endcsname}% - \expandafter\xdef\csname\the\macname xxx\endcsname##1{% - \egroup - \noexpand\norecurse{\the\macname}% - \noexpand\scanmacro{\temp}\egroup}% - \else % many - \expandafter\xdef\csname\the\macname\endcsname{% - \bgroup\noexpand\macroargctxt - \expandafter\noexpand\csname\the\macname xx\endcsname}% - \expandafter\xdef\csname\the\macname xx\endcsname##1{% - \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}% - \expandafter\expandafter - \expandafter\xdef - \expandafter\expandafter - \csname\the\macname xxx\endcsname - \paramlist{% - \egroup - \noexpand\norecurse{\the\macname}% - \noexpand\scanmacro{\temp}\egroup}% - \fi - \fi} - -\def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}} - -% \braceorline decides whether the next nonwhitespace character is a -% {. If so it reads up to the closing }, if not, it reads the whole -% line. Whatever was read is then fed to the next control sequence -% as an argument (by \parsebrace or \parsearg) -\def\braceorline#1{\let\next=#1\futurelet\nchar\braceorlinexxx} -\def\braceorlinexxx{% - \ifx\nchar\bgroup\else - \expandafter\parsearg - \fi \next} - -% We want to disable all macros during \shipout so that they are not -% expanded by \write. -\def\turnoffmacros{\begingroup \def\do##1{\let\noexpand##1=\relax}% - \edef\next{\macrolist}\expandafter\endgroup\next} - -% For \indexnofonts, we need to get rid of all macros, leaving only the -% arguments (if present). Of course this is not nearly correct, but it -% is the best we can do for now. makeinfo does not expand macros in the -% argument to @deffn, which ends up writing an index entry, and texindex -% isn't prepared for an index sort entry that starts with \. -% -% Since macro invocations are followed by braces, we can just redefine them -% to take a single TeX argument. The case of a macro invocation that -% goes to end-of-line is not handled. -% -\def\emptyusermacros{\begingroup - \def\do##1{\let\noexpand##1=\noexpand\asis}% - \edef\next{\macrolist}\expandafter\endgroup\next} - - -% @alias. -% We need some trickery to remove the optional spaces around the equal -% sign. Just make them active and then expand them all to nothing. -\def\alias{\parseargusing\obeyspaces\aliasxxx} -\def\aliasxxx #1{\aliasyyy#1\relax} -\def\aliasyyy #1=#2\relax{% - {% - \expandafter\let\obeyedspace=\empty - \xdef\next{\global\let\makecsname{#1}=\makecsname{#2}}% - }% - \next -} - - -\message{cross references,} - -\newwrite\auxfile - -\newif\ifhavexrefs % True if xref values are known. -\newif\ifwarnedxrefs % True if we warned once that they aren't known. - -% @inforef is relatively simple. -\def\inforef #1{\inforefzzz #1,,,,**} -\def\inforefzzz #1,#2,#3,#4**{\putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}}, - node \samp{\ignorespaces#1{}}} - -% @node's only job in TeX is to define \lastnode, which is used in -% cross-references. The @node line might or might not have commas, and -% might or might not have spaces before the first comma, like: -% @node foo , bar , ... -% We don't want such trailing spaces in the node name. -% -\parseargdef\node{\checkenv{}\donode #1 ,\finishnodeparse} -% -% also remove a trailing comma, in case of something like this: -% @node Help-Cross, , , Cross-refs -\def\donode#1 ,#2\finishnodeparse{\dodonode #1,\finishnodeparse} -\def\dodonode#1,#2\finishnodeparse{\gdef\lastnode{#1}} - -\let\nwnode=\node -\let\lastnode=\empty - -% Write a cross-reference definition for the current node. #1 is the -% type (Ynumbered, Yappendix, Ynothing). -% -\def\donoderef#1{% - \ifx\lastnode\empty\else - \setref{\lastnode}{#1}% - \global\let\lastnode=\empty - \fi -} - -% @anchor{NAME} -- define xref target at arbitrary point. -% -\newcount\savesfregister -% -\def\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi} -\def\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi} -\def\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces} - -% \setref{NAME}{SNT} defines a cross-reference point NAME (a node or an -% anchor), which consists of three parts: -% 1) NAME-title - the current sectioning name taken from \thissection, -% or the anchor name. -% 2) NAME-snt - section number and type, passed as the SNT arg, or -% empty for anchors. -% 3) NAME-pg - the page number. -% -% This is called from \donoderef, \anchor, and \dofloat. In the case of -% floats, there is an additional part, which is not written here: -% 4) NAME-lof - the text as it should appear in a @listoffloats. -% -\def\setref#1#2{% - \pdfmkdest{#1}% - \iflinks - {% - \atdummies % preserve commands, but don't expand them - \turnoffactive - \otherbackslash - \edef\writexrdef##1##2{% - \write\auxfile{@xrdef{#1-% #1 of \setref, expanded by the \edef - ##1}{##2}}% these are parameters of \writexrdef - }% - \toks0 = \expandafter{\thissection}% - \immediate \writexrdef{title}{\the\toks0 }% - \immediate \writexrdef{snt}{\csname #2\endcsname}% \Ynumbered etc. - \writexrdef{pg}{\folio}% will be written later, during \shipout - }% - \fi -} - -% @xref, @pxref, and @ref generate cross-references. For \xrefX, #1 is -% the node name, #2 the name of the Info cross-reference, #3 the printed -% node name, #4 the name of the Info file, #5 the name of the printed -% manual. All but the node name can be omitted. -% -\def\pxref#1{\putwordsee{} \xrefX[#1,,,,,,,]} -\def\xref#1{\putwordSee{} \xrefX[#1,,,,,,,]} -\def\ref#1{\xrefX[#1,,,,,,,]} -\def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup - \unsepspaces - \def\printedmanual{\ignorespaces #5}% - \def\printedrefname{\ignorespaces #3}% - \setbox1=\hbox{\printedmanual\unskip}% - \setbox0=\hbox{\printedrefname\unskip}% - \ifdim \wd0 = 0pt - % No printed node name was explicitly given. - \expandafter\ifx\csname SETxref-automatic-section-title\endcsname\relax - % Use the node name inside the square brackets. - \def\printedrefname{\ignorespaces #1}% - \else - % Use the actual chapter/section title appear inside - % the square brackets. Use the real section title if we have it. - \ifdim \wd1 > 0pt - % It is in another manual, so we don't have it. - \def\printedrefname{\ignorespaces #1}% - \else - \ifhavexrefs - % We know the real title if we have the xref values. - \def\printedrefname{\refx{#1-title}{}}% - \else - % Otherwise just copy the Info node name. - \def\printedrefname{\ignorespaces #1}% - \fi% - \fi - \fi - \fi - % - % Make link in pdf output. - \ifpdf - \leavevmode - \getfilename{#4}% - {\turnoffactive \otherbackslash - \ifnum\filenamelength>0 - \startlink attr{/Border [0 0 0]}% - goto file{\the\filename.pdf} name{#1}% - \else - \startlink attr{/Border [0 0 0]}% - goto name{\pdfmkpgn{#1}}% - \fi - }% - \linkcolor - \fi - % - % Float references are printed completely differently: "Figure 1.2" - % instead of "[somenode], p.3". We distinguish them by the - % LABEL-title being set to a magic string. - {% - % Have to otherify everything special to allow the \csname to - % include an _ in the xref name, etc. - \indexnofonts - \turnoffactive - \otherbackslash - \expandafter\global\expandafter\let\expandafter\Xthisreftitle - \csname XR#1-title\endcsname - }% - \iffloat\Xthisreftitle - % If the user specified the print name (third arg) to the ref, - % print it instead of our usual "Figure 1.2". - \ifdim\wd0 = 0pt - \refx{#1-snt}% - \else - \printedrefname - \fi - % - % if the user also gave the printed manual name (fifth arg), append - % "in MANUALNAME". - \ifdim \wd1 > 0pt - \space \putwordin{} \cite{\printedmanual}% - \fi - \else - % node/anchor (non-float) references. - % - % If we use \unhbox0 and \unhbox1 to print the node names, TeX does not - % insert empty discretionaries after hyphens, which means that it will - % not find a line break at a hyphen in a node names. Since some manuals - % are best written with fairly long node names, containing hyphens, this - % is a loss. Therefore, we give the text of the node name again, so it - % is as if TeX is seeing it for the first time. - \ifdim \wd1 > 0pt - \putwordsection{} ``\printedrefname'' \putwordin{} \cite{\printedmanual}% - \else - % _ (for example) has to be the character _ for the purposes of the - % control sequence corresponding to the node, but it has to expand - % into the usual \leavevmode...\vrule stuff for purposes of - % printing. So we \turnoffactive for the \refx-snt, back on for the - % printing, back off for the \refx-pg. - {\turnoffactive \otherbackslash - % Only output a following space if the -snt ref is nonempty; for - % @unnumbered and @anchor, it won't be. - \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}% - \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi - }% - % output the `[mynode]' via a macro so it can be overridden. - \xrefprintnodename\printedrefname - % - % But we always want a comma and a space: - ,\space - % - % output the `page 3'. - \turnoffactive \otherbackslash \putwordpage\tie\refx{#1-pg}{}% - \fi - \fi - \endlink -\endgroup} - -% This macro is called from \xrefX for the `[nodename]' part of xref -% output. It's a separate macro only so it can be changed more easily, -% since square brackets don't work well in some documents. Particularly -% one that Bob is working on :). -% -\def\xrefprintnodename#1{[#1]} - -% Things referred to by \setref. -% -\def\Ynothing{} -\def\Yomitfromtoc{} -\def\Ynumbered{% - \ifnum\secno=0 - \putwordChapter@tie \the\chapno - \else \ifnum\subsecno=0 - \putwordSection@tie \the\chapno.\the\secno - \else \ifnum\subsubsecno=0 - \putwordSection@tie \the\chapno.\the\secno.\the\subsecno - \else - \putwordSection@tie \the\chapno.\the\secno.\the\subsecno.\the\subsubsecno - \fi\fi\fi -} -\def\Yappendix{% - \ifnum\secno=0 - \putwordAppendix@tie @char\the\appendixno{}% - \else \ifnum\subsecno=0 - \putwordSection@tie @char\the\appendixno.\the\secno - \else \ifnum\subsubsecno=0 - \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno - \else - \putwordSection@tie - @char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno - \fi\fi\fi -} - -% Define \refx{NAME}{SUFFIX} to reference a cross-reference string named NAME. -% If its value is nonempty, SUFFIX is output afterward. -% -\def\refx#1#2{% - {% - \indexnofonts - \otherbackslash - \expandafter\global\expandafter\let\expandafter\thisrefX - \csname XR#1\endcsname - }% - \ifx\thisrefX\relax - % If not defined, say something at least. - \angleleft un\-de\-fined\angleright - \iflinks - \ifhavexrefs - \message{\linenumber Undefined cross reference `#1'.}% - \else - \ifwarnedxrefs\else - \global\warnedxrefstrue - \message{Cross reference values unknown; you must run TeX again.}% - \fi - \fi - \fi - \else - % It's defined, so just use it. - \thisrefX - \fi - #2% Output the suffix in any case. -} - -% This is the macro invoked by entries in the aux file. Usually it's -% just a \def (we prepend XR to the control sequence name to avoid -% collisions). But if this is a float type, we have more work to do. -% -\def\xrdef#1#2{% - \expandafter\gdef\csname XR#1\endcsname{#2}% remember this xref value. - % - % Was that xref control sequence that we just defined for a float? - \expandafter\iffloat\csname XR#1\endcsname - % it was a float, and we have the (safe) float type in \iffloattype. - \expandafter\let\expandafter\floatlist - \csname floatlist\iffloattype\endcsname - % - % Is this the first time we've seen this float type? - \expandafter\ifx\floatlist\relax - \toks0 = {\do}% yes, so just \do - \else - % had it before, so preserve previous elements in list. - \toks0 = \expandafter{\floatlist\do}% - \fi - % - % Remember this xref in the control sequence \floatlistFLOATTYPE, - % for later use in \listoffloats. - \expandafter\xdef\csname floatlist\iffloattype\endcsname{\the\toks0{#1}}% - \fi -} - -% Read the last existing aux file, if any. No error if none exists. -% -\def\tryauxfile{% - \openin 1 \jobname.aux - \ifeof 1 \else - \readauxfile - \global\havexrefstrue - \fi - \closein 1 -} - -\def\readauxfile{\begingroup - \catcode`\^^@=\other - \catcode`\^^A=\other - \catcode`\^^B=\other - \catcode`\^^C=\other - \catcode`\^^D=\other - \catcode`\^^E=\other - \catcode`\^^F=\other - \catcode`\^^G=\other - \catcode`\^^H=\other - \catcode`\^^K=\other - \catcode`\^^L=\other - \catcode`\^^N=\other - \catcode`\^^P=\other - \catcode`\^^Q=\other - \catcode`\^^R=\other - \catcode`\^^S=\other - \catcode`\^^T=\other - \catcode`\^^U=\other - \catcode`\^^V=\other - \catcode`\^^W=\other - \catcode`\^^X=\other - \catcode`\^^Z=\other - \catcode`\^^[=\other - \catcode`\^^\=\other - \catcode`\^^]=\other - \catcode`\^^^=\other - \catcode`\^^_=\other - % It was suggested to set the catcode of ^ to 7, which would allow ^^e4 etc. - % in xref tags, i.e., node names. But since ^^e4 notation isn't - % supported in the main text, it doesn't seem desirable. Furthermore, - % that is not enough: for node names that actually contain a ^ - % character, we would end up writing a line like this: 'xrdef {'hat - % b-title}{'hat b} and \xrdef does a \csname...\endcsname on the first - % argument, and \hat is not an expandable control sequence. It could - % all be worked out, but why? Either we support ^^ or we don't. - % - % The other change necessary for this was to define \auxhat: - % \def\auxhat{\def^{'hat }}% extra space so ok if followed by letter - % and then to call \auxhat in \setq. - % - \catcode`\^=\other - % - % Special characters. Should be turned off anyway, but... - \catcode`\~=\other - \catcode`\[=\other - \catcode`\]=\other - \catcode`\"=\other - \catcode`\_=\other - \catcode`\|=\other - \catcode`\<=\other - \catcode`\>=\other - \catcode`\$=\other - \catcode`\#=\other - \catcode`\&=\other - \catcode`\%=\other - \catcode`+=\other % avoid \+ for paranoia even though we've turned it off - % - % This is to support \ in node names and titles, since the \ - % characters end up in a \csname. It's easier than - % leaving it active and making its active definition an actual \ - % character. What I don't understand is why it works in the *value* - % of the xrdef. Seems like it should be a catcode12 \, and that - % should not typeset properly. But it works, so I'm moving on for - % now. --karl, 15jan04. - \catcode`\\=\other - % - % Make the characters 128-255 be printing characters. - {% - \count 1=128 - \def\loop{% - \catcode\count 1=\other - \advance\count 1 by 1 - \ifnum \count 1<256 \loop \fi - }% - }% - % - % @ is our escape character in .aux files, and we need braces. - \catcode`\{=1 - \catcode`\}=2 - \catcode`\@=0 - % - \input \jobname.aux -\endgroup} - - -\message{insertions,} -% including footnotes. - -\newcount \footnoteno - -% The trailing space in the following definition for supereject is -% vital for proper filling; pages come out unaligned when you do a -% pagealignmacro call if that space before the closing brace is -% removed. (Generally, numeric constants should always be followed by a -% space to prevent strange expansion errors.) -\def\supereject{\par\penalty -20000\footnoteno =0 } - -% @footnotestyle is meaningful for info output only. -\let\footnotestyle=\comment - -{\catcode `\@=11 -% -% Auto-number footnotes. Otherwise like plain. -\gdef\footnote{% - \let\indent=\ptexindent - \let\noindent=\ptexnoindent - \global\advance\footnoteno by \@ne - \edef\thisfootno{$^{\the\footnoteno}$}% - % - % In case the footnote comes at the end of a sentence, preserve the - % extra spacing after we do the footnote number. - \let\@sf\empty - \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\ptexslash\fi - % - % Remove inadvertent blank space before typesetting the footnote number. - \unskip - \thisfootno\@sf - \dofootnote -}% - -% Don't bother with the trickery in plain.tex to not require the -% footnote text as a parameter. Our footnotes don't need to be so general. -% -% Oh yes, they do; otherwise, @ifset (and anything else that uses -% \parseargline) fails inside footnotes because the tokens are fixed when -% the footnote is read. --karl, 16nov96. -% -\gdef\dofootnote{% - \insert\footins\bgroup - % We want to typeset this text as a normal paragraph, even if the - % footnote reference occurs in (for example) a display environment. - % So reset some parameters. - \hsize=\pagewidth - \interlinepenalty\interfootnotelinepenalty - \splittopskip\ht\strutbox % top baseline for broken footnotes - \splitmaxdepth\dp\strutbox - \floatingpenalty\@MM - \leftskip\z@skip - \rightskip\z@skip - \spaceskip\z@skip - \xspaceskip\z@skip - \parindent\defaultparindent - % - \smallfonts \rm - % - % Because we use hanging indentation in footnotes, a @noindent appears - % to exdent this text, so make it be a no-op. makeinfo does not use - % hanging indentation so @noindent can still be needed within footnote - % text after an @example or the like (not that this is good style). - \let\noindent = \relax - % - % Hang the footnote text off the number. Use \everypar in case the - % footnote extends for more than one paragraph. - \everypar = {\hang}% - \textindent{\thisfootno}% - % - % Don't crash into the line above the footnote text. Since this - % expands into a box, it must come within the paragraph, lest it - % provide a place where TeX can split the footnote. - \footstrut - \futurelet\next\fo@t -} -}%end \catcode `\@=11 - -% In case a @footnote appears in a vbox, save the footnote text and create -% the real \insert just after the vbox finished. Otherwise, the insertion -% would be lost. -% Similarily, if a @footnote appears inside an alignment, save the footnote -% text to a box and make the \insert when a row of the table is finished. -% And the same can be done for other insert classes. --kasal, 16nov03. - -% Replace the \insert primitive by a cheating macro. -% Deeper inside, just make sure that the saved insertions are not spilled -% out prematurely. -% -\def\startsavinginserts{% - \ifx \insert\ptexinsert - \let\insert\saveinsert - \else - \let\checkinserts\relax - \fi -} - -% This \insert replacement works for both \insert\footins{foo} and -% \insert\footins\bgroup foo\egroup, but it doesn't work for \insert27{foo}. -% -\def\saveinsert#1{% - \edef\next{\noexpand\savetobox \makeSAVEname#1}% - \afterassignment\next - % swallow the left brace - \let\temp = -} -\def\makeSAVEname#1{\makecsname{SAVE\expandafter\gobble\string#1}} -\def\savetobox#1{\global\setbox#1 = \vbox\bgroup \unvbox#1} - -\def\checksaveins#1{\ifvoid#1\else \placesaveins#1\fi} - -\def\placesaveins#1{% - \ptexinsert \csname\expandafter\gobblesave\string#1\endcsname - {\box#1}% -} - -% eat @SAVE -- beware, all of them have catcode \other: -{ - \def\dospecials{\do S\do A\do V\do E} \uncatcodespecials % ;-) - \gdef\gobblesave @SAVE{} -} - -% initialization: -\def\newsaveins #1{% - \edef\next{\noexpand\newsaveinsX \makeSAVEname#1}% - \next -} -\def\newsaveinsX #1{% - \csname newbox\endcsname #1% - \expandafter\def\expandafter\checkinserts\expandafter{\checkinserts - \checksaveins #1}% -} - -% initialize: -\let\checkinserts\empty -\newsaveins\footins -\newsaveins\margin - - -% @image. We use the macros from epsf.tex to support this. -% If epsf.tex is not installed and @image is used, we complain. -% -% Check for and read epsf.tex up front. If we read it only at @image -% time, we might be inside a group, and then its definitions would get -% undone and the next image would fail. -\openin 1 = epsf.tex -\ifeof 1 \else - % Do not bother showing banner with epsf.tex v2.7k (available in - % doc/epsf.tex and on ctan). - \def\epsfannounce{\toks0 = }% - \input epsf.tex -\fi -\closein 1 -% -% We will only complain once about lack of epsf.tex. -\newif\ifwarnednoepsf -\newhelp\noepsfhelp{epsf.tex must be installed for images to - work. It is also included in the Texinfo distribution, or you can get - it from ftp://tug.org/tex/epsf.tex.} -% -\def\image#1{% - \ifx\epsfbox\undefined - \ifwarnednoepsf \else - \errhelp = \noepsfhelp - \errmessage{epsf.tex not found, images will be ignored}% - \global\warnednoepsftrue - \fi - \else - \imagexxx #1,,,,,\finish - \fi -} -% -% Arguments to @image: -% #1 is (mandatory) image filename; we tack on .eps extension. -% #2 is (optional) width, #3 is (optional) height. -% #4 is (ignored optional) html alt text. -% #5 is (ignored optional) extension. -% #6 is just the usual extra ignored arg for parsing this stuff. -\newif\ifimagevmode -\def\imagexxx#1,#2,#3,#4,#5,#6\finish{\begingroup - \catcode`\^^M = 5 % in case we're inside an example - \normalturnoffactive % allow _ et al. in names - % If the image is by itself, center it. - \ifvmode - \imagevmodetrue - \nobreak\bigskip - % Usually we'll have text after the image which will insert - % \parskip glue, so insert it here too to equalize the space - % above and below. - \nobreak\vskip\parskip - \nobreak - \line\bgroup\hss - \fi - % - % Output the image. - \ifpdf - \dopdfimage{#1}{#2}{#3}% - \else - % \epsfbox itself resets \epsf?size at each figure. - \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi - \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi - \epsfbox{#1.eps}% - \fi - % - \ifimagevmode \hss \egroup \bigbreak \fi % space after the image -\endgroup} - - -% @float FLOATTYPE,LABEL,LOC ... @end float for displayed figures, tables, -% etc. We don't actually implement floating yet, we always include the -% float "here". But it seemed the best name for the future. -% -\envparseargdef\float{\eatcommaspace\eatcommaspace\dofloat#1, , ,\finish} - -% There may be a space before second and/or third parameter; delete it. -\def\eatcommaspace#1, {#1,} - -% #1 is the optional FLOATTYPE, the text label for this float, typically -% "Figure", "Table", "Example", etc. Can't contain commas. If omitted, -% this float will not be numbered and cannot be referred to. -% -% #2 is the optional xref label. Also must be present for the float to -% be referable. -% -% #3 is the optional positioning argument; for now, it is ignored. It -% will somehow specify the positions allowed to float to (here, top, bottom). -% -% We keep a separate counter for each FLOATTYPE, which we reset at each -% chapter-level command. -\let\resetallfloatnos=\empty -% -\def\dofloat#1,#2,#3,#4\finish{% - \let\thiscaption=\empty - \let\thisshortcaption=\empty - % - % don't lose footnotes inside @float. - % - % BEWARE: when the floats start float, we have to issue warning whenever an - % insert appears inside a float which could possibly float. --kasal, 26may04 - % - \startsavinginserts - % - % We can't be used inside a paragraph. - \par - % - \vtop\bgroup - \def\floattype{#1}% - \def\floatlabel{#2}% - \def\floatloc{#3}% we do nothing with this yet. - % - \ifx\floattype\empty - \let\safefloattype=\empty - \else - {% - % the floattype might have accents or other special characters, - % but we need to use it in a control sequence name. - \indexnofonts - \turnoffactive - \xdef\safefloattype{\floattype}% - }% - \fi - % - % If label is given but no type, we handle that as the empty type. - \ifx\floatlabel\empty \else - % We want each FLOATTYPE to be numbered separately (Figure 1, - % Table 1, Figure 2, ...). (And if no label, no number.) - % - \expandafter\getfloatno\csname\safefloattype floatno\endcsname - \global\advance\floatno by 1 - % - {% - % This magic value for \thissection is output by \setref as the - % XREFLABEL-title value. \xrefX uses it to distinguish float - % labels (which have a completely different output format) from - % node and anchor labels. And \xrdef uses it to construct the - % lists of floats. - % - \edef\thissection{\floatmagic=\safefloattype}% - \setref{\floatlabel}{Yfloat}% - }% - \fi - % - % start with \parskip glue, I guess. - \vskip\parskip - % - % Don't suppress indentation if a float happens to start a section. - \restorefirstparagraphindent -} - -% we have these possibilities: -% @float Foo,lbl & @caption{Cap}: Foo 1.1: Cap -% @float Foo,lbl & no caption: Foo 1.1 -% @float Foo & @caption{Cap}: Foo: Cap -% @float Foo & no caption: Foo -% @float ,lbl & Caption{Cap}: 1.1: Cap -% @float ,lbl & no caption: 1.1 -% @float & @caption{Cap}: Cap -% @float & no caption: -% -\def\Efloat{% - \let\floatident = \empty - % - % In all cases, if we have a float type, it comes first. - \ifx\floattype\empty \else \def\floatident{\floattype}\fi - % - % If we have an xref label, the number comes next. - \ifx\floatlabel\empty \else - \ifx\floattype\empty \else % if also had float type, need tie first. - \appendtomacro\floatident{\tie}% - \fi - % the number. - \appendtomacro\floatident{\chaplevelprefix\the\floatno}% - \fi - % - % Start the printed caption with what we've constructed in - % \floatident, but keep it separate; we need \floatident again. - \let\captionline = \floatident - % - \ifx\thiscaption\empty \else - \ifx\floatident\empty \else - \appendtomacro\captionline{: }% had ident, so need a colon between - \fi - % - % caption text. - \appendtomacro\captionline{\scanexp\thiscaption}% - \fi - % - % If we have anything to print, print it, with space before. - % Eventually this needs to become an \insert. - \ifx\captionline\empty \else - \vskip.5\parskip - \captionline - % - % Space below caption. - \vskip\parskip - \fi - % - % If have an xref label, write the list of floats info. Do this - % after the caption, to avoid chance of it being a breakpoint. - \ifx\floatlabel\empty \else - % Write the text that goes in the lof to the aux file as - % \floatlabel-lof. Besides \floatident, we include the short - % caption if specified, else the full caption if specified, else nothing. - {% - \atdummies \turnoffactive \otherbackslash - % since we read the caption text in the macro world, where ^^M - % is turned into a normal character, we have to scan it back, so - % we don't write the literal three characters "^^M" into the aux file. - \scanexp{% - \xdef\noexpand\gtemp{% - \ifx\thisshortcaption\empty - \thiscaption - \else - \thisshortcaption - \fi - }% - }% - \immediate\write\auxfile{@xrdef{\floatlabel-lof}{\floatident - \ifx\gtemp\empty \else : \gtemp \fi}}% - }% - \fi - \egroup % end of \vtop - % - % place the captured inserts - % - % BEWARE: when the floats start float, we have to issue warning whenever an - % insert appears inside a float which could possibly float. --kasal, 26may04 - % - \checkinserts -} - -% Append the tokens #2 to the definition of macro #1, not expanding either. -% -\def\appendtomacro#1#2{% - \expandafter\def\expandafter#1\expandafter{#1#2}% -} - -% @caption, @shortcaption -% -\def\caption{\docaption\thiscaption} -\def\shortcaption{\docaption\thisshortcaption} -\def\docaption{\checkenv\float \bgroup\scanargctxt\defcaption} -\def\defcaption#1#2{\egroup \def#1{#2}} - -% The parameter is the control sequence identifying the counter we are -% going to use. Create it if it doesn't exist and assign it to \floatno. -\def\getfloatno#1{% - \ifx#1\relax - % Haven't seen this figure type before. - \csname newcount\endcsname #1% - % - % Remember to reset this floatno at the next chap. - \expandafter\gdef\expandafter\resetallfloatnos - \expandafter{\resetallfloatnos #1=0 }% - \fi - \let\floatno#1% -} - -% \setref calls this to get the XREFLABEL-snt value. We want an @xref -% to the FLOATLABEL to expand to "Figure 3.1". We call \setref when we -% first read the @float command. -% -\def\Yfloat{\floattype@tie \chaplevelprefix\the\floatno}% - -% Magic string used for the XREFLABEL-title value, so \xrefX can -% distinguish floats from other xref types. -\def\floatmagic{!!float!!} - -% #1 is the control sequence we are passed; we expand into a conditional -% which is true if #1 represents a float ref. That is, the magic -% \thissection value which we \setref above. -% -\def\iffloat#1{\expandafter\doiffloat#1==\finish} -% -% #1 is (maybe) the \floatmagic string. If so, #2 will be the -% (safe) float type for this float. We set \iffloattype to #2. -% -\def\doiffloat#1=#2=#3\finish{% - \def\temp{#1}% - \def\iffloattype{#2}% - \ifx\temp\floatmagic -} - -% @listoffloats FLOATTYPE - print a list of floats like a table of contents. -% -\parseargdef\listoffloats{% - \def\floattype{#1}% floattype - {% - % the floattype might have accents or other special characters, - % but we need to use it in a control sequence name. - \indexnofonts - \turnoffactive - \xdef\safefloattype{\floattype}% - }% - % - % \xrdef saves the floats as a \do-list in \floatlistSAFEFLOATTYPE. - \expandafter\ifx\csname floatlist\safefloattype\endcsname \relax - \ifhavexrefs - % if the user said @listoffloats foo but never @float foo. - \message{\linenumber No `\safefloattype' floats to list.}% - \fi - \else - \begingroup - \leftskip=\tocindent % indent these entries like a toc - \let\do=\listoffloatsdo - \csname floatlist\safefloattype\endcsname - \endgroup - \fi -} - -% This is called on each entry in a list of floats. We're passed the -% xref label, in the form LABEL-title, which is how we save it in the -% aux file. We strip off the -title and look up \XRLABEL-lof, which -% has the text we're supposed to typeset here. -% -% Figures without xref labels will not be included in the list (since -% they won't appear in the aux file). -% -\def\listoffloatsdo#1{\listoffloatsdoentry#1\finish} -\def\listoffloatsdoentry#1-title\finish{{% - % Can't fully expand XR#1-lof because it can contain anything. Just - % pass the control sequence. On the other hand, XR#1-pg is just the - % page number, and we want to fully expand that so we can get a link - % in pdf output. - \toksA = \expandafter{\csname XR#1-lof\endcsname}% - % - % use the same \entry macro we use to generate the TOC and index. - \edef\writeentry{\noexpand\entry{\the\toksA}{\csname XR#1-pg\endcsname}}% - \writeentry -}} - -\message{localization,} -% and i18n. - -% @documentlanguage is usually given very early, just after -% @setfilename. If done too late, it may not override everything -% properly. Single argument is the language abbreviation. -% It would be nice if we could set up a hyphenation file here. -% -\parseargdef\documentlanguage{% - \tex % read txi-??.tex file in plain TeX. - % Read the file if it exists. - \openin 1 txi-#1.tex - \ifeof 1 - \errhelp = \nolanghelp - \errmessage{Cannot read language file txi-#1.tex}% - \else - \input txi-#1.tex - \fi - \closein 1 - \endgroup -} -\newhelp\nolanghelp{The given language definition file cannot be found or -is empty. Maybe you need to install it? In the current directory -should work if nowhere else does.} - - -% @documentencoding should change something in TeX eventually, most -% likely, but for now just recognize it. -\let\documentencoding = \comment - - -% Page size parameters. -% -\newdimen\defaultparindent \defaultparindent = 15pt - -\chapheadingskip = 15pt plus 4pt minus 2pt -\secheadingskip = 12pt plus 3pt minus 2pt -\subsecheadingskip = 9pt plus 2pt minus 2pt - -% Prevent underfull vbox error messages. -\vbadness = 10000 - -% Don't be so finicky about underfull hboxes, either. -\hbadness = 2000 - -% Following George Bush, just get rid of widows and orphans. -\widowpenalty=10000 -\clubpenalty=10000 - -% Use TeX 3.0's \emergencystretch to help line breaking, but if we're -% using an old version of TeX, don't do anything. We want the amount of -% stretch added to depend on the line length, hence the dependence on -% \hsize. We call this whenever the paper size is set. -% -\def\setemergencystretch{% - \ifx\emergencystretch\thisisundefined - % Allow us to assign to \emergencystretch anyway. - \def\emergencystretch{\dimen0}% - \else - \emergencystretch = .15\hsize - \fi -} - -% Parameters in order: 1) textheight; 2) textwidth; 3) voffset; -% 4) hoffset; 5) binding offset; 6) topskip; 7) physical page height; 8) -% physical page width. -% -% We also call \setleading{\textleading}, so the caller should define -% \textleading. The caller should also set \parskip. -% -\def\internalpagesizes#1#2#3#4#5#6#7#8{% - \voffset = #3\relax - \topskip = #6\relax - \splittopskip = \topskip - % - \vsize = #1\relax - \advance\vsize by \topskip - \outervsize = \vsize - \advance\outervsize by 2\topandbottommargin - \pageheight = \vsize - % - \hsize = #2\relax - \outerhsize = \hsize - \advance\outerhsize by 0.5in - \pagewidth = \hsize - % - \normaloffset = #4\relax - \bindingoffset = #5\relax - % - \ifpdf - \pdfpageheight #7\relax - \pdfpagewidth #8\relax - \fi - % - \setleading{\textleading} - % - \parindent = \defaultparindent - \setemergencystretch -} - -% @letterpaper (the default). -\def\letterpaper{{\globaldefs = 1 - \parskip = 3pt plus 2pt minus 1pt - \textleading = 13.2pt - % - % If page is nothing but text, make it come out even. - \internalpagesizes{46\baselineskip}{6in}% - {\voffset}{.25in}% - {\bindingoffset}{36pt}% - {11in}{8.5in}% -}} - -% Use @smallbook to reset parameters for 7x9.5 (or so) format. -\def\smallbook{{\globaldefs = 1 - \parskip = 2pt plus 1pt - \textleading = 12pt - % - \internalpagesizes{7.5in}{5in}% - {\voffset}{.25in}% - {\bindingoffset}{16pt}% - {9.25in}{7in}% - % - \lispnarrowing = 0.3in - \tolerance = 700 - \hfuzz = 1pt - \contentsrightmargin = 0pt - \defbodyindent = .5cm -}} - -% Use @afourpaper to print on European A4 paper. -\def\afourpaper{{\globaldefs = 1 - \parskip = 3pt plus 2pt minus 1pt - \textleading = 13.2pt - % - % Double-side printing via postscript on Laserjet 4050 - % prints double-sided nicely when \bindingoffset=10mm and \hoffset=-6mm. - % To change the settings for a different printer or situation, adjust - % \normaloffset until the front-side and back-side texts align. Then - % do the same for \bindingoffset. You can set these for testing in - % your texinfo source file like this: - % @tex - % \global\normaloffset = -6mm - % \global\bindingoffset = 10mm - % @end tex - \internalpagesizes{51\baselineskip}{160mm} - {\voffset}{\hoffset}% - {\bindingoffset}{44pt}% - {297mm}{210mm}% - % - \tolerance = 700 - \hfuzz = 1pt - \contentsrightmargin = 0pt - \defbodyindent = 5mm -}} - -% Use @afivepaper to print on European A5 paper. -% From romildo@urano.iceb.ufop.br, 2 July 2000. -% He also recommends making @example and @lisp be small. -\def\afivepaper{{\globaldefs = 1 - \parskip = 2pt plus 1pt minus 0.1pt - \textleading = 12.5pt - % - \internalpagesizes{160mm}{120mm}% - {\voffset}{\hoffset}% - {\bindingoffset}{8pt}% - {210mm}{148mm}% - % - \lispnarrowing = 0.2in - \tolerance = 800 - \hfuzz = 1.2pt - \contentsrightmargin = 0pt - \defbodyindent = 2mm - \tableindent = 12mm -}} - -% A specific text layout, 24x15cm overall, intended for A4 paper. -\def\afourlatex{{\globaldefs = 1 - \afourpaper - \internalpagesizes{237mm}{150mm}% - {\voffset}{4.6mm}% - {\bindingoffset}{7mm}% - {297mm}{210mm}% - % - % Must explicitly reset to 0 because we call \afourpaper. - \globaldefs = 0 -}} - -% Use @afourwide to print on A4 paper in landscape format. -\def\afourwide{{\globaldefs = 1 - \afourpaper - \internalpagesizes{241mm}{165mm}% - {\voffset}{-2.95mm}% - {\bindingoffset}{7mm}% - {297mm}{210mm}% - \globaldefs = 0 -}} - -% @pagesizes TEXTHEIGHT[,TEXTWIDTH] -% Perhaps we should allow setting the margins, \topskip, \parskip, -% and/or leading, also. Or perhaps we should compute them somehow. -% -\parseargdef\pagesizes{\pagesizesyyy #1,,\finish} -\def\pagesizesyyy#1,#2,#3\finish{{% - \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \hsize=#2\relax \fi - \globaldefs = 1 - % - \parskip = 3pt plus 2pt minus 1pt - \setleading{\textleading}% - % - \dimen0 = #1 - \advance\dimen0 by \voffset - % - \dimen2 = \hsize - \advance\dimen2 by \normaloffset - % - \internalpagesizes{#1}{\hsize}% - {\voffset}{\normaloffset}% - {\bindingoffset}{44pt}% - {\dimen0}{\dimen2}% -}} - -% Set default to letter. -% -\letterpaper - - -\message{and turning on texinfo input format.} - -% Define macros to output various characters with catcode for normal text. -\catcode`\"=\other -\catcode`\~=\other -\catcode`\^=\other -\catcode`\_=\other -\catcode`\|=\other -\catcode`\<=\other -\catcode`\>=\other -\catcode`\+=\other -\catcode`\$=\other -\def\normaldoublequote{"} -\def\normaltilde{~} -\def\normalcaret{^} -\def\normalunderscore{_} -\def\normalverticalbar{|} -\def\normalless{<} -\def\normalgreater{>} -\def\normalplus{+} -\def\normaldollar{$}%$ font-lock fix - -% This macro is used to make a character print one way in \tt -% (where it can probably be output as-is), and another way in other fonts, -% where something hairier probably needs to be done. -% -% #1 is what to print if we are indeed using \tt; #2 is what to print -% otherwise. Since all the Computer Modern typewriter fonts have zero -% interword stretch (and shrink), and it is reasonable to expect all -% typewriter fonts to have this, we can check that font parameter. -% -\def\ifusingtt#1#2{\ifdim \fontdimen3\font=0pt #1\else #2\fi} - -% Same as above, but check for italic font. Actually this also catches -% non-italic slanted fonts since it is impossible to distinguish them from -% italic fonts. But since this is only used by $ and it uses \sl anyway -% this is not a problem. -\def\ifusingit#1#2{\ifdim \fontdimen1\font>0pt #1\else #2\fi} - -% Turn off all special characters except @ -% (and those which the user can use as if they were ordinary). -% Most of these we simply print from the \tt font, but for some, we can -% use math or other variants that look better in normal text. - -\catcode`\"=\active -\def\activedoublequote{{\tt\char34}} -\let"=\activedoublequote -\catcode`\~=\active -\def~{{\tt\char126}} -\chardef\hat=`\^ -\catcode`\^=\active -\def^{{\tt \hat}} - -\catcode`\_=\active -\def_{\ifusingtt\normalunderscore\_} -% Subroutine for the previous macro. -\def\_{\leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em } - -\catcode`\|=\active -\def|{{\tt\char124}} -\chardef \less=`\< -\catcode`\<=\active -\def<{{\tt \less}} -\chardef \gtr=`\> -\catcode`\>=\active -\def>{{\tt \gtr}} -\catcode`\+=\active -\def+{{\tt \char 43}} -\catcode`\$=\active -\def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix - -% If a .fmt file is being used, characters that might appear in a file -% name cannot be active until we have parsed the command line. -% So turn them off again, and have \everyjob (or @setfilename) turn them on. -% \otherifyactive is called near the end of this file. -\def\otherifyactive{\catcode`+=\other \catcode`\_=\other} - -\catcode`\@=0 - -% \backslashcurfont outputs one backslash character in current font, -% as in \char`\\. -\global\chardef\backslashcurfont=`\\ -\global\let\rawbackslashxx=\backslashcurfont % let existing .??s files work - -% \rawbackslash defines an active \ to do \backslashcurfont. -% \otherbackslash defines an active \ to be a literal `\' character with -% catcode other. -{\catcode`\\=\active - @gdef@rawbackslash{@let\=@backslashcurfont} - @gdef@otherbackslash{@let\=@realbackslash} -} - -% \realbackslash is an actual character `\' with catcode other. -{\catcode`\\=\other @gdef@realbackslash{\}} - -% \normalbackslash outputs one backslash in fixed width font. -\def\normalbackslash{{\tt\backslashcurfont}} - -\catcode`\\=\active - -% Used sometimes to turn off (effectively) the active characters -% even after parsing them. -@def@turnoffactive{% - @let"=@normaldoublequote - @let\=@realbackslash - @let~=@normaltilde - @let^=@normalcaret - @let_=@normalunderscore - @let|=@normalverticalbar - @let<=@normalless - @let>=@normalgreater - @let+=@normalplus - @let$=@normaldollar %$ font-lock fix - @unsepspaces -} - -% Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of -% the literal character `\'. (Thus, \ is not expandable when this is in -% effect.) -% -@def@normalturnoffactive{@turnoffactive @let\=@normalbackslash} - -% Make _ and + \other characters, temporarily. -% This is canceled by @fixbackslash. -@otherifyactive - -% If a .fmt file is being used, we don't want the `\input texinfo' to show up. -% That is what \eatinput is for; after that, the `\' should revert to printing -% a backslash. -% -@gdef@eatinput input texinfo{@fixbackslash} -@global@let\ = @eatinput - -% On the other hand, perhaps the file did not have a `\input texinfo'. Then -% the first `\{ in the file would cause an error. This macro tries to fix -% that, assuming it is called before the first `\' could plausibly occur. -% Also back turn on active characters that might appear in the input -% file name, in case not using a pre-dumped format. -% -@gdef@fixbackslash{% - @ifx\@eatinput @let\ = @normalbackslash @fi - @catcode`+=@active - @catcode`@_=@active -} - -% Say @foo, not \foo, in error messages. -@escapechar = `@@ - -% These look ok in all fonts, so just make them not special. -@catcode`@& = @other -@catcode`@# = @other -@catcode`@% = @other - - -@c Local variables: -@c eval: (add-hook 'write-file-hooks 'time-stamp) -@c page-delimiter: "^\\\\message" -@c time-stamp-start: "def\\\\texinfoversion{" -@c time-stamp-format: "%:y-%02m-%02d.%02H" -@c time-stamp-end: "}" -@c End: - -@c vim:sw=2: - -@ignore - arch-tag: e1b36e32-c96e-4135-a41a-0b2efa2ea115 -@end ignore Index: trunk/doc/pcb.texi =================================================================== --- trunk/doc/pcb.texi (revision 1036) +++ trunk/doc/pcb.texi (nonexistent) @@ -1,5829 +0,0 @@ -\input texinfo @c -*-texinfo-*- -@comment RCS: $Id$ -@comment %**start of header -@setfilename pcb.info -@settitle Pcb -@setcontentsaftertitlepage -@macro pcb{} -@code{Pcb} -@end macro -@comment %**end of header - -@include version.texi - -@ifinfo -@format -INFO-DIR-SECTION Miscellaneous -START-INFO-DIR-ENTRY -* pcb: (pcb). An interactive printed circuit board editor. -END-INFO-DIR-ENTRY -@end format -@end ifinfo - -@iftex -@finalout -@end iftex - -@ifinfo -This file documents how to use Pcb, -the open source, interactive printed circuit board layout system. - -Copyright (C) 1994,1995,1996, 2004 Thomas Nau - -Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 harry eaton - -Copyright (C) 2003, 2004, 2005, 2006, 2007, 2009 Dan McMahill - -Copyright (C) 2004 DJ Delorie - -This program is free software; you may redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANT-ABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -@b{GNU General Public License} for more details. - -@end ifinfo - -@setchapternewpage on -@headings single - -@titlepage -@title Pcb-@value{VERSION} -@subtitle an open source, interactive -@subtitle printed circuit board -@subtitle layout system -@author harry eaton -@end titlepage - -@ifnottex -@node Top -@top Pcb - -This document is a manual for @pcb{}, the open source, interactive printed circuit -board layout system. -@end ifnottex - -@menu -* Copying:: @pcb{} is freely redistributable! -* History:: How it all began. -* Overview:: An overview of @pcb{}. -* Intro:: A short description of the basic objects. -* Getting Started:: Introduction to @pcb{}. -* Autorouter:: Using the autorouter. -* User Commands:: User commands of @pcb{}. -* Command-Line Options:: Calling @pcb{} from a shell. -* X11 Interface:: Action routines, resources and default translation. -* File Formats:: Description of @code{ASCII} files used by @pcb{}. -* Library Creation:: Detailed description of symbol library creation. -* Schematic Frontends:: Schematic capture programs that work with PCB. -* Installation:: Compiling, installing and troubleshooting. -* Custom Menus:: Customizing the menu bar. -* Regular Expressions:: Searching for elements with regular expressions -* Standard Drill Sizes:: Tables of standard drill sizes -* Centroid File Format:: Details of the centroid (x-y) output file -* Action Reference:: Documentation for all available actions -* Glossary:: Glossary -* Index:: The Index. -@end menu - -@c --------------------------------------------------------------------- -@node Copying -@unnumbered Copying - -Copyright @copyright{} 1994,1995,1996,1997 Thomas Nau - -Copyright @copyright{} 1998,1999,2000,2001,2002 harry eaton - -This program is free software; you may redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANT-ABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -@b{GNU General Public License} for more details. - - -@c --------------------------- chapter 0 ------------------------------- -@node History -@unnumbered History - -@cindex Atari version -@pcb{} is a handy tool for laying out printed circuit -boards. - -@pcb{} was first written by Thomas Nau for an Atari ST in 1990 and -ported to @code{UNIX} and @code{X11} in 1994. -It was not intended as a professional layout system, -but as a tool which supports people who do some -home-developing of hardware. - -The second release 1.2 included menus for the first time. This made -@pcb{} easier to use and thus a more important tool. - -Release 1.3 introduced undo for highly-destructive commands, -more straightforward action handling and scalable fonts. Layer-groups -were introduced to group signal-layers together. - -Release 1.4 provided support for add-on device drivers. -Two layers (the solder and the component side) -were added to support SMD elements. The handling of libraries -was also improved in 1.4.1. Support for additional devices like -GERBER plotters started in 1.4.4. The undo feature was expanded -and the redo-feature added in 1.4.5. - -harry eaton took over pcb development beginning with Release 1.5, -although he contributed some code beginning with Release 1.4.3 - -Release 1.5 provides support for rats-nest generation from simple net -lists. It also allows for automatic clearances around pins that pierce -a polygon. A variety of other enhancements including a Gerber RS-274X -driver and NC drill file generation have also been added. - -Release 1.6 provides automatic screen updates of changed regions. -This should eliminate most of the need for the redraw ((@emph{R} key). -Also some changes to what order items under the cursor are selected -were made for better consistency - it is no longer possible to -accidentally move a line or line point that is completely obscured -by a polygon laying over top of it. Larger objects on the upper -most layers can be selected ahead of smaller objects on lower layers. -These changes make operations more intuitive. A new mode of line -creation was added that creates two line on 45 degree angles -with a single click. The actual outline of the prospective line(s) are -now shown during line creation. An arc creation mode was added. -Drawn arcs are quarter circles and can be useful for high frequency -controlled impedance lines. (You can have eighth circle arc if the -source is compiled with -DARC45, but be aware that the ends of such -arcs can never intersect a grid point). Two new flags for pins and -vias were created - one indicates that the pin or via is purely a -drill hole and has no copper annulus. You can only toggle this flag -for vias - for elements, it must be an integral part of the element -definition. The other flag controls whether the pad will be round -or octagonal. There is also now a feature for converting the contents -of a buffer into an element. - -Release 1.6.1 added the ability to make groups of action commands bound to -a single X11 event to be undone by a single undo. Also a simple design rule -checker was added - it checks for minimum spacing and overlap rules. Plus -many fixes for bugs introduced with the many changes of 1.6 - -Release 1.7 added support for routing tracks through polygons without touching -them. It also added support for unplated drill files, and drawing directly -on the silk layer. A Netlist window for easily working with netlist was also added. - -Release 2.0 adds an auto-router, a new simpler library mechanism, much improved -support for graphically creating (and editing) elements, viewable solder-mask -layers (and editing), snap to pins and pads, netlist entry by drawing rats, element -files (and libraries) that can contain whole sub-layouts, metric grids, improved -user interface, a GNU autoconf/automake based build system, and a host -of other improvements. - -Special thanks goes to: -@display -Thomas Nau (who started the project and wrote the early versions). -C. Scott Ananian (who wrote the auto-router code). -Bernhard Daeubler (Bernhard.Daeubler@@physik.uni-ulm.de) -Harald Daeubler (Harald.Daeubler@@physik.uni-ulm.de) -DJ Delorie (djdelorie@@users.sourceforge.net) -Larry Doolittle (ldoolitt@@recycle.lbl.gov) -Dan McMahill (danmc@@users.sourceforge.net) -Roland Merk (merk@@faw.uni-ulm.de) -Erland Unruh (Erland.Unruh@@malmo.trab.se) -Albert John FitzPatrick III (ajf_nylorac@@acm.org) -Boerge Strand (borges@@ifi.uio.no) -Andre M. Hedrick (hedrick@@Astro.Dyer.Vanderbilt.Edu) -@end display - -@noindent -who provided all sorts of help including porting @pcb{} to -several operating systems and platforms, bug fixes, library enhancement, -user interface suggestions and more. In addition to these people, -many others donated time for bug-fixing and -other important work. Some of them can be identified in the source code -files. Thanks to all of them. If you feel left out of this list, I -apologize; please send me an e-mail and I'll try to correct the omission. - - -@c --------------------------- overview chapter ------------------------------- -@node Overview -@chapter Overview -@cindex PCB, an overview - -@pcb{} is an open source printed circuit board editor. -@pcb{} includes many professional features such as: -@itemize @bullet -@item Up to 16 copper layer designs by default. By changing a compile time setting, this -can be set as high as needed. -@item RS-274X (Gerber) output -@item NC Drill output -@item Centroid (X-Y) data output -@item Postscript and Encapsulated Postscript output -@item Autorouter -@item Trace optimizer -@item Rats nest -@item Design Rule Checker (DRC) -@item Connectivity verification -@item @pcb{} is Free Software -@item Can interoperate with free schematic capture tools such as gEDA and - xcircuit -@item Runs under Linux, NetBSD, Solaris, and other similar operating -systems. -@item Windows version is available -@end itemize - -@c --------------------------- chapter 1 ------------------------------- -@node Intro -@chapter Introduction -@cindex layout objects, an overview - -Each layout consists of several, mostly independent, objects. This chapter -gives an overview of the object types and their relationship to each other. -For a complete description of how to use @pcb{}, refer to -@ref{Getting Started}. -The layout is generated on-screen on a grid that can have its origin -at any desired location. -The X coordinate increases to the right, Y increases down to the bottom. -All distances and sizes in @pcb{} are measured in mils -(0.001 inch). One unit on the coordinate display is one mil in -distance on the board. -The grid may be set on a metric pitch, but is only correct to within -the nearest +/- 0.01 mil because @pcb{} stores all dimensions as -integer multiples of 1/100 of a mil or 0.00001 inch. - -The sections in this chapter are sorted by the -order of appearance of the objects within a layout file. - -@menu -* Symbol Objects:: Information about fonts and symbols. -* Via Objects:: Vias and pins connect layers. -* Element Objects:: Element, the basic type of circuits. -* Layer Objects:: A @samp{container} for lines, text... -* Line Objects:: Tracks on the board -* Arc Objects:: Curved tracks -* Polygon Objects:: Planes and such -* Text Objects:: Objects to add symbols to your board. -* Net Objects:: Describes the desired connections on the board. -@end menu - -@node Symbol Objects -@section Symbols -@cindex symbols, an overview -@cindex font, an overview - -The top object is the layout itself. It uses a set of symbols -that resides at the first logical level. Each symbol is uniquely identified -by a seven bit @code{ASCII} code. All layout objects share the same set of -symbols. These symbols are used to form text objects on the silkscreen -and copper layers. Undefined symbols are drawn as filled rectangles. - -Every font file is preprocessed by a user-defined command when it is loaded. -For details see @samp{fontCommand}, @ref{Resources}. - - -@node Via Objects -@section Vias -@cindex vias, an overview - -Vias provide through-hole connectivity across all layers. -While vias look a lot like element pins, don't use vias -for adding elements to the layout, even if that seems -easier than creating a new element. The default solder-mask -will cover over vias, so you won't be able to solder to them. -Of course, you can change this so that vias also have -solder-mask cut-outs, but it is not the default. -Vias are also useful for defining arbitrary drill points such as -those used for mounting a board. Vias used in this way have -a special flag set so that they have no annular copper ring, -and also appear in the unplated drill file. @emph{Ctrl-H} key over -a via switches it between being a pure-mounting hole and a regular via. -You can assign a name to a via, which is useful during the creation -of new element definitions. -Each via exists on all copper layers. (@emph{i.e.} -blind and buried vias are not supported) - - -@node Element Objects -@section Elements -@cindex element, an overview -@cindex layout-name - -Elements represent the components on a board. -Elements are loaded from @code{ASCII} coded files in a -similar manner to the layout file itself, or from the -library selector window. -An element is composed of lines and arcs on the silk-screen -layer (used to define the package outline), pins -(or pads for SMD) and three labels that define the -description, the element's layout-name (which also -appears on the silk-screen layer) and its value. You -can choose which of the names are displayed on the screen -with the @b{Screen} menu; however, the silk screen in -the printout will always show the layout-name. -Element pins are contained on the first logical level -and so reside on all layers, but the pads of surface-mount -elements reside on only the component or solder -layers. An element can have a mixture of pins, pads -(on one or both sides), and mounting holes. - -A mark is used to position the element with -respect to the cross hair during pasting. -The mark will lie on a grid point when the element -is positioned. The mark is drawn as a small diamond -shape, but is only visible when @emph{both} the @code{silk} -and @code{pins/pads} layers are visible. -All parts of an element are treated as one unit, except for -the name. -It is not possible to delete a single pin or move -only part of an element on the layout. -You can resize separate pieces of an element, -but doing so is usually a bad idea. You can move/rotate -the element name independently of the element it belongs -to. When you move an element name, a line is draw from -the cursor to the element mark so it is easy to tell -which element the name belongs to. - - -Each pin and pad has two string identifiers, one is the -"name" which is a functional description of the pin -(@emph{e.g.} "clock in") and the other is the "number" of the -pin which is used to identify it in a netlist. The "number" -is usually an integer, but it can be any string. You -can edit the "name" of each pin of an element, but the -"number" is embedded in the element definition and is -determined when the new element is first created. -Pads are similar to lines on a layer but they must be oriented -either vertically or horizontally. -Pads can have either rounded or square ends. Pins -can be round, square, or octagonal. - - -Elements are supported by several special layers: @code{silk}, @code{pins/pads} and -@code{far-side}. The @code{silk} layer shows the package outline and -also holds legend text and element names. The @code{pins/pads} layer is used to toggle -whether the element's pins and pads are displayed. The @code{far-side} layer controls visibility -of objects (silkscreen and pads) that are on the far (@emph{i.e.} not currently viewed) side -of the board. - -The ``oldlib'' style of footprint libraries distributed with -@pcb{} rely upon the M4 macro processor. M4 is typically -installed under the name @code{m4} on most unix-like operating -systems. It is recommended that you use the GNU version of M4 to -avoid limitations found in some vendor implementations. See the m4 -man page on your system for more information. -Every element file is preprocessed by a user-defined command when the file is read. -For details see @samp{elementCommand}, @ref{Resources}. @code{m4}, the default -value of @samp{elementCommand}, allows you to create libraries for -package definitions that are shared by all elements. -The old element libraries distributed with @pcb{} expect @code{m4} or an -equivalent to be the @emph{elementCommand}. The new library scheme simply has -each element stored in a self-contained file, so there is no need to learn -@code{m4} to add to the libraries. - -@pcb{} can create a list of -all connections from one (or all) elements to the others or a list of -unconnected pins. -It can also verify the layout connections against a netlist file. -The element's @samp{layout-name} is the name used to identify the element -in a netlist file (see @ref{Netlist File}). - -The old libraries, or very old (pre-1.6) layout files may have -incorrect pin numbering since there was no concept of pin numbers -when they were created. @pcb{} uses the order of appearance of -the pin definitions in the layout or library file if it uses the -old format, but there is no guarantee that it will be correct for -these old objects. - -@cindex old library -@cindex library accuracy -@b{Be aware that a few of the old library parts may still be incorrectly -implemented regarding pin-numbering.} All of the DIL (Dual- -Inline-Pins) parts are correct and most of the others are too, -but you should verify the pin numbering -of any non-DIL part before using an old library part. -(use the @samp{generate object report} in the @b{Info} menu -to see what @pcb{} thinks a pin's number is) -All of the old -library names begin with a ~, so you can easily identify them. -The old libraries also @emph{may} contain other sorts of errors, -including incorrect pin spacing, silkscreen overlapping solder areas, etc. -@b{Check carefully any element in the old library before using it!} -As the new library grows, the old library will be pared down to -at least remove all of the elements with errors, but this will -take time. - -You can make your own element definitions graphically now. -Simply draw vias for the pins, lines on the solder and/or -component layers for surface-mount pads (they must be either horizontal -or vertical), -and lines and arcs on the silkscreen layer for the silkscreen -outline. You should @emph{name} (@emph{N} key) each via and copper line with the pin @emph{number}. -Once you are happy with the geometry, select everything that is to become part of -the element, then choose @samp{convert selection to element} from the @b{Select} menu. -Afterwords you can make pin (or pad) one -square if you like, and give the element its various names. You can also give -the pins and pads their functional names. Note that the -element mark corresponds to the position you click after choosing the -conversion from the menu, so decide where the mark goes and make -sure it falls on a grid point before you request the conversion. -If the vias/lines are not named, then the pin numbering will correspond to the -order in which they were placed. - -When you create a new element, remember that silkscreen lines -should @emph{never} overlap the copper part of the -pins or pads, as this can interfere with soldering. The silkscreen -should identify the maximum extent of the element package so it -is easy to see how close elements can be placed together. - -If you want to make an element similar to an existing one, you can -break an element into constituent pieces from the @b{Buffer} menu. -Paste the pieces to the layout, make the necessary changes, then -convert it back into an element. If the pin numbers haven't changed, -there is no need to name each via/line as they are pre-named when -the element was broken apart. When you create a new element, you -can save it to a file in order to have easy access to it the next -time you run @pcb{}. - - -@node Layer Objects -@section Layers -@cindex layers, an overview - -Every layout consists of several layers that can be used independently -or treated as a group. -Layer groups can be used to logically separate (and color-code) -different traces (@emph{e.g.} power and signal); however, all -layers within a group reside on the same physical -copper layer of a board, so using different layers within the same -group won't provide electrical separation where they touch or overlap. -For details, see @samp{layerGroups}, @ref{Resources}. -Each layer is drawn in a color defined in the resource file -and identified by a name that you can change (for details -see @samp{layerColor}, @ref{Resources}.) -Layers are really just containers for line, arc, polygon, and text objects. The -component and solder layers contain SMD elements as well, but the -file structure doesn't reflect that fact directly. - -@cindex layer groups -Each layer group -represents a physical layer on the printed circuit board. If you want to make -a four layer board, you'll need to have at least four layer groups. -Connections between layer groups are established only through element pins and vias. -The relationship between a specific layer and the board itself is configurable from -the @samp{Edit layer groups} option in the @b{Settings} menu. -The layer groups corresponding to the physical layers: @emph{component-side} -and @emph{solder-side} are always defined and you must map at least one -logical layer to each, even if you plan to make a single-sided board. -You are not obligated to put tracks on either of them. -Surface mount elements always reside on either the component-side or the -solder-side layer group. When you paste an element from the buffer, -it will go onto whichever side of the board you are viewing. -You can swap which side of the board you are viewing by pressing -the @emph{Tab} key, or by selecting @samp{view solder side} from the -@b{Screen} menu. -The layer groups just have a name or number associated with them - where -they are sandwiched in the board is left for you to tell the -manufacturer. - -The silkscreen layer is special because there are actually two silkscreen -layers, one for the top (component) and one for the bottom (solder) side -of the board. Which silk layer you draw on is determined by the side of the -board that you are viewing. If you are viewing the component side, then -drawing on the silk layer draws to the component-side silk layer. - -The netlist layer is another special layer. It shows rat's-nest lines -(@emph{i.e.} guides that show how the netlist expects the element to interconnect). -If you make this the active layer, you can use the Line tool to add -entries into the netlist, or to delete connections from the netlist -window. Except for these two purposes, you should not -make the netlist layer the active layer. Usually there is no need to -do this because a separate schematic package should be used to create the -netlist. @pcb{} can automatically draw all of the rats from -the netlist. In some cases you may want to make a small change without -going to the trouble of modifying the schematic, which is why this -facility is provided. - - -@node Line Objects -@section Lines -@cindex lines, an overview - -Lines are used to draw tracks on the pc board. -When in the line mode, each @emph{Btn1} -press establishes one end of a line. -Once the second point is defined, the line is drawn -and a new line started where the first one ended. -You can abandon the new starting point in favor -of another by pressing @emph{Ctrl-Btn1}, or -@emph{Btn3}, but don't use @emph{Btn2}. -The undo function (@emph{U} key or @samp{undo last operation} -from the @b{Edit} menu) will take you back -point by point if you use it while in the line mode. - -@cindex two line mode -New lines can be restricted to 45 degree angles if desired. You can toggle this -restriction on and off while creating lines by pressing the @emph{period} key. -If the 45 degree restriction is turned on, then the @emph{/} (forward slash) key -can be used to cycle through three different modes of 45 degree line creation. -One mode just creates a single line forced to the nearest 45 degree vector. The next -mode creates two lines from the start to end points such that the first line leaves the -start point at a 90 degree vector, and the second line enters the end point on a 45 -degree vector. The last mode creates two lines such that the first line leaves the -start point on a 45 degree vector and arrives at the end point on a 90 degree vector. -You can temporarily swap between the last two modes by holding the @emph{Shift} key down. - -It is simple to edit a line object by breaking it into pieces (insert point mode), -moving an end point or the whole line (@emph{Arrow tool}), -or changing the layer it resides on (@emph{M} key moves the line under the pointer -to the active layer). -In the case when two line segments meet at exactly the same -point you can delete the intermediate point, otherwise the delete tool removes an entire line. -Feel free to experiment -since @pcb{} will allow you to undo and redo anything that materially affects your work. -If you switch active layers in the midst of placing lines a via will automatically be -placed, when necessary, in order to continue the connection. - -@cindex clearance -If you draw a line inside a polygon, it will either plow through the -polygon creating a clearance, or touch the polygon. This behavior is -selectable in the @b{Settings} menu for new lines. To change the -behavior of an existing line, hit the @emph{J} key with the cross hair -over the line. You can increase the size of the clearance by 2 mils on -each edge with the with the -@emph{K} key. @emph{Shift-K} will decrease the clearance by 2 mils. -The increment may be changed from 2 mils through the application -resource file. -The clearance can be also increased, decreased and set -by the @emph{ChangeClearSize} action. - -Lines do not need to intersect the center of a pin, pad, via, or other -line for @pcb{} to understand that they make electrical connection. -If the connection is too tenuous, running the design rule checker will report -that the connection may break if the line width shrinks slightly. - - -@node Arc Objects -@section Arcs -@cindex arc - -@pcb{} can handle arcs of any angular extent, but when you -create an arc with the Arc tool, it will -be a quarter circle (this means they always bend a right angle). Arcs are very similar -to lines otherwise. They are created on the active layer and have the same thickness -that new lines will have. The various clicks for creating lines work pretty much the -same way for creating arcs. -In order to make the arc curve in the desired direction, drag the mouse along -the tangent line from the starting position towards the end position. If the grid is -too coarse, it may not be possible to distinguish whether you've moved over then up, -or up then over, so if you can't seem to make the arc go in the direction you want, try pressing -the @emph{Shift} key while drawing the arc. Decreasing the grid spacing may also help. -Alternatively you can draw the wrong arc, then -rotate and move it where you want. Like the Line tool, after an arc is drawn a new -starting point is established at the end point. - -Whenever a starting point is established -by either the Line or Arc tools it will be retained if you switch directly between the -tools (e.g. @emph{F2} key for Lines, @emph{F8} key for Arcs. Arcs can either touch or -clear polygons just like lines do. Of course connection -searches, undo and all the other features you'd expect work with arcs too. - - -@node Polygon Objects -@section Polygons -@cindex polygon, an overview - -Sometimes it's useful to fill large areas with solid copper. -The way to do this is with polygons. -Polygons can be created in either the polygon mode or the rectangle mode. -In the polygon mode, you'll have to define each corner of the polygon -with a mouse click (@emph{Btn1}). When the last point is clicked -exactly on top of the starting point, the polygon is finished. -Since this can be hard to do, the @emph{Shift-P} key will enter the -final point for you, closing the polygon. -If the 45 degree angle restriction is turned on -and you try to close the polygon when it is not possible, you'll get a -warning instead. If you haven't finished entering a polygon, but want to -undo one (or more) of the points that you've already defined, use the -undo command (@emph{U} key). - -With the rectangle tool, defining -the two diagonally opposite corners is sufficient, but of course the resulting -polygon is a rectangle. -Like lines, a polygon can by edited by deleting, inserting and moving the points -that define it. Pins and vias @emph{always} clear through polygons without -touching them when first positioned. You must add a thermal with the thermal -tool in order to connect pins and vias to polygons. Thermals can be added and removed by -clicking @emph{Btn1} with the thermal tool over the pin or via. -The thermal tool always -places a thermal to polygons on the active layer, so if the tool doesn't -seem to work, it's probably because the polygon you want to touch is not -on the active layer. You can change the style of thermal used or make -a solid connection by holding down @emph{Shift} while clicking -@emph{Btn1} with the thermal tool over the pin or via. - -@pcb{} is capable of handling complex polygons, but -using a number of simpler ones improves performance of the connection tracing code. -You also must be careful not to create polygons that touch or overlap themselves. -The fabricated board may not look the way you expect if you violate this -principle. It is always ok to have two (or more) polygons touch or overlap -each other, but not for points within the same polygon to do so. - -The great advantage to this new polygon behavior is that simple or complex ground -and/or power planes can be easily made with polygons and seen on the screen. -If you don't want this auto-clearance behavior, or you load a layout created by -an early version of @pcb{}, the old behavior -(shorts to all piercing pins and vias) is available. A @samp{ChangeSize} -operation (@emph{S} key) toggles a polygon between the new and old polygon/pin -behavior. - - -@node Text Objects -@section Text -@cindex text, an overview -@cindex strings, an overview - -Text objects should be used to label a layout or to put additional -information on the board. Elements have their @samp{layout-name} labels on the -silk-screen layer. If you are making a board without a silkscreen, -you can use copper text to label the elements, but you have to do -this manually. - -Text is always horizontal when first created, but the -rotate mode can align it along 0, 90, 180 and 270 degree angles. -Text on the far side of the board will automatically appear mirror-imaged. - -@emph{Warning:} @b{TEXT OBJECTS ON A COPPER LAYER CREATE COPPER LINES BUT THEY ARE NOT SCANNED FOR -CONNECTIONS OR TESTED FOR CREATING SHORTS VS. THE NETLIST. NEITHER ARE TEXT OBJECTS TESTED AGAINST ANY DESIGN RULES}. - - -@node Net Objects -@section Nets -@cindex rats-nest -@cindex netlist - -Layout files also contain the netlist that describes how the elements -are supposed to be interconnected. This list of connections can be -loaded from a netlist file (see @ref{Netlist File}), or -entered by drawing rat-lines as described -previously. Each net has a name and routing style associated with it. -The net contains a list of all element @emph{layout-name} names and -pin @emph{numbers} that should -be connected to the net. Loading a netlist file will replace all -existing nets with the ones from the file. -The @emph{Netlist} window provides an easy way to -browse through the net list. You can display the rat's-nest by selecting -@samp{optimize rats-nest} from the @b{Connects} menu. If you move or rotate elements, -the rat's-nest will automatically follow the movements, but they won't -necessarily show the shortest paths until you optimize them again. - -@c --------------------------- chapter 2 ------------------------------- -@node Getting Started -@chapter Getting Started -@cindex how to start - -The goal of this chapter is to give you enough information to learn how -@pcb{} works and how to develop your layouts to make the best use of @pcb{}'s -features. All event translations (@emph{i.e.} the buttons and keys you -press) refer to the default application resource file shipped with @pcb{}. -There is probably no need to change this unless your window -manager uses some of the button events itself; however, if you @emph{want} -to customize the behavior of @pcb{} then changing the resource file -is usually the best way to do it. - -Get yourself a printout of this chapter and @emph{User Commands}, if you -haven't already done so, and follow the examples. - -Start @pcb{} (the actual command will use all lower-case letters) -without any additional options. -If you get the error message: - -@display - can't find default font-symbol-file 'default_font' -@end display -@noindent -then the font searchpath or filename in the application resource -file is wrong. Be sure that your @code{m4} program supports search paths. -If not, get @code{GNU m4}. -For other messages, see @ref{problems}. -Another quick-start is provided by @code{pcbtest.sh} in the @file{src} -directory. If some features don't seem to work, try running @code{pcbtest.sh}, -if that works, then @pcb{} hasn't been installed properly. - -@menu -* Application Window:: The elements of the main window. -* Log Window:: The optional logging window -* Library Window:: The circuit selection window -* Netlist Window:: The desired connections window -* Drawing and Removing:: -* Moving and Copying:: -* Loading and Saving:: -* Printing:: Creating Gerber files or postscript files -* Exporting:: Exporting a layout. -* Arrow Tool:: Selecting/Moving objects. -* Rats Nest:: Helps you place and route tracks against a netlist. -* Design Rule Checking:: Check for manufactureability -* Trace Optimizer:: Optimization of layouts -* Searching for elements:: Searching for elements -* Measuring distances:: Measuring distances -* Vendor drill mapping:: Mapping drills to a vendor specified list -* Connection Lists:: How to get a list of all or some connections. -@end menu - - -@node Application Window -@section The Application Window - -The main window consists of five areas: -the menu at the top, the layer control in the upper left, the tool buttons -located below the layer controls, the Layout area to the right of these, and the -status line at the bottom of the window. - -@menu -* Menu:: -* Status-line and Input-field:: What is the program configuration. -* Layer Controls:: Switch layers on/off; change current one. -* Tool Selectors:: Select a layout tool. -* Layout Area:: Where the layout is drawn. -@end menu - -@node Menu -@subsection Menus -@cindex menus -@cindex popping up menus - -The menus are located at the top of the Layout area. Most, but not all, -of their functions are also available from the keyboard. Similarly, some -functions are only achievable through the keyboard or command entry. -Some menu entries such as @samp{center layout} in the @b{Screen} menu require a certain cross hair position. -In this case a prompt message will popup at the bottom of the screen -with wording similar to the following: -@example -move pointer to the appropriate screen position and press a button -@end example -Any mouse button will do the job, whereas any key except the arrow (cursor) keys -will cancel the operation. If it seems like the menu hasn't done what you -expected, check to see if it is waiting for the position click. For details see @ref{Actions}. - -Pressing @emph{Btn3} in the Layout area also pops up a menu with many of the most common operations (except -when you're in the midst of drawing a line or arc). When -a choice in the @emph{Btn3} popup menu needs a cross hair position, it uses the position -where the cross hair was when @emph{Btn3} was pressed. For example, to get detailed -information on an object, place the cross hair over the object, press @emph{Btn3}, then -choose @samp{object report}. If you pop up the @emph{Btn3} menu but don't want to -take any of the actions, click on one of the headers in the menu. - -@table @b - -@cindex File, popup menu -@item File -This menu offers a choice of loading, saving and printing data, saving -connection information to a file or quitting the application. Most -of the entries in the @b{File} menu are self explanatory. -Selecting -@samp{print layout} pops up a printer control dialog. -A selection of several device drivers is available from the printer control -dialog. Presently @emph{PostScript}, @emph{encapsulated PostScript}, -and @emph{GerberX} are supported. The @emph{GerberX} driver produces -all of the files necessary to have the board professionally manufactured. -The connection saving features in the @b{File} menu produce outputs in an -arcane format that is not too useful. They do @emph{not} produce netlist -files. - -@cindex Edit, popup menu -@cindex undo -@cindex redo -@item Edit -The @b{Edit} menu provides the usual cut, copy, paste -which work on selections. To learn how to -create complex selections, see @ref{Arrow Tool}. -The @b{Edit} menu also -provides access to Undo and Redo of the last operation. These -can also be accomplished with the @emph{U} key and @emph{Shift-R} -key. Finally, the @b{Edit} menu allows you to change the names -of: the layout, the active layer, or text objects on the layout. - -@cindex Screen, popup menu -@cindex displaying element names -@cindex element, display names of -@cindex grid, display -@cindex grid, alignment -@cindex zoom, setting -@item Screen -The @b{Screen} menu supports most functions related to -the whole Layout area. There are various entries to change the grid to some popular -values, the zoom factor, and which kind of element name is displayed. -You can also re-align the grid origin and turn on and off the display -of the grid. -Before changing the grid alignment, I recommend that you zoom in as close as -possible so that you're sure the grid -points appear exactly where you want them. - -@cindex solder mask, viewing and editing -The @b{Screen} menu also allows you to turn on and off the -visibility of the solder-mask layer. When the solder-mask layer -is made visible it obscures most of the layout, so only turn -this on when you really want to know what the solder-mask will -look like. The solder-mask that you see belongs to the -side of the board you are viewing, which can be changed with -the @samp{view solder side} option, also found in the @b{Screen} menu. -When the solder-mask is displayed, the pin and pad clearance adjustments -(@pxref{Line Objects}) alter the size of mask cut-outs. - -@cindex Sizes, popup menu -@item Sizes -The @b{Sizes} menu allows you to select a group of line thickness, via diameter, via drill -size, and clearance (keepaway) (collectively called a "routing style") to be copied to the "active" sizes. -You can also change the names given to the routing styles and adjust their values from -this menu. The "active" sizes are also adjustable from this menu. -The "active" sizes are shown in the status-line and control the initial size of new vias, -drilling holes, lines, clearances, text-objects and also the maximum dimensions of the -board layout. - -@cindex Settings, popup menu -@cindex unique names -@cindex rubber band -@cindex snap to pins -@cindex clearance, for new lines -@item Settings -The @b{Settings} menu controls several operating configuration -parameters. The @samp{edit layer groups} entry brings up a dialog -that allows you to change the way layers are grouped. Layer grouping -is described in @ref{Layer Objects}. The @samp{all-direction lines} -entry controls -the clipping of lines to 45-degree angles. You can also control -whether moving individual objects causes the attached lines to -"rubber band" with the move or not from the @b{Settings} menu. Another -entry controls whether the starting clip angle for the two-line -mode (@pxref{Line Objects}) alternates every other line. You can -also control whether element names must be unique from the @b{Settings} -menu. When unique element names are enforced, copying a new element -will automatically create a unique @samp{layout-name} name for it -provided that the name originally ended with a digit (@emph{e.g.} -U7 or R6). The @b{Settings} menu allows you to control -whether the cross hair will snap to pins and pads even when they -are off-grid. Finally you can control whether new lines and -arcs touch or clear intersecting polygons from this menu. - -@cindex Select, popup menu -@cindex selected objects, removing -@cindex selected objects, changing sizes -@item Select -This menu covers most of the operations that work with selected objects. -You may either (un)select all visible objects on a layout or only the ones -which have been found by the last connection scan see -@c DRM: not sure where this was suppose to xfef to. -@c @ref{find connections} -. -You can delete all selected objects from this menu. -Other entries in the @b{Select} menu change the sizes of selected objects. -Note that a select action only affects those objects that are -selected @emph{and} have their visibility turned on in the Layer Control -panel. The @b{Select} menu also provides a means for selecting objects -by name using unix @ref{Regular Expressions}. - -@cindex Buffer, popup menu -@cindex pastebuffer, popup menu -@cindex element, editing -@item Buffer -From the @b{Buffer} menu you may select one out of five -buffers to use, rotate or clear its contents or save the buffer contents -to a file. You can also use the @samp{break buffer element to pieces} entry -to de-compose an element into pieces for editing. -Note: only objects with visibility turned on are pasted to the layout. If -you have something in a buffer, then change which side of the board you -are viewing, the contents of the buffer will automatically be mirrored -for pasting on the side you are viewing. It is not necessary to clear -a buffer before cutting or copying something into it - it will automatically -be cleared first. - -@cindex Connects, popup menu -@cindex auto-router -@cindex design rule checker, invoking -@item Connects -The entries available through the @b{Connects} menu allow you to find -connections from objects and to manipulate these. -You can also optimize or erase rat's nests from this menu. Finally, -the @samp{auto-route all rats} entry allows you to auto-route -all connections show by the rat's nest. The auto-router will use -any visible copper layer for routing, so turn off the visibility of any -layers you don't want it to use. The auto-router will automatically -understand and avoid any traces that are already on the board, but -it is not restricted to the grid. Finally, -the auto-router routes using the active sizes (except for nets that -have a route-style defined). @pcb{} always knows which tracks -were routed by the auto-router, and you can selectively remove them -without fear of changing tracks that you have manually routed -with the @samp{rip-up all auto-routed tracks} entry in the @b{Connects} -menu. The @samp{design rule checker} entry runs a check for copper -areas that are too close together, or connections that touch too -tenuously for reliable production. The DRC stops when the first -problem is encountered so after fixing a problem be sure to -run it again until no problems are found. -@display -@emph{Warning:} @b{COPPER TEXT IS IGNORED BY THE DRC CHECKER}. -@end display - -@cindex Info, popup menu -@cindex report -@cindex object report -@cindex drill report -@item Info -The @samp{generate object report} entry from the @b{Info} menu -provides a way to get detailed information -about an object, such as its coordinates, dimensions, etc. -You can also get a report summarizing all of the drills -used on the board with @samp{generate drill summary}. Lastly, -you can get a list of all pins, pads and vias that were -found during a connection search. - -@cindex Window, popup menu -@item Window -The @b{Window} menu provides a way to bring each of @code{Pcb's} -windows to the front. The @emph{Library} window is used to -bring elements from the library into the paste-buffer. The -@emph{Message Log} window holds the various messages that -@pcb{} sends to the user. The @emph{Netlist} window shows -the list of connections desired. - -@end table - -Now that you're familiar with the various menus, it's time -to try some things out. From the @b{File} menu choose -@samp{load layout}, navigate to the tutorial folder, then -load the file @samp{tut1.pcb}. - - -@node Status-line and Input-field -@subsection The Status-line and Input-field -@cindex status information -@cindex displaying status information -@cindex input-field, position of - -The status-line is located at the bottom edge of the main window. -During normal operation the status information is visible there. -When a selected menu operation requires an additional button click, the -status-line is replaced by a message telling you to position the cursor -and click. -When a text input is required, the status-line is replaced by the -Input-field which has a prompt for typing the input. - -The status-line shows, from left to right, the side of the board that you -are viewing (@emph{Tab} key changes this), the current grid values, -if new lines are restricted to 45 degrees, -which type of 45 degree line mode is active, whether rubberband move and -rotate mode is on (R), and the zoom factor. -This information is followed by the active line-width, via-size -and drilling hole, keepaway spacing, and text scaling. Last is the active buffer number and the -name of the layout. An asterisk appearing at the far left indicates that the -layout has been modified since the last save. -Note that the name of the layout is not the same -thing as the filename of the layout. -Change the grid factor to 1.0 mm from the @b{Screen} menu. Observe how the -status line shows the new grid setting. Except for the case of the metric -grid, all dimensions in the status line are in units of 0.001 inch (1 mil). - -The input-field pops up (temporarily replacing the status-line) whenever user input -is required. Two keys are bound to the input field: the @emph{Escape} key -aborts the input, @emph{Return} accepts it. Let's change the name of a component -on the board to see how the input-field works. Position the cross hair over -R5, and press the @emph{N} key. The input field pops-up showing the name -for you to edit. Go ahead and change the name, then hit return. Notice the name -of the element changed. Now undo the change by pressing the @emph{U} key. You can -position the cross hair over the name, or the element before pressing the -@emph{N} key. - -Now select @samp{realign grid} from the @b{Screen} menu. Notice that the -status line has been replaced with an instruction to position the cursor -where you want a grid point to fall. In this case, since the cross hair -can only fall on a grid point, you must move the tip of the finger cursor -to the place where you want a grid point to appear. Do not worry that -the cross hair is not coincident with the cursor. Click @emph{Btn1} at -your chosen location. See how the grid has shifted, and the status line -has returned. - -The present cross hair position is displayed in the upper right corner of the window. -Normally this position is an absolute coordinate, but you can anchor a marker at -the cross hair location by pressing @emph{Ctrl-M} (try it now) and then the -display will read both the absolute cross hair position as well as the difference -between it and the marker. The numbers enclosed in < > are the X and Y distances -between the cross hair and the mark, while the numbers enclosed in parenthesis -are the distance and angle from the mark to the cross hair. The values displayed -are always in units of 0.001 inch (1 mil). -Pressing @emph{Ctrl-M} again turns the marker off. - -@node Layer Controls -@subsection The Layer Controls -@cindex layer controls -@cindex layers, switching on/off -@cindex layers, changing which is active -@cindex change active layer - -The layer control panel, located in the upper left, is used to turn on -and off the display of layer groups and to select the active drawing layer. -If a layer hasn't been named, the label "@emph{(unknown)}" is used as the default. -If this happens, it probably means the application resources are not installed -properly. - -The upper buttons are used to switch layers on and off. Click -@emph{} on one or more of them. Each click toggles the setting. -If you turn off the currently active layer, another one that is visible -will become active. If there are no others visible, you will not be -able to turn off the active layer. -When the layers are grouped, clicking on these buttons will toggle -the visibility of all layers in the same group. This is a good idea because -layers in the same group reside on the same physical layer of -the actual board. Notice that this example has 2 groups each having -3 layers, plus two other layers named @samp{unused}. -Use the @samp{Edit layer groups} option in the @samp{Settings} menu to -change the layer groupings in the lesstif GUI or the @samp{Preferences} -dialog from the @samp{File} menu in the GTK+ GUI. Note that changing the -groupings can radically alter the connectivity on the board. -Grouping layers is only useful for helping you to color-code -signals in your layout. Note that grouping layers actually reduces the number -of different physical layers available for your board, so to make an eight -layer board, you cannot group any layers. - -The @emph{far side} button turns on and off the visibility of elements -(including SMD pads) on the opposite (to the side you're viewing) -board side, as well as silk screening on that side. It does not -hide the x-ray view of the other copper layers, these must be turned off -separately if desired. Use the @emph{tab} key to view the entire board from the other -side. To see a view of what the back side of the board will actually look like, -make the solder layer the active layer then press @emph{tab} until the status -line says "solder" on the right, then turn off the visibility of all layers -except solder, pins/pads, vias, and silk. Now turn them all back on. - -The lowest button, named @emph{active}, is used to change the active -drawing layer. Pressing @emph{} on it pops up a menu to select which -layer should be active. -Each entry is labeled with the layer's name and drawn in its color. -The active layer is automatically made visible. The active layer is -always drawn on top of the other layers, so the ordering of layers -on the screen does not generally reflect the ordering of the manufactured -board. Only the solder, component, silkscreen, and solder-mask layers -are always drawn in their physical order. Bringing the active layer -to the top makes it easier to select and change objects on the active layer. -Try changing the active layer's name to @emph{ABC} by selecting -@samp{edit name of active layer} from the @samp{Edit} menu. -Changing the active layer can also be done by pressing keys -@emph{1..MAX_LAYER}. - -Turn off the visibility of the component layer. -Now make the component layer the active layer. Notice that it -automatically became visible. Try setting a few -other layers as the active layer. You should also experiment -with turning on and off each of the layers to see what happens. - -The netlist layer is a special layer for adding connections to -the netlist by drawing rat lines. This is not the recommended -way to add to the netlist, but occasionally may be convenient. -To learn how to use the netlist layer see @ref{Net Objects}. - - -@node Tool Selectors -@subsection The Tool Selectors -@cindex mode selection -@cindex tool selection -@cindex selecting a new tool - -The tool selector buttons reside below the layer controls. -They are used to select which layout tool to use in the drawing -area. Each tool performs its function when @emph{Btn1} is pressed. -Every tool gives the cursor a unique shape that identifies it. -The tool selector buttons themselves are icons that illustrate their function. -Each layout tool can also be selected from the keyboard: -@example - @emph{F1} key Via tool - @emph{F2} key Line tool - @emph{F3} key Arc tool - @emph{F4} key Text tool - @emph{F5} key Rectangle tool - @emph{F6} key Polygon tool - @emph{F7} key Buffer tool - @emph{F8} key Delete tool - @emph{F9} key Rotate tool - @emph{Insert} key Insert-point tool - @emph{F10} key Thermal tool - @emph{F11} key Arrow tool - @emph{F12} key Lock tool -@end example - -Some of the tools are very simple, such as the Via tool. Clicking -@emph{Btn1} with the Via tool creates a via at the cross hair position. -The via will have the diameter and drill sizes that are active, -as shown in the status line. -The Buffer tool is similar. With it, @emph{} copies -the contents of the active buffer to the layout, but only -those parts that reside on visible layers are copied. -The Rotate tool allows you to rotate elements, arcs, and text objects -90 degrees counter-clockwise with each click. Holding the @emph{Shift} -key down changes the Rotate tool to clockwise operation. -Anything including groups of objects -can be rotated inside a buffer using the rotate buffer menu option. - -The Line tool is explained in detail in @ref{Line Objects}. Go read -that section if you haven't already. -Activate the Line tool. Set the active layer to the solder layer. -Try drawing some lines. Use the @emph{U} key to undo some of the -lines you just created. Zoom in a bit closer with the @emph{Z} key. -Draw some more lines. Be sure to draw some separate lines by starting -a new anchor point with @emph{Ctrl-Btn1}. Change the @samp{crosshair snaps to pin/pads} -behavior in the @b{Settings} menu. Now draw a line. Notice that -the new line points must now always be on a grid point. It might not -be able to reach some pins or pads with this setting. Increase the active line thickness -by pressing the @emph{L} key. Note that the status line updates -to reflect the new active line thickness. Now draw another line. Before completing the -next line, make the component layer active by pressing the @emph{4} key. -Now finish the line. Notice that a via was automatically placed where -you switched layers. @pcb{} does not do any checks to make sure that -the via could safely be placed there. Neither does it interfere with -your desire to place lines haphazardly. It is up to you to place -things properly when doing manual routing with the Line tool. - -The Arc tool is explained in detail in @ref{Arc Objects}. Its -use is very similar to the Line tool. - -The Rectangle tool, Polygon tool and Thermal tool are explained in detail in -@ref{Polygon Objects}. Go read that section. -Remember that the Thermal tool will only create and destroy thermals -to polygons on the active layer. Use the Rectangle tool to make a -small copper plane on the component layer. Now place a via in the -middle of the plane. Notice that it does not touch the plane, and -they are not electrically connected. Use the Thermal tool to make -the via connect to the plane. Thermals allow the via or pin to -be heated by a soldering iron without having to heat the entire -plane. If solid connections were made to the plane, it could be -nearly impossible to solder. Shift-click on the via with the Thermal -tool to change the style of thermal used or to make the connection -solid. Click on the via again with the Thermal tool to remove the -connection to the plane. - -The Insert-point tool is an editing tool that allows you to add -points into lines and polygons. The -Insert-point tool enforces the 45 degree line -rule. You can force only the shorter line segment to 45 -degrees by holding the @emph{Shift} key down while inserting the point. -Try adding a point into one of the lines you created. Since line -clipping is turned on, you may need to move the cross hair quite far -from the point where you first clicked on the line. Turn off the -line clipping by selecting @samp{all-direction lines} from the -@b{Settings} menu (or hit -the @emph{Period} key). Now you can place an inserted point anywhere. -Try adding a point to the rectangle you made earlier. Start by clicking -somewhere along an edge of the rectangle, then move the pointer to -a new location and click again. - -The delete-mode deletes the object beneath the cursor with each -@emph{Btn1} click. -If you click at an end-point that two lines have in common, it will replace the two lines with a single line -spanning the two remaining points. This can be used to delete an "inserted" -point in a line, restoring the previous line. Now delete one of the original corner -points of the polygon you were just playing with. To do this, place the cross hair over the -corner and click on it with the Delete tool. You could also use the @emph{Backspace} key -if some other tool is active. Try deleting some of -the lines and intermediate points that you created earlier. Use undo -repeatedly to undo all the changes that you've made. Use redo -a few times to see what happens. Now add a new line. Notice that -you can no longer use redo since the layout has changed since -the last undo happened. The undo/redo tree is always pruned in this -way (@emph{i.e.} it has a root, but no branches). - -The Arrow tool is so important, it has its own section: @ref{Arrow Tool}. -Go read it now. - -The Lock tool allows you to lock objects on the layout. When an object -is locked, it can't be selected, moved, rotated, or resized. This is -useful for very large objects like ground planes, or board-outlines that -are defined as an element. With such large objects, nearly anywhere you -click with the Arrow tool will be on the large object, so it could be -hard to draw box selections. If you lock an object, the Arrow tool will -behave as if it didn't exist. You cannot unlock an object with undo. -You must click on it again with the Lock tool. If an object is locked, -previous changes to it cannot be undone either. When you lock -an object, a report message about it is popped up and will always tell -you what object it is, and that it is locked if you just locked it. -Other than noticing your inability to manipulate something, the only -way to tell an object is locked is with a report from the @b{Info} -menu. Use the Lock tool sparingly. - - -@node Layout Area -@subsection Layout Area -@cindex grid - -The layout area is where you see the layout. The cursor shape depends -on the active tool when the pointer is moved into the layout area. -A cross hair follows the mouse pointer with respect to the grid setting. -Select a new grid from the @emph{Screen} menu. -The new value is updated in the status line. -A different way to change the grid is -@emph{Shiftg} to decrease or @emph{g} to increase -it, but this only works for English (integer mil) grids. -The grid setting is saved along with the data when you save a pcb layout. -For homemade layouts a value around 50 is a good setting. -The cursor can also be moved in the layout area with the cursor (arrow) keys or, for larger -distances, by pressing the @emph{Shift} modifier together with a cursor key. - - -@node Log Window -@section Log Window -@cindex log window -@cindex messages - -This optional window is used to display all kind of messages including -the ones written to @emph{stderr} by external commands. The main advantage -of using it is -that its contents are saved in a scrolling list until the -program exits. Disabling this feature by setting the resource -@emph{useLogWindow} to @emph{false} will generate popup windows to display -messages. The @emph{stderr} of external commands will appear on @pcb{}s -@emph{stderr} which normally is the parent shell. I suggest you iconify -the log window after startup for example by setting @emph{*log.iconic} to -@emph{true} in the resource file. If @emph{raiseLogWindow} is set @emph{true}, -the window will deiconify and raise itself whenever new messages are to be -displayed. - - -@node Library Window -@section Library Window -@cindex library window - -The library window makes loading elements (or even partial layouts) easy. -Just click the appropriate library from the list on the left. A list -of its elements then appears on the right. Select an element -from the list by clicking on its description. Selecting an element from the -library will also automatically copy the element into -the active buffer, then invoke the @emph{Buffer} tool so -you can paste it to the layout. Elements in the old library should be -taken with a grain of salt (@emph{i.e.} check them carefully before -using). The old library names all begin with ~ so you can easily distinguish between -the old and new libraries. All of the elements in the new library -should be thoroughly vetted, so you -can use them with confidence. The new libraries are stored simply -as directories full of element files, so making additions to the -new library is easy since there is no need to learn @code{m4}. -For details on the old libraries, -check-out @ref{Library File} and @ref{Library Contents File}. For -details on the format of an element file used for the new libraries, -see @ref{Element File}. - - -@node Netlist Window -@section Netlist Window -@cindex Netlist Window - -The netlist window is very similar to the library window. On the left -is a list of all of the nets, on the right is the list of connections -belonging to the chosen net. The chosen net is highlighted in the -list and also shown on the second line of the window in red. If the -net name has a star to the left of it then it is "disabled". A disabled -net is treated as if it were not in the net list. This is useful, for -example, if you plan to use a ground plane and don't want the ground -net showing up in the rat's nest. You can enable/disable individual -nets by double-clicking the net name. If you want to enable or disable -all nets at once, there are two buttons at the top of the netlist -window for this purpose. - -The button labeled @samp{Sel Net On Layout} -can be used to select (on the layout) everything that is connected -(or is supposed to be connected) to the net. If you click on a -connection in the connection list, it will select/deselect -the corresponding pin or pad in the layout and also center the layout -window where it is located. If you "Find" (@samp{lookup connection -to object} in the @b{Connects} menu [also @emph{F} key]), a pin -or pad it will also choose the net and connection in the netlist window -if it exists in the netlist. - -If no netlist exists for the layout, then the netlist window does not -appear. You can load a netlist from a file from the @b{File} menu. The -format for netlist files is described in @ref{Netlist File}. - - -@node Drawing and Removing -@section Drawing and Removing Basic Objects -@cindex drawing objects -@cindex removing objects -@cindex erasing objects -@cindex object, drawing and removing - -hace begging gutting here, and do a real-world tutorial example. - -There are several ways of creating new objects: you can draw them yourself, -you can copy an existing object (or selection), or you can load an element from a file or -from the Library window. Each type of object has a particular tool for creating it. - -The active tool can be selected from the tool selectors in the bottom -left corner or by one of the function keys listed earlier in this chapter. -Each @emph{} press with the tool tells the application to create -or change the appropriate object or at least take -the first step to do so. Each tools causes the cursor to take -on a unique shape and also causes the corresponding -tool selector button to be highlighted. You can use either cue -to see which tool is active. - -Insert mode provides the capability of inserting new points into existing -polygons or lines. The 45 degree line clipping is now enforced when selected. -Press and hold the shift key while positioning the new point to only clip -the line segment to the nearer of the two existing points to 45 degrees. -You can also toggle the 45-degree clipping in the middle of a point -insertion by pressing the @emph{.} -If the shift key is not depressed and the 45 degree line clipping mode -is on, both new line segments must be on 45 degree angles - greatly -restricting where the new point may be placed. In some cases this can cause -confusion as to whether an insertion has been started since the two new -lines may be forced to lie parallel on top of the original line until the -pointer is moved far from the end points. - -Removing objects, changing their size or moving them only applies to objects -that are visible when the command is executed. - -@menu -* Common:: Keystrokes common to some objects. -* Lines:: -* Arcs:: -* Polygons:: Drawing polygons and rectangles. -* Text:: -* Vias:: -* Elements:: -* Pastebuffer:: A multi-purpose buffer. -@end menu - -@node Common -@subsection Common Drawing and Removing Methods -@cindex creating objects -@cindex object, creating an -@cindex removing objects -@cindex object, removing an -@cindex thickness of objects -@cindex object, changing the size of an - -There are several keystrokes and button events referring to an @emph{object} -without identifying its type. Here's a list of them: - -@emph{} creates (or deletes) an object depending on the -current mode. - -@emph{BackSpace} or @emph{Delete} removes the visible -object at the cursor location. When more than one object exists at the -location, the order of removal is: via, line, text, polygon and -element. The drawn layer order also affects the search - whatever is -top - most (except elements) is affected before lower items. Basically -all this means that what is removed is probably just what you expect. -If for some reason it isn't, undo and try again. -Only one object is removed for each keystroke. If two or more -of the same type match, the newest one is removed. - -Use @emph{s} and @emph{Shifts} to change the size (width) -of lines, arcs, text objects, pins, pads and vias, or to toggle the style -of polygons (whether pins and vias automatically have clearances). - -@emph{n} changes the name of pins, pads, vias, the -string of a text object, or the currently displayed label of an element. - -@emph{m} moves the line, arc, or polygon under the cross hair to the -active layer if it wasn't on that layer already. - -@emph{u} (undo) recovers from an unlimited number of operations -such as creating, removing, moving, copying, selecting etc. It works like -you'd expect even if you're in the midst of creating something. - -@emph{Shiftr} restores the last undone operation provided no other -changes have been made since the undo was performed. - -@emph{tab} changes the board side you are viewing. - -For a complete list of keystrokes and button events see @ref{Translations}. - - -@node Lines -@subsection Lines -@cindex lines, an example -@cindex example of line handling - -To draw new lines you have to be in @emph{line-mode}. Get there either by -selecting it from the @emph{Tool palette} or by pressing @emph{F2}. -Each successive @emph{notify} event creates a new line. The -adjustment to 45 degree lines is done automatically if it is selected from the -@emph{Display} menu. You can toggle the 45 degree mode setting by -pressing the @emph{.} (That is the period key). When 45 degree enforcement -is turned on there are three distinct modes of line creation: a single -line on the closest 45 degree vector towards the cross hair (but not necessarily -actually ending at the cross hair), two lines created such that the first leaves -the start point on a 90 degree vector and the second arrives at the cross hair -on a 45 degree vector, and finally two lines created such that the first leaves -the start point on a 45 degree vector and the second arrives at the cross hair -on a 90 degree vector. These last two modes always connect all the way from -the start and end points, and all lines have angles in 45 degree multiples. -The @emph{/} cycles through the three modes. The status line shows a -text icon to indicate which of the modes is active and the lines following -the cross hair motion show the outline of the line(s) that will actually be created. -Press @emph{Escape} to leave line-mode. - -@emph{l}, @emph{Shiftl} and the entries in the -@emph{Sizes} menu change the initial width of new lines. This width is also -displayed in the status line. - - -@node Arcs -@subsection Arcs -@cindex arc, an example - -An Arc is drawn with the @emph{arc-tool}. Get there either by selecting it -from the @emph{Tool palette} or by pressing @emph{F8}. Press @emph{Btn1} to -define the starting point for the arc. Drag the mouse towards the desired -end point along the path you want the arc to follow. The outline of the arc that -will be created is shown on the screen as you move the mouse. Arcs are always -forced to be 90 degrees and have symmetrical length and width ( i.e. they are -a quarter circle). The next @emph{Btn1} click creates the arc. It will have -the same width as new lines (displayed in the status line) and appear on the -active layer. The arc leaves the starting point towards the cross hair along -the axis whose distance from the cross hair is largest. Normally this means that -if you drag along the path you want the arc to follow, you'll get what you -want. If the grid is set to the arc radius, then the two distances will be -equal and you won't be able to get all of the possible directions. If this -is thwarting your desires, reduce the grid spacing (@emph{!ShiftG}) and -try again. - - -@node Polygons -@subsection Polygons and Rectangles -@cindex polygon, an example -@cindex example of polygon handling -@cindex rectangle, an example -@cindex example of rectangle handling - -A polygon is drawn by defining all of its segments as a series of -consecutive line segments. If the first point matches a new one and if -the number of points is greater than two, then the polygon is closed. -Since matching up with the first point may be difficult, you may use -@emph{Shiftp} to close the polygon. The @emph{Shiftp} won't -work if clipping to 45 degree lines is selected -and the final segment cannot match this condition. -I suggest you create simple convex polygons in order to avoid a strong -negative impact on the performance of the connection scanning routines. -The @emph{rectangle-mode} is just an easy way to generate rectangular polygons. -@emph{Polygon-mode} also is selected by @emph{F6} whereas -@emph{rectangle-mode} uses @emph{F4}. -Pressing a @emph{} at two locations creates a rectangle by -defining two of its corners. -@emph{Insert} brings you to @emph{insert-point-mode} which lets you -add additional points to an already existing polygon. -Single points may be removed by moving the cross hair to them and selecting -one of the delete actions @emph{(remove-mode, BackSpace, or Delete}. This only works -if the remaining polygon will still have three or more corners. -Pressing @emph{u} or @emph{p} while entering a new polygon -brings you back to the previous corner. Removing a point does not -force clipping to 45 degree angles (because it's not generally possible). -Newly created polygons will not connect to pins or vias -that pierce it unless you create a thermal (using the thermal mode) to make -the connection. If the edge of a polygon gets too close to a pin or via that -lies outside of it, a warning will be issued and the pin will be given a -special color. Increasing the distance between them will remove the warning -color. - - -@node Text -@subsection Text -@cindex text, an example -@cindex strings, an example -@cindex example of text handling - -Pressing @emph{F5} or clicking one of the text selector buttons -changes to @emph{text-mode}. -Each successive notify event (@emph{}) -pops up the input line at the bottom and queries for a string. -Enter it and press @emph{Return} to confirm or -@emph{Escape} to abort. -The text object is created with its upper left corner at the current pointer -location. -The initial scaling is changed by @emph{t} and -@emph{Shiftt} or from the @emph{Sizes} menu. - -Now switch to @emph{rotate-mode} and press -@emph{} at the text-objects location. Text objects -on the solder side of the layout are automatically mirrored and -flipped so that they are seen correctly when viewing the solder-side. - -Use @emph{n} to edit the string. - -@b{TEXT OBJECTS ON COPPER LAYERS CREATE COPPER LINES BUT THEY ARE NOT SCANNED FOR -CONNECTIONS}. If they are moved to the silkscreen layer, they -no longer create copper. - - -@node Vias -@subsection Vias -@cindex vias, an example -@cindex example of via handling - -The initial size of new vias may be changed by @emph{v} and -@emph{Shiftv} or by selecting the appropriate entry from the -@emph{Sizes} menu. @emph{Mod1v} and @emph{Mod1 Shiftv} do -the same for the drilling hole of the via. -The statusline is updated with the new values. -Creating a via is similar to the other objects. Switch to @emph{via-mode} -by using either the selector button or @emph{F1} then press -@emph{]} or @emph{} to create one. -@emph{n} changes the name of a via. If you want to create a mounting -hole for your board, then you can place a via where you want the hole to -be then convert the via into a hole. The conversion is done by pressing -@emph{!Ctrlh} with the cross hair over the via. Conceptually it is -still a via, but it has no copper annulus. If you create such a hole in -the middle of two polygons on different layers, it will short the layers. -Theoretically you could arrange for such a hole not to be plated, but a -metal screw inserted in the hole would still risk shorting the layers. -A good rule is to realize that holes in the board really are vias between -the layers and so place them where they won't interfere with connectivity. -You can convert a hole back into a normal via with the same keystroke used -to convert it in the first place. - -@node Elements -@subsection Elements -@cindex element, an example -@cindex example of element handling - -Some of the functions related to elements only work if both the package -layer and the pin layer are switched on. - -Now that you're familiar with many of the basic commands, it is -time to put the first element on the layout. -First of all, you have to load data into the paste buffer. -There are four ways to do this: -@example - 1) load the data from a library - 2) load the data from a file - 3) copy data from an already existing element - 4) convert objects in the buffer into an element -@end example -We don't have any elements on the screen yet nor anything in the -buffer, so we use number one. - -@cindex example files -@cindex m4, preprocessing example files -Select @emph{lsi} from the menu in the library window press -@emph{} twice at the appropriate text-line to get -the MC68030 CPU. -The data is loaded and the mode is switched to @emph{pastebuffer-mode}. -Each notify event now creates one of these beasts. Leave the mode -by selecting a different one or by @emph{Escape} which resets -all modes.. -The cross hair is located at the @emph{mark} position as defined by -the data file. Rotating the buffer contents is done by selecting -the @emph{rotate} entry of the @emph{Buffer} menu or by pressing -@emph{ShiftF3}. The contents of the buffer -are valid until new data is loaded into it either by a cut-to-buffer -operation, copy-to-buffer operation or by loading a new data file. -There are 5 buffers -available (possibly more or less if changed at compile time -with the @code{MAX_BUFFER} variable in @file{globalconfig.h}). -Switching between them is done by selecting a menu entry or -by @emph{Shift1..MAX_BUFFER}. -Each of the two board sides has its own buffers. - -The release includes all data files for the circuits that are used -by the demo layout. The elements in the LED example are not found in the library, -but you can lift them from the example itself if you want. -If you have problems with the color of the cross hair, change the resource -@emph{cross hairColor} setting to a different one. - -@cindex example of loading an element file -@cindex pins, an example -@cindex example of pin handling -Now load a second circuit, the MC68882 FPU for example. -Create the circuit as explained above. You now have two different unnamed -elements. Unnamed means that the layout-name of the element -hasn't been set yet. Selecting @emph{description} from the @emph{Display} -menu displays the description string of the two circuits which -are CPU and FPU. The values of the circuits are set to MC68030 and MC68882. -Each of the names of an element may be changed -by @emph{n} at the elements location and editing the old name in -the bottom input line. Naming pins and vias is similar to elements. -You can hide the element name so that it won't appear on the board -silkscreen by pressing @emph{h} with the cursor over the element. -Doing so again un-hides the element name. - -Entering @kbd{:le} and selecting an element data file is -the second way to load circuits. - -The third way to create a new element is to copy an existing one. -Please refer to @ref{Moving and Copying}. - -@cindex example of creating an element -@cindex element, creating a new package -@cindex pastebuffer, convert contents to element -@cindex buffer, convert contents to element -The fourth way to create a new element is to convert a buffer's contents -into an element. Here's how it's done: Select the Via-tool from the -@emph{Tool pallet}. Set the grid spacing to something appropriate for -the element pin spacing. Now create a series of vias where the pins -go. Create them in pin number order. It is often handy to place a reference -point (@emph{!Ctrlm}) in the center of the first pin in order to measure -the location of the other pins. Next make a solder-side layer the active -layer from the @emph{active-layer} popup menu. Now draw the outline of -the element using lines and arcs. When you're done, select everything that -makes up the element with a box selection (@emph{ drag, -}). Now select "cut selection to buffer" from the @emph{Buffer} -menu. Position the cursor over the center of pin 1 and press the left -button to load the data into the buffer. -Finally select "convert buffer to element" from the @emph{Buffer} menu. -You'll only want to create elements this way if they aren't already in the -library. It's also probably a good idea to do this before starting any of -the other aspects of a layout, but it isn't necessary. - -To display the pinout of a circuit move to it and press @emph{Shiftd} -or select @emph{show pinout} from the @emph{Objects} menu. A new window -pops up and displays the complete pinout of the element. This display can -be difficult to read if the component has been rotated 90 degrees :-( -therefore, the new window will show an un-rotated view so the pin names -are readable. -@emph{d} displays the name of one or all pins/pads inside the -Layout area, this is only for display on-screen, it has no effect on any -printing of the layout. - -You also may want to change a pin's or pad's current size by pressing -@emph{s} to increase or @emph{Shifts} to decrease it. While -this is possible, it is not recommended since care was probably taken -to define the element structure in the first place. You can also change the thickness -of the element's silkscreen outline with the same keys. You can -change whether a pin or SMD pad is rounded or square with the @emph{q}. -SMD pads should usually have squared ends. Finally, you can change whether -the non-square pins are round or octagonal with the @emph{!Ctrlo}. - -SMD elements and silkscreen objects are drawn in the "invisible object" -color if they are located on the opposite side of the board. - -For information on element connections refer to @ref{Connection Lists}. - - -@node Pastebuffer -@subsection Pastebuffer -@cindex pastebuffer, an example -@cindex example of pastebuffer handling -@cindex buffer, an example -@cindex example of buffer handling - -The line-stack and element-buffer of former releases have been replaced -by 5 (possibly more or less if changed at compile time -with the @code{MAX_BUFFER} variable in @file{globalconfig.h}) -multi-purpose buffers that are selected by -@emph{Shift1..MAX_BUFFER}. The status line shows which buffer is -the active one. -You may load data from a file or layout into them. -Cut-and-paste works too. -If you followed the instructions earlier in this chapter you should -now have several objects on the screen. Move the cross hair to one of them -and press @emph{} to toggle its selection flag. (If you drag the -mouse while the button is down, a box selection will be attempted instead -of toggling the selection.) The object -is redrawn in a different color. You also may want to try -moving the pointer while holding the third button down and -release it on a different location. This selects all objects inside the -rectangle and unselects everything else. If you want to add a box selection -to an existing selection, drag with @emph{Mod1} instead. -Dragging @emph{Shift Mod1} unselects objects in a box. -Now change to @emph{pastebuffer-mode} and select some operations from the -@emph{Buffer} menu. Copying objects to the buffer is available as -@emph{Mod1c} while cutting them uses @emph{Mod1x} as -shortcut. Both clear the buffer before new data is added. -If you use the menu entries, you have to supply a cross hair position by -pressing a mouse button. The objects are attached to the pastebuffer -relative to that cross hair location. -Element data or PCB data may be merged into an existing layout by loading -the datafiles into the pastebuffer. Both operations are available from -the @emph{File} menu or as user commands. - -@node Moving and Copying -@section Moving and Copying -@cindex moving, an example -@cindex copying, an example -@cindex example of moving -@cindex example of copying - -All objects can be moved including element-names, by -@emph{}, dragging the pointer while holding the button down -and releasing it at the new location of the object. If you use -@emph{Mod1} instead, the object is copied. Copying does not work for -element-names of course. You can move all selected objects with -@emph{Shift }. This uses the Pastebuffer, so -it will remove whatever was previously in the Pastebuffer. -Please refer to @ref{Pastebuffer}. -If you want to give a small nudge to an object, but you don't think -that the mouse will give you the fine level of control that you want, -you can position the cursor over the object, press @emph{[}, -move it with the arrow keys, then press @emph{]} when it's at the -desired position. Remember that all movements are forced onto grid coordinates, so -you may want to change the grid spacing first. - -@cindex moving, traces to a different layer -@cindex changing layers -To move a trace or group of traces to a different layer, first select -the tracks to be moved. It's easiest to do this if you shut off everything -but that layer first (i.e. silk, pins, other layers, etc). -Now set the current layer to be the new layer. -Press Shift-M to move all the selected tracks to the current layer. -See the @emph{MoveToCurrentLayer} action for more details. - -@node Loading and Saving -@section Loading and Saving -@cindex loading, an example -@cindex saving, an example -@cindex example of saving -@cindex example of loading - -After your first experience with @pcb{} you will probably want to save -your work. @kbd{:s name} passes the data to an external program which -is responsible for saving it. For details see @emph{saveCommand} in -@ref{Resources}. -Saving also is available from the @emph{File} menu, either with or -without supplying a filename. @pcb{} reuses the last -filename if you do not pass a new one to the save routine. - -To load an existing layout either select @emph{load layout data} from the -@emph{File} menu or use @kbd{:l filename}. A file select box pops up if you -don't specify a filename. Merging existing layouts into the new one is -supported either by the @emph{File} menu or by @kbd{:m filename}. - -@cindex backup -@cindex saving layouts -@cindex preventing loss of data -@cindex /tmp -@cindex directory /tmp -@cindex temporary files -@pcb{} saves a backup of the current layout at a user specified interval. -The backup filename is created by appending a dash, "-", to the @file{.pcb} filename. -For example, if you are editing the layout in @file{projects/board.pcb} then the -backup file name will be @file{projects/board.pcb-}. If the layout is new and -has not been saved yet, then the backup file name is @file{PCB.####.backup} where the "####" -will be replaced by the process ID of the currenting running copy of @pcb{}. -This default backup file name may be changed at compilation time via the -@code{BACKUP_NAME} -variable in @file{globalconfig.h}). During critical -sections of the program or when data would be lost it is saved as -@file{PCB.%i.save}. This file name may be changed at compile time -with the @code{SAVE_NAME} variable in @file{globalconfig.h}. - - -@node Printing -@section Printing -@cindex printing, an example -@cindex example of printing - -@pcb{} now has support for device drivers, -@code{PostScript}, @emph{encapsulated PostScript}, -and @emph{Gerber RS-274X} drivers are -available so far. The @emph{Gerber RS-274X} -driver additionally generates a numerical control (NC) drill file for -automated drilling, -a bill of materials file to assist in materials procurement and -inventory control, and a centroid (X-Y) file which includes the -centroid data needed -by automatic assembly (pick and place) machines. - I recommend the use of @code{GhostScript} if you -don't have a @code{PostScript} printer for handling the PostScript -output. Printing always generates -a complete set of files for a specified driver. -See the page about -the @emph{Print()} action for additional information about the filenames. -The control panel offers a number of options. Most of them are not available -for Gerber output because it wouldn't make sense, for example, to scale the gerber output -(you'd get an incorrectly made board!) The options are: - -@table @samp -@cindex device, selecting an output -@cindex output device -@item device -The top menu button selects from the available device drivers. - -@cindex rotating printout -@item rotate -Rotate layout 90 degrees counter-clockwise before printing (default). - -@cindex mirroring printout -@item mirror -Mirror layout before printing. Use this option depending -on your production line. - -@cindex color printout -@item color -Created colored output. All colors will be converted to black if this option -is inactive. - -@cindex outline printout -@item outline -Add a board outline to the output file. The size is determined by the -maximum board size changeable from the @emph{sizes} menu. The outline appears -on the top and bottom sides of the board, but not on the internal layers. -An outline can be useful for determining where to shear the board from the -panel, but be aware that it creates a copper line. Thus it has the potential -to cause short circuits if you don't leave enough room from your wiring -to the board edge. Use a viewer to see what the output outline looks like -if you want to know what it looks like. - -@cindex alignment targets -@item alignment -Additional alignment targets are added to the output. The distances between -the board outline is set by the resource @emph{alignmentDistance}. Alignment -targets should only be used if you know for certain that YOU WILL BE USING -THEM YOURSELF. It is extremely unlikely that you will want to have alignment -targets if you send gerber files to a commercial pcb manufacture to be made. - -@cindex scaling a printout -@item scaling -It's quite useful to enlarge your printout for checking the layout. -Use the scrollbar to adjust the scaling factor to your needs. - -@cindex print media -@cindex media, size of -@item media -Select the size of the output media from this menu. The user defined size -may be set by the resource @emph{media} either from one of the well known -paper sizes or by a @code{X11} geometry specification. -This entry is only available if you use @code{X11R5} or later. -For earlier releases the user defined size or, if not available, @emph{A4} -is used. -Well known size are: -@display - A3 - A4 - A5 - letter - tabloid - ledger - legal - executive -@end display - -@cindex offset of printout -@cindex print offset -@item offset -Adjust the offsets of the printout by using the panner at the right side -of the dialog box. -This entry is only available if you use @code{X11R5} or later. A zero -offset is used for earlier releases. - -@cindex DOS filenames -@item 8.3 filenames -Select this button to generate DOS compatible filenames for the output files. -The @emph{command} input area will disappear if selected. - -@cindex print command -@item commandline -Use this line to enter a command (starts with @kbd{|}) or a filename. -A %f is replaced by the current filename. -The default is set by the resource @emph{printCommand}. - -@end table - -The created file includes some labels which are guaranteed to stay unchanged -@table @samp -@item PCBMIN -identifies the lowest x and y coordinates in mil. - -@item PCBMAX -identifies the highest x and y coordinates in mil. - -@item PCBOFFSET -is set to the x and y offset in mil. - -@item PCBSCALE -is a floating point value which identifies the scaling factor. - -@item PCBSTARTDATA -@itemx PCBENDDATA -all layout data is included between these two marks. You may use them with an -@code{awk} script to produce several printouts on one piece of paper by -duplicating the code and putting some @code{translate} commands in front. -Note, the normal @code{PostScript} units are 1/72 inch. -@end table - -@node Exporting -@section Exporting a layout -@cindex Exporting a layout -@vindex Exporting a layout - -To export a layout choose @emph{Export layout} from the @emph{File} menu, then -select the desired exporter. - -@menu -* bom:: Bill of materials. -* gcode:: G-code. -* gerber:: Gerber. -* nelma:: Nelma. -* png:: Image. -* ps:: Postscript. -* eps:: Eps. -@end menu - -@node bom -@subsection Bill of materials (bom) -@cindex bom -@cindex bill of materials - -Produces a bill of materials (BOM) file and a centroid (XY) file. - -@node gcode -@subsection G-code (gcode) -@cindex gcode -@cindex g-code -@cindex cnc - -The gcode exporter can generate RS274/NGC G-CODE files to be used with a CNC mill to -produce pcb's by mechanically removing copper from the perimeter of all elements. - -The elements are enlarged in order to compensate for the cutting tool size so -that the remaining copper corresponds to the original size; however all -polygons are left unchanged and will end up being a little smaller; this is not a -problem because the electrical connection is done with traces, which are correctly -enlarged. - -A .cnc file is generated for every copper layer, with the bottom layer mirrored so -that the milling is done right; of course it's not possible to produce directly -multi-layer (more than 2) pcb's with this method, but the cnc files for -intermediate layers are generated anyways. - -A drill file is also generated, and it contains all drills regardless of the hole -size; the drilling sequence is optimized in order to require the least amount of -movement. - -The export function generates an intermediate raster image before extracting the contour -of copper elements, and this image is saved as well (in .png format) for inspection. - -When the spacing between two elements is less than the tool diameter they will merge -and no isolation will be cut between them; the control image should be checked for -this behaviour. - -Possible workarounds are: increasing spacing, decreasing the tool size, increasing -the intermediate image resolution. - -To maximize the chance of producing correct pcb's it would be better to increase -the DRC clearance to at least the tool diameter and use traces as thick as possible; -the rule is: use the largest element that will not prevent the isolation cut. - -The exporter parameters are: - -@table @b -@item basename -base name for generated files - -@item dpi -intermediate image resolution; affects precision when extracting contours - -@item mill depth -should be the copper depth - -@item safe z -Z value when moving between polygons - -@item tool radius -copper elements are enlarged by this amount - -@item drill depth -depth of drills - -@item measurement unit -for all parameters above, can be mm,um,inch,mil; g-code is always mm or inch -@end table - -All .cnc files specify Z values as parameters, so that it's easy to -change them without the need to run the exporter again. - -Operation was verified with the EMC2 g-code interpreter. - -Following is a sample layout that is converted with default settings: -@center @image{gcode,,,Sample Layout,png} - -The control image shows that the spacing is sufficient: -@center @image{gcode_control_img,,,Control Image,png} - -The final tool path follows the perimeter of all elements: -@center @image{gcode_tool_path,,,Resulting Tool Path,png} - -@node gerber -@subsection Gerber (gerber) -@cindex gerber - -Produces RS274-X (a.k.a. gerber) photo plot files and Excellon drill files. - -@node nelma -@subsection Nelma (nelma) -@cindex nelma - -Numerical analysis package export. - -@node png -@subsection Image (png) -@cindex png -@cindex image export - -Produces GIF/JPEG/PNG image files. - -@node ps -@subsection Postscript (ps) -@cindex ps -@cindex postscript - -Export as postscript. -Can be later converted to pdf. - -@node eps -@subsection Encapsulated Postscript (eps) -@cindex eps -@cindex encapsulated postscript - -Export as eps (encapsulated postscript) for inclusion in other documents. -Can be later converted to pdf. - - -@node Connection Lists -@section Connection Lists -@cindex example of connection lists -@cindex connections, creating list of - -After completing parts of your layout you may want to check if all drawn -connections match the ones you have in mind. This is probably best done -in conjunction with a net-list file: see @ref{Rats Nest}. -The following examples give more rudimentary ways to examine -the connections. -@example - 1) create at least two elements and name them - 2) create some connections between their pins - 3) optionally add some vias and connections to them -@end example - -Now select @emph{lookup connection} from the @emph{Connections} menu, -move the cursor to a pin or via and press any mouse button. @pcb{} -will look for all other pins and/or vias connected to the one you have -selected and display the objects in a different color. -Now try some of the reset options available from the same menu. - -There also is a way to scan all connections of one element. Select -@emph{a single element} from the menu and press any button at the -element's location. All connections of this element will be saved -to the specified file. -Either the layout name of the element or its canonical name is used to -identify pins depending on the one which is displayed on the screen -(may be changed by @emph{Display} menu). - -An automatic scan of all elements is initiated by choosing -@emph{all elements}. It behaves in a similar fashion to scanning a single -element except the resource @emph{resetAfterElement} -is used to determine if connections should be reset before a new element is -scanned. Doing so will produce very long lists because the power lines are -rescanned for every element. By default the resource is set to @emph{false} -for this reason. - -To scan for unconnected pins select @emph{unused pins} from the same -menu. - - -@node Arrow Tool -@section Arrow Tool -@cindex selecting, using the arrow tool -@cindex moving objects -@cindex arrow tool -@cindex tool, arrow - -Some commands mentioned earlier in this chapter also are able to operate on all -selected and visible objects. The Arrow tool is used to select/deselect -objects and also to move objects or selections. If you click and release -on an object with the Arrow tool, it will unselect everything else and -select the object. Selected objects change color to reflect that -they are selected. If you @emph{Shift} click, it will add the object to -(or remove) the object from the existing selection. If you drag with -the mouse button down with the Arrow tool, one of several things could -happen: if you first pressed the button on a selected object, you -will be moving the selection to where you release the button. If you -first pressed the button on an unselected object, you will be moving -that object. If you first pressed the button over empty space, you -will be drawing a box to select everything inside the box. The @emph{Shift} -key works the same way with box selections as it does with single objects. - -Moving a single un-selected object is different from moving a selection. -First of all, you can move the end of line, or a point in a polygon this -way which is impossible by moving selections. Secondly, if rubber banding -is turned on, moving a single object will rubber-band the attached lines. -Finally, it is faster to move a single object this way since there is no need -to select it first. - -You can select any visible object unless it is locked. If you select an -object, then turn off its visibility with the Layer controls, it won't -be moved if you move the remaining visible selection. - -If you have not configured to use strokes in the @pcb{} user interface, then -the middle mouse button is automatically bound to the arrow tool, regardless -of the active tool (which is bound to the first mouse button). So using -the middle button any time is just like using the first mouse button -with the Arrow tool active. - -The entries of the @emph{Selection} menu are hopefully self-explanatory. -Many of the @emph{Action Commands} can take various key words that make -them function on all or some of the selected items. - -@node Rats Nest -@section Rats Nest -@cindex rats nest -@cindex netlist -@cindex rat-line - -If you have a netlist that corresponds to the layout you are working on, you -can use the rats-nest feature to add rat-lines to the layout. -First you will need to load a netlist file (see @emph{:rn}, -@ref{User Commands}). -@emph{w} adds rat-lines on the active layer using the current -line thickness shown in the status line (usually you'll want them to be thin lines). -Only those rat-lines that fill in missing connectivity (since you have -probably routed some connections already) are added. -If the layout is already completely wired, nothing will be added, and you will -get a message that the wiring is complete. - -Rat-lines are lines having the special property that they only connect to pins and -pads at their end points. Rat-lines may be drawn differently to other lines -to make them easier to identify since they have special behavior and cannot -remain in a completed layout. -Rat-lines are added in the minimum length straight-line tree pattern -(always ending on pins or pads) that satisfies the missing connectivity in the circuit. -Used in connection with moves and rotates of the elements, they are extremely useful for -deciding where to place elements on the board. The rat-lines will always automatically -rubberband to the elements whether or not the rubberband mode is on. The only way for -you to move them is by moving the parts they connect to. -This is because it is never desirable to have the rat-lines disconnected from -their element pins. Rat-lines will normally criss-cross -all over which gives rise to the name "rats nest" describing a layout connected with -them. If a SMD pad is unreachable on the active layer, a warning will be issued -about it and the rat-line to that pad will not be generated. - -A common way to use rats nests is to place some -elements on the board, add the rat-lines, and then use a series of moves/rotates of the -elements until the rats nest appears to have minimum tangling. You may want to iterate this step -several times. Don't worry if the layout looks messy - as long as you can get a sense for whether -the criss-crossing is better or worse as you move things, you're fine. -After moving some elements around, you may want to optimize the rats nest @emph{o} -so that the lines are drawn between the closest points (this can change once you've moved components). -Adding rat-lines only to selected pads/pins (@emph{Shiftw}) -is often useful to layout a circuit a little bit at a time. -Sometimes you'll want to delete all the rat-lines (@emph{e}) or -selected rat-lines (@emph{Shifte}) in order to reduce confusion. -With a little practice you'll be able to achieve a near optimal component placement with -the use of a rats nest. - -Rat-lines are not only used for assisting your element placement, they can also help -you to route traces on the board. -Use the @emph{m} to convert a rat-line under the cursor into -a normal line on the active layer. -Inserting a point into a rat-line will also cause the two new lines to be normal lines -on the board. -Another way that you can use rat-lines is to -use the @emph{f} with the cursor over a pad or pin. All of the pins and -pads and rat-lines belonging to that net will be highlighted. This is a helpful way to -distinguish one net from the rest of the rats nest. You can then route those tracks, -turn off the highlighting (@emph{Shiftf}) and repeat the process. This will work even -if the layer that the rat-lines reside on is made invisible - so only the pins and pads -are highlighted. -Be sure to erase the rat-lines (@emph{e} erases them all) once you've -duplicated their connectivity by adding your own lines. -When in doubt, the @emph{o} will delete only those -rat-lines that are no longer needed. - -If connections exist on the board that are not listed in the netlist when -@emph{w} is pressed, warning messages are issued and the affected pins and -pads are drawn in a special @emph{warnColor} until the next @emph{Notify()} event. -If the entire layout agrees completely with the netlist, a message informs you that -the layout is complete and no rat-lines will be added (since none are needed). -If the layout is complete, but still has rat-lines then you will be warned -that rat-lines remain. If you get no message at all it's probably because some -elements listed in the net list can't be found and where reported in an earlier -message. -There shouldn't be any rat-lines left in a completed layout, only normal lines. - -The @emph{Shiftw} is used to add rat-lines to only those missing connections among -the selected pins and pads. This can be used to add rat-lines in an incremental -manner, or to force a rat-line to route between two points that are not the -closest points within the net. Often it is best to add the rats nest in an incremental fashion, laying -out a sub-section of the board before going further. This is easy to accomplish since -new rat-lines are never added where routed connectivity already makes the necessary -connections. - -@node Design Rule Checking -@section Design Rule Checking -@cindex design rule checking -@cindex drc -@cindex spacing, minimum -@cindex overlap, minimum - -After you've finished laying out a board, you may want to check -to be certain that none of your interconnections are too closely -spaced or too tenuously touching to be reliably fabricated. The design -rule checking (DRC) function does this for you. Use the command ":DRC()" (without -the quotes of course) to invoke the checker. If there are no problem areas, -you'll get a message to that effect. If any problem is encountered, you will get -a message about it and the affected traces will be highlighted. One part of the -tracks of concern will be selected, while the other parts of concern will have the -"FindConnection" highlighting. The screen will automatically be centered in the -middle of the object having the "FindConnection" (Green) highlighting. The middle of -the object is also the coordinates reported to be "near" the problem. The actual trouble -region will be somewhere on the boundary of this object. If the two parts are -from different nets then there is some place where they approach each -other closer than the minimum rule. If the parts are from the same net, then -there is place where they are only barely connected. Find that place and connect -them better. - -After a DRC error is found and corrected you must run the DRC again because -the search for errors is halted as soon as the first problem is found. Unless you've -been extremely careless there should be no more than a few design rule errors -in your layout. The DRC checker does not check for minimum spacing rules to -copper text, so always be very careful when adding copper text to a layout. -The rules for the DRC are specified in the application resource file. The minimum -spacing value (in mils) is given by the @emph{Settings.Bloat} value. The default -is 7 mils. The minimum touching overlap (in mils) is given by the -@emph{Settings.Shrink} value. This value defaults to 5 mils. Check with your -fabrication process people to determine the values that are right for you. - -If you want to turn off the highlighting produced by the DRC, perform an -undo (assuming no other changes have been made). To restore the highlighting, -use redo. The redo will restore the highlighting quickly without re-running -the DRC checker. - -@node Trace Optimizer -@section Trace Optimizer -@cindex trace optimizer -@cindex optimizer - -PCB includes a flexible trace optimizer. The trace optimizer can be run -after auto routing or hand routing to clean up the traces. - -@table @b -@item Auto-Optimize -Performs debumpify, unjaggy, orthopull, vianudge, and viatrim, in that -order, repeating until no further optimizations are performed. - -@item Debumpify -Looks for U shaped traces that can be shortened or eliminated. - -@item Unjaggy -Looks for corners which could be flipped to eliminate one or more -corners (i.e. jaggy lines become simpler). - -@item Vianudge -Looks for vias where all traces leave in the same direction. Tries to -move via in that direction to eliminate one of the traces (and thus a -corner). - -@item Viatrim -Looks for traces that go from via to via, where moving that trace to a -different layer eliminates one or both vias. - -@item Orthopull -Looks for chains of traces all going in one direction, with more traces -orthogonal on one side than on the other. Moves the chain in that -direction, causing a net reduction in trace length, possibly eliminating -traces and/or corners. - -@item SimpleOpts -Removing unneeded vias, replacing two or more trace segments in a row -with a single segment. This is usually performed automatically after -other optimizations. - -@item Miter -Replaces 90 degree corners with a pair of 45 degree corners, to reduce -RF losses and trace length. - -@end table - -@node Searching for elements -@section Searching for elements -@cindex Searching for elements -@vindex Searching for elements - -To locate text or a specific element or grouping of similar elements -choose @samp{Select by name} from the @b{Select} menu, then choose the -appropriate subsection. At the bottom of the screen the prompt -@emph{pattern:} appears. Enter the text or @ref{Regular Expressions} -of the text to be found. Found text will be highlighted. - -@node Measuring distances -@section Measuring distances -@cindex Measuring distances -@vindex Measuring distances - -To measure distances, for example the pin-to-pin pitch of a part to -validate a footprint, place the cursor at the starting -measurement point, then press @emph{!Ctrlm}. This marks the -current location with a @emph{X}. The @emph{X} mark is now the zero point -origin for the relative cursor position display. The cursor display -shows both absolute position and position relative to the mark as -the mouse is moved away from the mark. If a mark is already present, -the mark is removed and the cursor display stops displaying relative -cursor coordinates. - -@node Vendor drill mapping -@section Vendor Drill Mapping -@cindex Vendor rules -@cindex Vendor mapping -@cindex Drill table -@cindex Vendor drill table - -@pcb{} includes support for mapping drill holes to a specified set -of sizes used by a particular vendor. Many PCB manufacturers have a -prefered set of drill sizes and charge extra when others are used. -The mapping can be performed on an existing design and can also be -enabled to automatically map drill holes as vias and elements are -instantiated. - -The first step in using the vendor drill mapping feature is to create -a resource file describing the capabilities of your vendor. The file -format is the resource file format described in @ref{Resource Syntax}. -A complete example is given below. - -@example -# Optional name of the vendor -vendor = "Vendor Name" - -# units for dimensions in this file. -# Allowed values: mil/inch/mm -units = mil - -# drill table -drillmap = @{ - # When mapping drill sizes, select the nearest size - # or always round up. Allowed values: up/nearest - round = up - - # The list of vendor drill sizes. Units are as specified - # above. - 20 - 28 - 35 - 38 - 42 - 52 - 59.5 - 86 - 125 - 152 - - # optional section for skipping mapping of certain elements - # based on reference designator, value, or description - # this is useful for critical parts where you may not - # want to change the drill size. Note that the strings - # are regular expressions. - skips = @{ - @{refdes "^J3$"@} # Skip J3. - @{refdes "J3"@} # Skip anything with J3 as part of the refdes. - @{refdes "^U[1-3]$" "^X.*"@} # Skip U1, U2, U3, and anything starting with X. - @{value "^JOHNSTECH_.*"@} # Skip all Johnstech footprints based on the value of a part. - @{descr "^AMP_MICTOR_767054_1$"@} # Skip based on the description. - @} -@} - -# If specified, this section will change the current DRC -# settings for the design. Units are as specified above. -drc = @{ - copper_space = 7 - copper_width = 7 - silk_width = 10 - copper_overlap = 4 -@} -@end example - -The vendor resource is loaded using the @emph{LoadVendor} action. -This is invoked by entering: -@example -:LoadVendor(vendorfile) -@end example -from within @pcb{}. Substitute the file name of your vendor -resource file for @samp{vendorfile}. This action will load the vendor -resource and modify all the drill holes in the design as well as the -default via hole size for the various routing styles. - -Once a vendor drill map has been loaded, new vias and elements will -automatically have their drill hole sizes mapped to the vendor drill -table. Automatic drill mapping may be disabled under the ``Settings'' -menu. To re-apply an already loaded vendor drill table to a design, -choose ``Apply vendor drill mapping'' from the ``Connects'' menu. - -See @ref{Actions} for a complete description of the actions associated -with vendor drill mapping. - -Note that the expressions used in the @code{skips} section are regular -expressions. See @ref{Regular Expressions} for an introduction to -regular expressions. - -@c --------------------------- Autorouter Chapter ------------------------------- -@node Autorouter -@chapter Autorouter -@cindex autorouter - -@pcb{} includes an autorouter which can greatly speed up the -layout of a circuit board. The autorouter is a rectangle-expansion -type of autorouter based on -``A Method for Gridless Routing of Printed Circuit Boards'' by -A. C. Finch, K. J. Mackenzie, G. J. Balsdon, and G. Symonds in the -1985 Proceedings of the 22nd ACM/IEEE Design Automation Conference. -This reference is available from the ACM Digital Library at -@url{http://www.acm.org/dl} for those with institutional or personal -access to it. It's also available from your local engineering -library. The reference paper is not needed for using the autorouter. - -Before using the autorouter, all elements need to be loaded into the -layout and placed and the connectivity netlist must be loaded. Once -the elements have been placed and the netlist loaded, the following -steps will autoroute your design. - -@enumerate -@item Turn off visibility of any layers that you don't want the router -to use. - -@item Turn of via visibility if you don't want the router to use any -new vias. - -@item Use only plain rectangles for power/ground planes that you want - the router to use [use the rectangle tool!] - -@item Make at least one connection from any plane you want the router to - use to the net you want it to connect to. - -@item Draw continuous lines (on all routing layers) to outline keep-out - zones if desired. - -@item Use routing styles in the netlist to have per-net routing styles. - Note that the routing style will be used for an entire net. This means - if you have a wide metal setting for a power net you will need to manually - route breakouts from any fine pitch parts on their power pins because - the router will not be able to change to a narrow trace to connect - to the part. - -@item Set the current routing style to whatever you'd like the router to - use for any nets not having a defined route style in the netlist. - -@item Disable any nets that you don't want the autorouter to route - (double-click them in the netlist window to add/remove the *) - - NOTE: If you will be manually routing these later not using - planes, it is usually better to let the autorouter route them then rip - them up yourself afterwards. If you plan to use a ground/power plane - manually, consider making it from one or more pure rectangles and - letting the autorouter have a go at it. - -@item Create a fresh rat's nest. ('E' the 'W') - -@item Select ``show autorouter trials'' in the settings menu if you want - to watch what's happening - -@item Choose ``autoroute all rats'' in the connection menu. - -@item If you really want to muck with the router because you have a - special design, e.g. all through-hole components you can mess with - layer directional costs by editing the autoroute.c source file and - changing the directional costs in lines 929-940. and try again. Even - more mucking about with costs is possible in lines 4540-4569, but it's - probably not such a good idea unless you really just want to - experiment. - -@end enumerate - -After the design has been autorouted, you may want to run the trace -optimizer. See section @ref{Trace Optimizer} for more information on -the trace optimizer. - - -@c --------------------------- User Commands chapter ------------------------------- -@node User Commands -@chapter User Commands - -@cindex user commands -@cindex entering user commands -The entering of user-commands is initiated by the action routine -@emph{Command()} (normally bound to the @code{(":")} character) which -replaces the bottom statusline with an input area or opens a separate -command window. It is finished by either @emph{Return} or -@emph{Escape} to confirm or to abort. These two key-bindings -cannot be changed from the resource file. The triggering event, -normally a key press, is ignored. - -Commands can be entered in one of two styles, command entry syntax: -``@emph{Command arg1 arg2}'' or action script syntax ``@emph{Action1(arg1, -arg2); Action2(arg1, arg2);}''. Quoting arguments works similar to -bash quoting: - -@itemize -@item A backslash (\) is the escape character. It preserves the literal -value of the next character that follows. To get a literal '\' use -"\\". - -@item Enclosing characters in single quotes preserves the literal value of -each character within the quotes. A single quote may not occur -between single quotes, even when preceded by a blackslash. - -@item Enclosing characters in double quotes preserves the literal value of -all characters within the quotes, with the exception of '\' which -maintains its special meaning as an escape character. -@end itemize - -There are simple @emph{usage} dialogs for each command and one for the -complete set of commands. - -@table @samp - -@findex :l -@cindex loading layouts -@cindex layout, loading a -@item l [filename] -Loads a new datafile (layout) and, if confirmed, overwrites any existing unsaved data. -The filename and the searchpath (@emph{filePath}) are passed to the -command defined by @emph{fileCommand}. -If no filename is specified a file select box will popup. - -@findex :le -@cindex loading elements to buffer -@cindex element, loading to buffer -@item le [filename] -Loads an element description into the paste buffer. -The filename and the searchpath (@emph{elementPath}) are passed to the -command defined by @emph{elementCommand}. -If no filename is specified a file select box will popup. - -@findex :m -@cindex loading a layout to buffer -@cindex merging layouts -@cindex layout, loading to buffer -@cindex layout, merging a -@item m [filename] -Loads an layout file into the paste buffer. -The filename and the searchpath (@emph{filePath}) are passed to the -command defined by @emph{fileCommand}. -If no filename is specified a file select box will popup. - -@findex :q -@cindex exit -@cindex quit -@item q[!] -Quits the program without saving any data (after confirmation). -q! doesn't ask for confirmation, it just quits. - -@findex :s -@cindex saving layouts -@cindex layout files, saving of -@item s [filename] -Data and the filename are passed to the command defined by the resource -@emph{saveCommand}. It must read the layout data from @emph{stdin}. -If no filename is entered, either the last one is used -again or, if it is not available, a file select box will pop up. - -@findex :rn -@cindex rat's nest -@cindex layout-name -@item rn [filename] -Reads in a netlist file. If no filename is given -a file select box will pop up. -The file is read via the command defined by the -@emph{RatCommand} resource. The command must send its output to @emph{stdout}. - -Netlists are used for generating rat's nests (see @ref{Rats Nest}) and for -verifying the board layout (which is also accomplished by the @emph{Ratsnest} -command). - -@findex :w[q] -@cindex saving layouts -@cindex layout files, saving of -@item w[q] [filename] -These commands have been added for the convenience of @code{vi} users and -have the same functionality as @emph{s} combined with @emph{q}. - -@findex :actionCommand() -@cindex action command -@cindex Actions, initiating -@item actionCommand -Causes the actionCommand to be executed. This allows you to initiate actions -for which no bindings exist in the resource file. It can be used to initiate any -action with whatever arguments you enter. This makes it possible to do things -that otherwise would be extremely tedious. For example, to change the drilling -hole diameter of all vias in the layout to 32 mils, you could select everything using the -selection menu, then type "@emph{:ChangeDrillSize(SelectedVias, 32)}". (This will -only work provided the via's diameter is sufficiently large to accommodate a 32 mil hole). -Another example might be to set the grid to 1 mil by typing "@emph{:SetValue(Grid, 1)}". -Note that some actions use the current cursor location, so be sure to place the cursor -where you want before entering the command. This is one of my favorite new -features in 1.5 and can be a powerful tool. Study the @ref{Actions} section to -see what actions are available. - -@end table - - -@c --------------------------- chapter 4 ------------------------------- -@node Command-Line Options -@chapter Command-Line Options -@cindex starting @pcb{} -@cindex command-line options - -The synopsis of the pcb command is: - -@code{pcb [OPTION ...] [LAYOUT-FILE.pcb]} to start the application in GUI mode, - -@noindent or - -@code{pcb [-h | -V | --copyright]} for a list of options, version, and copyright, - -@noindent or - -@code{pcb -p [OPTION ...] [LAYOUT-FILE.pcb]} to print a layout, - -@noindent or - -@code{pcb -x HID [OPTION ...] [LAYOUT-FILE.pcb]} to export. - -@noindent Possible values for the parameter @samp{HID} are: - @table @samp - @item bom - Export a bill of materials - @item gcode - Export to G-Code - @item gerber - Export RS-274X (Gerber) - @item nelma - Numerical analysis package export - @item png - export GIF/JPEG/PNG - @item ps - export postscript - @item eps - export encapsulated postscript -@end table - -@noindent There are several resources which may be set or reset in addition to the -standard toolkit command-line options. For a complete list refer to -@ref{Resources}. - - -@include options.texi - - - -@c --------------------------- chapter 5 ------------------------------- -@node X11 Interface -@chapter X11 Interface -@cindex X11 - -This chapter gives an overview about the additional @code{X11} resources which -are defined by @pcb{} as well as the defined action routines. - -@menu -* Resources:: Non-standard @code{X11} application resources. -* Actions:: A list of available action routines. -* Translations:: A list of the default key translations (as shipped). -@end menu - - -@node Resources -@section Non-Standard X11 Application Resources -@cindex resources -@cindex X11 resources - -In addition to the toolkit resources, @pcb{} defines the -following resources: - -@table @samp - -@vindex absoluteGrid -@cindex grid -@item absoluteGrid (boolean) -Selects if either the grid is relative to the position where it has changed -last or absolute, the default, to the origin (0,0). - -@vindex alignmentDistance -@cindex alignment -@item alignmentDistance (dimension) -Specifies the distance between the boards outline to the alignment targets. - -@vindex allDirectionLines -@cindex lines, clipping to 45 degree -@cindex clipping lines to 45 degree -@item allDirectionLines (boolean) -Enables (default) or disables clipping of new lines to 45 degree angles. - -@vindex backgroundImage -@cindex background -@item backgroundImage (string) -If specified, this image will be drawn as the background for the -board. The purpose of this option is to allow you to use a scan of an -existing layout as a prototype for your new layout. To do this, there -are some limitations as to what this image must be. The image must be -a PPM binary image (magic number @samp{P6}). It must have a maximum -pixel value of 255 or less (i.e. no 16-bit images). It must represent -the entire board, as it will be scaled to fit the board dimensions -exactly. Note that it may be scaled unevenly if the image doesn't -have the same aspect ratio of your board. You must ensure that the -image does not use more colors than are available on your system -(mostly this is for pseudo-color displays, like old 8-bit displays). -For best results, I suggest the following procedure using The Gimp: -Load your image (any type). Image->Scale if needed. -Image->Colors->Curves and for each of Red, Green, and Blue channel -move the lower left point up to about the 3/4 line (value 192). This -will make your image pale so it doesn't interfere with the traces -you'll be adding. Image->Mode->Indexed and select, say, 32 colors -with Normal F-S dithering. File->Save As, file type by extension, -use @file{.ppm} as the extension. Select Raw formatting. - -@vindex backupInterval -@cindex backup -@item backupInterval (int) -@pcb{} has an automatic backup feature which saves the current data -every n seconds. The default is @emph{300} seconds. A value of zero disables -the feature. The backup file is named @file{/tmp/PCB.%i.backup} by -default (this may have been changed at compilation time via the -@code{BACKUP_NAME} -variable in @file{globalconfig.h}). -@emph{%i} is replaced by the process ID. -See also, the command-line option @emph{--backup-interval}. - -@vindex bloat -@cindex bloat -@cindex drc -@item Bloat (dimension) -Specifies the minimum spacing design rule in mils. - -@vindex connectedColor -@cindex colors -@cindex connections, colors -@item connectedColor (color) -All pins, vias, lines and rectangles which are selected during a connection -search are drawn with this color. The default value is determined by -@emph{XtDefaultForeground}. - -@vindex cross hairColor -@cindex colors -@cindex cursor color -@item cross hairColor (color) -This color is used to draw the cross hair cursor. The color is a result of -a @emph{XOR} operation with the contents of the Layout area. The result -also depends on the default colormap of the @code{X11} server because only -the colormap index is used in the boolean operation and @pcb{} doesn't -create its own colormap. The default setting is @emph{XtDefaultForeground}. - -@vindex elementColor -@vindex elementSelectedColor -@cindex colors -@cindex element, color -@item elementColor (color) -@itemx elementSelectedColor (color) -The elements package part is drawn in these colors, for normal and selected -mode, respectively, which both default to @emph{XtDefaultForeground}. - -@vindex elementCommand -@cindex element, command -@cindex element, files -@cindex loading elements -@cindex preprocessing element data -@cindex unix command -@cindex m4 -@item elementCommand (string) -@pcb{} uses a user defined command to read element files. This resources -is used to set the command which is executed by the users default shell. -Two escape sequences are defined to pass the selected filename (%f) and the -current search path (%p). The command must write the element data -to its standard output. The default value is -@example - M4PATH="%p";export M4PATH;echo 'include(%f)' | m4 -@end example -Using the GNU version of @code{m4} is highly recommended. -See also, the command-line option @emph{--element-command}. - -@vindex elementPath -@cindex searchpath for element files -@cindex path for element files -@cindex element, files -@cindex loading elements -@item elementPath (string) -A colon separated list of directories or commands (starts with '|'). -The path is passed to the program specified in @emph{elementCommand} together -with the selected element name. A specified command will be executed in order -to create entries for the fileselect box. It must write its results to -@emph{stdout} one entry per line. -See also, the user-command @emph{le[!]}. - -@vindex fileCommand -@cindex file load command -@cindex layout files -@cindex loading layouts -@cindex preprocessing layout data -@cindex unix command -@cindex cat -@item fileCommand (string) -The command is executed by the user's default shell whenever existing layout -files are loaded. Data is read from the command's standard output. -Two escape sequences may be specified to pass the selected filename (%f) -and the current search path (%p). The default value is: -@example - cat %f -@end example -See also, the command-line option @emph{--file-command}. - -@vindex filePath -@cindex searchpath for layout files -@cindex path for layout files -@cindex layout files -@cindex loading layouts -@item filePath (string) -A colon separated list of directories or commands (starts with '|'). -The path is passed to the program specified in @emph{fileCommand} together -with the selected filename. A specified command will be executed in order -to create entries for the fileselect box. It must write its results to -@emph{stdout} one entry per line. -See also, the user-command @emph{l[!]}. - -@vindex fontCommand -@cindex font command -@cindex font files -@cindex loading fonts -@cindex loading symbols -@cindex preprocessing font data -@cindex unix command -@cindex cat -@item fontCommand (string) -Loading new symbol sets also is handled by an external command. You again -may pass the selected filename and the current search path by passing -%f and %p in the command string. Data is read from the commands standard -output. This command defaults to -@example - cat %f -@end example -See also, the command-line option @emph{--font-command}. - -@vindex fontFile -@cindex default font -@cindex symbols -@item fontFile (string) -The default font for new layouts is read from this file which is searched -in the directories as defined by the resource @emph{fontPath}. -Searching is only performed if the filename does not contain a directory -component. -The default filename is @file{default_font}. - -@vindex fontPath -@cindex searchpath for font files -@cindex path for font files -@cindex font files -@cindex loading fonts -@cindex loading symbols -@item fontPath (string) -This resource, a colon separated list of directories, defines the searchpath -for font files. See also, the resource @emph{fontFile}. - -@vindex grid -@cindex grid -@cindex cursor steps -@item grid (int) -This resources defines the initial value of one cursor step. It defaults -to @emph{100 mil} and any changes are saved together with the layout data. - -@vindex gridColor -@cindex colors -@cindex grid color -@item gridColor (color) -This color is used to draw the grid. The color is a result of -a @emph{INVERT} operation with the contents of the Layout area. The result -also depends on the default colormap of the @code{X11} server because only -the colormap index is used in the boolean operation and @pcb{} doesn't -create its own colormap. The default setting is @emph{XtDefaultForeground}. - -@vindex invisibleObjectsColor -@cindex colors -@cindex element, color -@item invisibleObjectsColor (color) -Elements located on the opposite side of the board are drawn in this color. -The default is @emph{XtDefaultForeground}. - -@vindex layerColor -@vindex layerSelectedColor -@cindex colors -@cindex layers, colors -@item layerColor1..MAX_LAYER (color) -@itemx layerSelectedColor1..MAX_LAYER (color) -These resources define the drawing colors of the different layers in -normal and selected state. All values are preset to @emph{XtDefaultForeground}. - -@vindex layerGroups -@cindex layers, groups -@cindex groups -@item layerGroups (string) -The argument to this resource is a colon separated list of comma separated -layer numbers (1..MAX_LAYER). All layers within one group are switched on/off -together. The default setting is @emph{1:2:3:...:MAX_LAYER} which means -all layers are handled separately. Grouping layers one to three looks like -@emph{1,2,3:4:...:MAX_LAYER} - -@vindex layerName -@cindex layer, name of -@item layerName1..MAX_LAYER (string) -The default name of the layers in a new layout are determined by these -resources. The defaults are empty strings. - -@vindex libraryCommand -@cindex library command -@cindex loading elements -@cindex unix command -@item libraryCommand (string) -@pcb{} uses a command to read element data from libraries. -The resources is used to set the command which is executed by the users -default shell. Three escape sequences are defined to pass the selected -filename (%f), the current search path (%p) as well (%a) as the three -parameters @emph{template}, @emph{value} and @emph{package} to the command. -It must write the element data to its standard output. The default value is -@example - NONE/share/pcb/oldlib/QueryLibrary.sh %p %f %a -@end example - -@vindex elementContentsCommand -@cindex library contents command -@cindex listing library contents -@cindex unix command -@item libraryContentsCommand (string) -Similar to @emph{libraryCommand}, @pcb{} uses the command specified -by this resource to list the contents of a library. -@example - NONE/share/pcb/oldlib/ListLibraryContents.sh %p %f -@end example -is the default. - -@vindex libraryFilename -@cindex default library -@cindex library name -@item libraryFilename (string) -The resource specifies the name of the library. The default value is -@emph{pcblib} unless changed at compile time -with the @code{LIBRARYFILENAME} variable in @file{globalconfig.h}. - -@vindex libraryPath -@cindex searchpath for libraries -@cindex path for libraries -@cindex library searchpath -@item libraryPath (string) -A colon separated list of directories that will be passed to the commands -specified by @emph{elementCommand} and @emph{elementContentsCommand}. - -@vindex lineThickness -@cindex lines, size -@cindex size of lines -@cindex thickness of lines -@item lineThickness (dimension) -The value, in the range [1..250] (the range may be changed at compile -time with the @code{MIN_LINESIZE} and @code{MAX_LINESIZE} variables in -@file{globalconfig.h}), defines the -initial thickness of new lines. The value is preset to @emph{ten mil}. - -@vindex media -@cindex media -@cindex media margin -@cindex print media -@item media ( | x+-+-) -The default (user defined) media of the @code{PostScript} device. Predefined -values are @emph{a3}, @emph{a4}, @emph{a5}, @emph{letter}, @emph{tabloit}, -@emph{ledger}, @emph{legal}, and @emph{executive}. -The second way is to specify the medias width, height and margins in mil. -The resource defaults to @emph{a4} size unless changed at compile time -with the @code{DEFAULT_MEDIASIZE} variable in @file{globalconfig.h}. - -@vindex offLimitColor -@cindex colors -@cindex off limit color -@item offLimitColor (color) -The area outside the current maximum settings for width and height is drawn -with this color. The default value is determined by @emph{XtDefaultBackground}. - -@vindex pinColor -@vindex pinSelectedColor -@cindex colors -@cindex pin color -@item pinColor (color) -@itemx pinSelectedColor(color) -This resource defines the drawing color of pins and pads in both states. -The values are preset to @emph{XtDefaultForeground}. - -@vindex pinoutFont0..6 -@cindex font, used for pin names -@cindex pinout, font to display pin names -@item pinoutFont (string) -This fonts are used to display pin names. There is one font for each zoom -value. The values are preset to @emph{XtdefaultFont}. - -@vindex pinoutNameLength -@cindex namelength of pins -@cindex pin, name of -@cindex length of a pin name -@item pinoutNameLength (int) -This resource limits the number of characters which are displayed for -pin names in the pinout window. By default the string length is limited -to @emph{eight} characters per name. - -@vindex pinoutOffsetX -@vindex pinoutOffsetY -@cindex offset of pinout -@item pinoutOffsetX (int) -@itemx pinoutOffsetY (int) -These resources determine the offset in @emph{mil} of the circuit from the -upper left corner of the window when displaying pinout information. -Both default to @emph{100 mil}. - -@vindex pinoutTextOffsetX -@vindex pinoutTextOffsetY -@cindex offset of pinnames -@item pinoutTextOffsetX (int) -@itemx pinoutTextOffsetY (int) -The resources determine the distance in mil between the drilling hole of a pin -to the location where its name is displayed in the pinout window. -They default to @emph{X:50} and @emph{Y:0}. - -@vindex pinoutZoom -@cindex pinout, zoomfactor of display -@cindex zoom of pinout window -@item pinoutZoom (int) -Sets the zoom factor for the pinout window according to the formula: -scale = 1:(2 power value). Its default value is @emph{two} which results in -a @emph{1:4} scale. - -@vindex printCommand -@cindex printing -@item printCommand (string) -Default file for printouts. If the name starts with a '|' the output -is piped through the command. A %f is replaced by the current filename. -There is no default file or command. - -@vindex raiseLogWindow -@cindex log window -@cindex messages -@item raiseLogWindow (boolean) -The log window will be raised when new messages arrive if this resource -is set @emph{true}, the default. - -@vindex ratCommand -@cindex rats nest -@cindex netlist -@item ratCommand (string) -Default command for reading a netlist. A %f is replaced by the netlist -filename. Its default value is "@emph{cat %f}". - -@vindex ratPath -@cindex rats nest -@cindex netlist -@item ratPath (string) -Default path to look for netlist files. It's default value is "." - -@vindex resetAfterElement -@cindex connections, reseting after element -@cindex reseting found connections -@item resetAfterElement (boolean) -If set to @emph{true}, all found connections will be reset before a new -element is scanned. This will produce long lists when scanning the whole -layout for connections. The resource is set to @emph{false} by default. -The feature is only used while looking up connections of all elements. - -@vindex ringBellWhenFinished -@cindex keyboard bell -@item ringBellWhenFinished (boolean) -Whether to ring the bell (the default) when a possibly lengthy operation -has finished or not. -See also, the command-line option @emph{--ring-bell-finished}. - -@vindex routeStyle -@cindex routing style -@item routeStyle (string) -Default values for the menu of routing styles (seen in the sizes menu). -The string is a comma separated list of name, line thickness, -via diameter, and via drill size. -e.g. "Fat,50,100,40:Skinny,8,35,20:75Ohm,110,110,20" -See also, the command-line option @emph{--route-styles} and @emph{Sizes Menu} - -@vindex rubberBandMode -@cindex move -@cindex rubberband -@cindex rotate -@item rubberBandMode (boolean) -Whether rubberband move and rotate (attached lines stretch like -rubberbands) is enabled (the default). - -@vindex saveCommand -@cindex file save command -@cindex layout files -@cindex saving layouts -@cindex postprocessing layout data -@cindex unix command -@cindex cat -@item saveCommand (string) -This command is used to save data to a layout file. The filename may be -indicated by placing @code{%f} in the string. It must read the data from -its standard input. The default command is: -@example - cat - > %f -@end example -See also, the command-line option @emph{--save-command}. - -@vindex saveInTMP -@cindex backup -@cindex saving layouts -@cindex preventing loss of data -@cindex temporary files -@cindex /tmp -@cindex directory /tmp -@item saveInTMP (boolean) -Enabling this resource will save all data which would otherwise be lost -in a temporary file @file{/tmp/PCB.%i.save}. The file name may -be changed at compile time -with the @code{EMERGENCY_NAME} variable in @file{globalconfig.h}. -. -@emph{%i} is replaced by the process ID. -As an example, loading a new layout when the old one hasn't been saved would -use this resource. -See also, the command-line option @emph{--save-in-tmp}. - -@vindex saveLastCommand -@cindex saving last entered user command -@cindex inputfield, saving entered command-line -@item saveLastCommand (boolean) -Enables the saving of the last entered user command. The option is -@emph{disabled} by default. -See also, the command-line option @emph{--save-last-command}. - -@vindex shrink -@cindex shrink -@cindex drc -@item Shrink (dimension) -Specifies the minimum overlap (touching) design rule in mils. - -@vindex size -@cindex default layout size -@cindex layout, default size of -@item size (x) -Defines the width and height of a new layout. The default is -@emph{7000x5000} unless changed at compile time -with the @code{DEFAULT_SIZE} variable in @file{globalconfig.h}. - - -@vindex stipplePolygons -@cindex polygon -@cindex display -@item stipllePolygons (boolean) -Determines whether to display polygons on the screen with a stippled -pattern. Stippling can create some amount of transparency so that -you can still (to some extent) see layers beneath polygons. -It defaults to False. - -@vindex textScale -@cindex text, default scaling -@cindex default text scaling -@item textScale (dimension) -The font scaling in percent is defined by this resource. The default is -@emph{100} percent. - -@vindex useLogWindow -@cindex log window -@cindex messages -@item useLogWindow (boolean) -Several subroutines send messages to the user if an error occurs. -This resource determines if they appear inside the log window or as a separate -dialog box. See also, the resource @emph{raiseLogWindow} and the command line -option @emph{-loggeometry}. -The default value is @emph{true}. - -@vindex viaColor -@vindex viaSelectedColor -@cindex colors -@cindex vias, color -@item viaColor (color) -@item viaSelectedColor (color) -This resource defines the drawing color of vias in both states. -The values are preset to @emph{XtDefaultForeground}. - -@vindex viaThickness -@vindex viaDrillingHole -@cindex vias, size -@cindex size of vias -@cindex thickness of vias -@item viaThickness (dimension) -@itemx viaDrillingHole (dimension) -The initial thickness and drilling hole of new vias. The values must be in the -range [30..400] (the range may be changed at compile -time with the @code{MIN_PINORVIASIZE} and @code{MAX_PINEORVIASIZE} variables in -@file{globalconfig.h}), with at least 20 -mil of copper. -The default thickness is @emph{40 mil} and the default drilling hole is -@emph{20 mil}. - -@vindex volume -@cindex speaker volume -@cindex volume of speaker -@item volume (int) -The value is passed to @code{XBell()} which sets the volume of the @code{X} -speaker. -The value lies in the range -100..100 and it defaults to the maximum volume of -@emph{100}. - -@vindex warnColor -@cindex colors -@cindex color, warning -@item warnColor (color) -This resources defines the color to be used for drawing pins and pads when -a warning has been issued about them. - -@vindex zoom -@cindex zoom of Layout area -@item zoom (int) -The initial value for output scaling is set according to the following -formula: scale = 1:(2 power value). It defaults to @emph{three} which results -in an output scale of @emph{1:8}. - -@end table - -Refer also to @ref{Command-Line Options}. - -@node Actions -@section Actions -@cindex actions -@cindex translations -@cindex key translations -@cindex button translations -@cindex X11 translations - -All user accessible commands may be bound to almost any @code{X} event. Almost -no default binding for commands is done in the binaries, so it is vital for the -application that at least a system-wide application resource file exists. -This file normally resides in the @file{share/pcb} directory and -is called @file{Pcb}. The bindings to which the manual refers to are the -ones as defined by the shipped resource file. Besides binding an action to -an X11 event, you can also execute any action command using a ":" command -(see @ref{User Commands}). - -Take special care about translations related to the functions keys and the -pointer buttons because most of the window managers use them too. -Change the file according to your hardware/software environment. -You may have to replace all occurances of @emph{baseTranslations} to -@emph{translations} if you use a @code{X11R4} server. - -Passing @emph{Object} as an argument to an action routine causes the object -at the cursor location to be changed, removed or whatever. If more than -one object is located at the cross hair position the smallest type is used. -If there are two of the same type the newer one is taken. -@emph{SelectedObjects} will handle all selected and visible objects. - - -@table @samp -@findex AddRats() -@cindex rats nest -@cindex netlist -@cindex rat-line -@item AddRats(AllRats|SelectedRats) -Adds rat-lines to the layout using the loaded netlist file (see the @emph{:rn}, -@ref{User Commands}.). Rat lines are added on the active layer using the current -line thickness shown in the status line. -Only missing connectivity is added by the -AddRats command so if, for example, the layout is complete nothing will be added. -Rat lines may be drawn different to other lines on the screen -to make them easier to identify since they cannot appear in a completed layout. -The rat-lines are added in the minimum length straight-line tree pattern -(always ending on pins or pads) that satisfies the missing connectivity in the circuit. -If a SMD pad is unreachable on the active layer, a warning will be issued -about it and the rat-line to that pad will not be generated. -If connections exist on the board which are not listed in the netlist while -AllRats are being added, warning messages will be issued and the affected pins and -pads will be drawn in a special @emph{warnColor} until the next @emph{Notify()} event. -If the entire layout agrees completely with the net-list a message informs you that -the layout is complete and no rat-lines are added (since none are needed). -If @emph{SelectedRats} -is passed as the argument, only those missing connections that might connect among -the selected pins and pads are drawn. -Default: -@example -Nonew: AddRats(AllRats) -!Shiftw: AddRats(SelectedRats) -Noneo: DeleteRats(AllRats) AddRats(AllRats) -!Shifto: DeleteRats(SelectedRats) AddRats(SelectedRats) -@end example - -@findex ApplyVendor() -@cindex vendor map -@cindex vendor drill table -@item ApplyVendor() -Applies an already loaded vendor drill map to the design. -@example -ApplyVendor() -@end example - -@findex Atomic() -@cindex undo, multi-action resources -@cindex atomic -@item Atomic(Save|Restore|Block|Close) -Controls the undo grouping of sequences of actions. Before the first action -in a group, Atomic(Save) should be issued. After each action that might -be undoable, Atomic(Restore) should be issued. Atomic(Block) concludes -and save the undo grouping if there was anything in the group to undo. -Atomic(Close) concludes and save the undo grouping even if nothing was -actually done. Thus it might produce an "empty" undo. This can be useful -when you want to use undo in a group of actions. - -@findex Bell() -@cindex signal -@cindex bell -@item Bell([-100..100]) -Rings the bell of your display. If no value is passed the setting -of the resource @emph{volume} will be used. - -@findex ChangeClearSize() -@cindex change sizes -@cindex sizes, changing of objects -@cindex clearance, changing of objects -@item ChangeClearSize(Object, value[, unit]) -@itemx ChangeClearSize(SelectedPins|SelectedVias, value[, unit]) -The effect of this action depends on if the soldermask display is presently -turned on or off. If soldermask is displayed, then the soldermask -relief size will be changed. If soldermask display is turned off, -then the clearance to polygons will be changed. -@emph{unit} is "mil" or "mm". If not specified the units will default -to the internal unit of 0.01 mil. -@example -!Mod1k: ChangeClearSize(Object, +2, mil) -!Mod1 Shiftk: ChangeClearSize(Object, -2, mil) -@end example - -@findex ChangeDrillSize() -@cindex change sizes -@cindex sizes, changing of objects -@cindex drilling hole, changing of objects -@item ChangeDrillSize(Object, value[, unit]) -@itemx ChangeDrillSize(SelectedPins|SelectedVias, value[, unit]) -This action routine changes the drilling hole of pins and vias. -If @emph{value} starts with + or -, then it adds (or subtracts) -@emph{value} from the current hole diameter, otherwise it sets the -diameter to the value. -@emph{unit} is "mil" or "mm". If not specified the units will default -to the internal unit of 0.01 mil. -Default: -@example -!Mod1s: Change2ndSize(Object, +5, mil) -!Mod1 Shifts: Change2ndSize(Object, -5, mil) -@end example - -@findex ChangeFlag() -@cindex flags, changing -@cindex octagonal flag, changing -@cindex square flag, changing -@cindex thermal flag, changing -@item ChangeFlag(Object|SelectElements|SelectedPins|SelectedVias|Selected,thermal|octagon|square,0|1) -Sets/clears the indicated flag. This adds/removes thermals, adds/removes the flag -which indicates a pin/pad should be square, or adds/removes the flag which -indicates a pin/pad should be octagonal. -@example -:ChangeFlag(SelectedVias,thermal,1) -:ChangeFlag(SelectedPads,square,0) -@end example - -@findex ChangeHole() -@cindex vias, converting to mounting hole -@cindex mounting holes -@item ChangeHole(Object|SelectedVias) -This action routine converts a via to and from a hole. A hole is -a via that has no copper annulus. The drill size for the via -determines the hole diameter. -@example -!Ctrlh: ChangeHole(Object) -@end example - -@findex ChangeName() -@cindex name, change an objects -@cindex change object name -@cindex object, change name of -@item ChangeName(Object) -@itemx ChangeName(Layer|Layout) -Changes the name of the visible object at the cursor location. A text object -doesn't have a name therefore the text string itself is changed. -The element name currently used for display is always the one changed with this -command. -See @emph{Display(Description|NameOnPCB|Value)} for details. -Passing @emph{Layer} changes the current layers name. -Default: -@example -Nonen: ChangeName(Object) -@end example - -@findex ChangeOctagon() -@cindex pins, changing shape of -@cindex vias, changing shape of -@cindex octagonal pins and vias -@item ChangeOctagon(Object|SelectElements|SelectedPins|SelectedVias|Selected) -Toggles what shape the affected pin(s) or via(s) will be drawn when they -are not square. The shape will either be round or octagonal. -Default: -@example -!Ctrlo: ChangeOctagon(Object) -@end example - -@findex ChangePinName() -@cindex changing pin/pad names -@cindex pin/pad names, changing -@item ChangePinName(ElementName, PinNumber, PinName) -Changes the name for a specified pin or pad number on a specified element. -This action is typically used to forward annotate pin/pad names from a schematic -to the layout. -@example -ChangePinName(U1, 14, VDD) -@end example - - -@findex ChangeSize() -@cindex change sizes -@cindex sizes, changing of objects -@cindex thickness, changing of objects -@item ChangeSize(Object, value[, unit]) -@itemx ChangeSize(SelectedLines|SelectedPins|SelectedVias, value[, unit]) -@itemx ChangeSize(SelectedPads|SelectedTexts|SelectedNames, value[, unit]) -@itemx ChangeSize(SelectedElements, value[, unit]) -To change the size of an object you have to bind these action to some -@code{X} event (or use :ChangeSize(...)). If @emph{value} begins with -a + or - then the value will be added (or subtracted) from the current -size, otherwise the size is set equal to @emph{value}. Range checking is -done to insure that none of the maximum/minimums of any size are violated. -If @emph{Object} is passed then a single object at the cursor location is -changed. If any of the @emph{Selected} arguments are passed then all selected -and visible objects of that type are changed. If the type being modified is -an element, then the thickness of the silkscreen lines defining the element -is changed. -@emph{unit} is "mil" or "mm". If not specified the units will default -to the internal unit of 0.01 mil. -Default: -@example -Nones: ChangeSize(Object, +5) -!Shifts: ChangeSize(Object, -5) -@end example - -@findex ChangeSquare() -@cindex change square flag -@cindex square flag, changing of objects -@cindex thickness, changing of objects -@item ChangeSquare(Object|SelectedElements|SelectedPins) -Toggles the setting of the square flag. The flag is used to identify a -certain pin, normally the first one, of circuits. It is also used to -make SMD pads have square ends. -@example -Noneq: ChangeSquare(Object) -@end example - -@findex ClrFlag() -@cindex flags, clearing -@cindex flags, clearing -@cindex octagonal flag, clearing -@cindex square flag, clearing -@cindex thermal flag, clearing -@item ClrFlag(Object|SelectElements|SelectedPins|SelectedVias|Selected,thermal|octagon|square) -Clears the indicated flag. This removes thermals, removes the flag -which indicates a pin/pad should be square, or removes the flag which -indicates a pin/pad should be octagonal. -@example -:ClrFlag(SelectedVias,thermal) -@end example - -@findex Command() -@cindex start user input -@cindex inputfield, start user input -@item Command() -Calling @emph{Command()} pops up an input line at the bottom of the window -which allows you to enter commands. Including all action commands! -The dialog ends when @emph{NoneReturn} -to confirm or @emph{NoneEscape} to abort is entered. -Default: -@example -colon: Command() -@end example - -@findex Connection() -@cindex scanning connections -@cindex searching connections -@cindex connections, reseting -@cindex reseting found connections -@cindex connections, searching for -@cindex saving found connections -@item Connection(Find) -@itemx Connection(ResetFoundLinesAndRectangles|ResetPinsViasAndPads|Reset) -The @emph{Connection()} action is used to mark all connections from one pin, -line or via to others. -The @emph{ResetFoundLinesAndRectangles, ResetFoundPinsAndVias} and -@emph{Reset} arguments may be used to reset all marked lines and rectangles, -vias and pins or all of them. The search starts with the pin or via -at the cursor position. All found objects are drawn with the color -defined by the resource @emph{connectedColor}. -See also, @emph{Display(Description|NameOnPCB|Value)}. -Default: -@example -!Shiftc: Connection(Reset) -Nonef: Connection(Find) -!Shiftf: Connection(Reset) -@end example - -@findex DeleteRats() -@cindex rats nest -@cindex rat-line -@cindex netlist -@item DeleteRats(AllRats|SelectedRats) -This routine deletes either all rat-lines in the layout, or only -the selected and visible ones. Non-rat-lines and other layout -objects are unaffected. -Default: -@example -Nonee: DeleteRats(AllRats) -!Shifte: DeleteRats(SelectedRats) -@end example - -@findex DisableVendor() -@cindex vendor map, disabling -@cindex vendor drill table, disabling -@item DisableVendor() -Disables automatic drill size mapping to the loaded vendor drill table. -@example -DisableVendor() -@end example - -@findex DisperseElements() -@cindex dispersing elements -@cindex distributing elements -@cindex elements, dispersing -@cindex elements, distributing -@item DisperseElements(All|Selected) -Disperses either all elements or only the selected elements in the -layout. This action should be used at the -start of a design to spread out all footprints before any placement or -routing is done. -@example -DisperseElements(All) -@end example - - -@findex Display() -@cindex centering -@cindex redrawing layout -@cindex refreshing layout -@cindex name of an element -@cindex displaying element names -@cindex element, display names of -@cindex grid, absolute and relative -@cindex grid, display -@cindex rubberband -@cindex pinout, display of -@cindex displaying pinout -@cindex lines, clipping to 45 degree -@cindex clipping lines to 45 degree -@item Display(Description|NameOnPCB|Value) -@itemx Display(Toggle45Degree|CycleClip) -@itemx Display(Grid|ToggleGrid) -@itemx Display(ToggleRubberBandMode) -@itemx Display(Center|ClearAndRedraw|Redraw) -@itemx Display(Pinout|PinOrPadName) -This action routines handles some output related settings. It is -used to center the display around the cursor location and to redraw the -output area optionally after clearing the window. -Centering is done with respect to the @emph{grid} setting. Displaying the -grid itself may be switched on and off by @emph{Grid} but only if -the distance between two pixels exceeds 4 pixels. -@pcb{} is able to handle several labels of an element. One of them -is a description of the functionality (eg resistor), the second should be -a unique identifier (R1) whereas the last one is a value (100k). -The @emph{Display()} action selects which of the names is displayed. -It also controls which name will be affected by the @emph{ChangeName} command. -If @emph{ToggleGrid} is passed, @pcb{} changes between relative -('rel' in the statusline) and absolute grid (an 'abs' in the statusline). -Relative grid means the pointer position when the command is issued is -used as the grid origin; while (0,0) is used in the absolute grid case. -Passing @emph{Pinout} displays the pinout of the element at the current -cursor location whereas @emph{PinOrPadName} toggles displaying of the -pins or pads name under the cursor. If none of them matches but the cursor -is inside of an element, the flags is toggled for all of its pins and pads. -For details about rubberbands see also the details about @emph{Mode}. -Default: -@example -Nonec: Display(Center) -Noned: Display(PinOrPadName) -!Shiftd: Display(Pinout) -Noner: Display(ClearAndRedraw) -None.: Display(Toggle45Degree) -None/: Display(CycleClip) -@end example - -@findex DRC() -@cindex design rule checking -@cindex drc -@item DRC() -Initiates design rule checking of the entire layout. Must be repeated -until no errors are found. - -@findex ExecuteFile() -@cindex actions file, executing -@cindex script file, executing -@item ExecuteFile(filename) -Executes the PCB actions contained in the specified file. -This can be used to automate a complex sequence of operations. -@example -:ExecuteFile(custom.cmd) -@end example -The command file contains a list of PCB actions. Blank lines -are ignored and lines starting with a # are treated as comment -lines. For example -@example -# This is a comment line -Display(Grid) -SetValue(Zoom,2) -DRC() -@end example - -@findex EditLayerGroups() -@cindex layers, editing of groups -@cindex groups, editing of -@item EditLayerGroups() -Pops up a dialog box to edit the layergroup setting. The function is also -available from the @emph{Objects} menu. -There are no defaults. - -@findex EnableVendor() -@cindex vendor map, enabling -@cindex vendor drill table, enabling -@item EnableVendor() -Enables automatic drill size mapping to the loaded vendor drill table. -@example -EnableVendor() -@end example - - -@findex Load() -@cindex loading files -@item Load(ElementToBuffer|Layout|LayoutToBuffer|Nelist) -This routine pops up a fileselect box to load layout, element data, -or netlist. -The passed filename for layout data is saved and may be reused. -@emph{ElementToBuffer} and @emph{LayoutToBuffer} load the data into the -current buffer. -There are no defaults. - -@findex LoadVendor() -@cindex vendor map, loading -@cindex vendor drill table, loading -@item LoadVendor(vendorfile) -Loads the specified vendor resource file. -@example -LoadVendor(myvendor.res) -@end example - -@findex MarkCrosshair() -@cindex mark -@cindex cursor position -@item MarkCrosshair() -This routine marks the current cursor location with an X, and then -the cursor display shows both absolute position and position relative to -the mark. If a mark is already present, this routine removes it and -stops displaying relative cursor coordinates. -Defaults: -@example -!Ctrlm: MarkCrosshair() -@end example - -@findex Mode() -@cindex mode, selecting of -@cindex operation modes, selecting of -@item Mode(Copy|InsertPoint|Line|Move|None|PasteBuffer|Polygon|Thermal) -@itemx Mode(Remove|Rectangle|RubberbandMove|Text|Via) -@itemx Mode(Cycle) -@itemx Mode(Notify) -@itemx Mode(Save|Restore) -Switches to a new mode of operation. The active mode is displayed by a thick -line around the matching mode selector button. -Most of the functionality of @pcb{} is implemented by selecting a mode -and calling @emph{Mode(Notify)}. The arguments @emph{Line}, @emph{Polygon}, -@emph{Rectangle}, @emph{Text} and @emph{Via} are used to create the -appropriate object whenever @emph{Mode(Notify)} is called. Some of them, -such as @emph{Polygon}, need more than one call for one object to be created. -@emph{InsertPoint} adds points to existing polygons or lines. -@emph{Save} and @emph{Restore} are used to temporarily save the mode, switch -to another one, call @emph{Mode(Notify)} and restore the saved one. Have -a look at the application resource file for examples. -@emph{Copy} and @emph{Move} modes are used to change an object's location and, -optionally, to create a new one. The first call of @emph{Mode(Notify)} attaches -the object at the pointer location to the cross hair whereas the second -one drops it to the layout. The @emph{rubberband} version of move performs the -move while overriding the current rubberband mode. -Passing @emph{PasteBuffer} attaches the contents of the currently selected -buffer to the cross hair. Each call to @emph{Mode(Notify)} pastes this contents -to the layout. @emph{Mode(Cycle)} cycles through the modes available in the -mode-button pallet. -@emph{Mode(None)} switches all modes off. -Default: -@example -Escape: Mode(None) -space: Mode(Cycle) -NoneBackSpace: Mode(Save) Mode(Remove) Mode(Notify) Mode(Restore) -NoneDelete: Mode(Save) Mode(Remove) Mode(Notify) Mode(Restore) -NoneF1: Mode(Via) -NoneF2: Mode(Line) -NoneF3: Mode(PasteBuffer) -NoneF4: Mode(Rectangle) -NoneF5: Mode(Text) -NoneF6: Mode(Polygon) -NoneF7: Mode(Thermal) -NoneF8: Mode(Arc) -NoneInsert: Mode(InsertPoint) -None[: Mode(Save) Mode(Move) Mode(Notify) -None]: Mode(Notify) Mode(Restore) -None: Mode(Notify) -!Shift Ctrl: Mode(Save) Mode(Remove) Mode(Notify) Mode(Restore) -None: Mode(Save) Mode(Move) Mode(Notify) -None: Mode(Notify) Mode(Restore) -!Mod1: Mode(Save) Mode(Copy) Mode(Notify) -!Mod1: Mode(Notify) Mode(Restore) -Shift BTNMOD: Mode(Save) Mode(RubberbandMove) Mode(Notify) -@end example - -@findex MovePointer() -@cindex pointer, moving of -@cindex cursor movements -@item MovePointer(delta_x, delta_y) -With this function it is possible to move the cross hair cursor by using the -cursor keys. The @code{X} server's pointer follows because the necessary -events are generated by @pcb{}. All movements are performed with respect -to the currently set grid value. -Default: -@example -NoneUp: MovePointer(0, -1) -!ShiftUp: MovePointer(0, -10) -NoneDown: MovePointer(0, 1) -!ShiftDown: MovePointer(0, 10) -NoneRight: MovePointer(1, 0) -!ShiftRight: MovePointer(10, 0) -NoneLeft: MovePointer(-1, 0) -!ShiftLeft: MovePointer(-10, 0) -@end example - -@findex MoveToCurrentLayer() -@cindex objects, moving to current layer -@cindex moving objects to current layer -@item MoveToCurrentLayer(Object|SelectedObjects) -The function moves a single object at the cross hair location or all selected -objects to the current layer. Elements are not movable by this function. -They have to be deleted and replaced on the other side. -If a line segment is moved and the movement would result in a loss of -connectivity to another segment then via(s) are automatically added to -maintain the connectivity. -@example -Nonem: MoveToCurrentLayer(Object) -!Shiftm: MoveToCurrentLayer(SelectedObjects) -@end example - -@findex New() -@cindex layout, start a new -@cindex starting a new layout -@item New() -Clear the current layout and starts a new one after entering its name. -Refer to the resource @emph{backup} for more information. -No defaults. - -@findex PasteBuffer() -@cindex buffer, selecting a -@cindex pastebuffer, selecting a -@cindex selecting a buffer -@cindex rotating a buffer -@cindex cutting objects -@cindex copying objects -@item PasteBuffer(AddSelected|Clear|1..5) -@itemx PasteBuffer(Rotate, 1..3) -@itemx PasteBuffer(Convert) -This action routine controls and selects the pastebuffer as well as all -cut-and-paste operations. Passing a buffer number selects one in of the -range 1..5. The statusline is updated with the new number. -@emph{Rotate} performs a number of 90 degree counter clockwise rotations -of the buffer contents. @emph{AddSelected} as first argument copies all -selected and visible objects into the buffer. Passing @emph{Clear} removes -all objects from the currently selected buffer. @emph{Convert} causes -the contents of the buffer (lines, arc, vias) to be converted into an -element definition. Refer to @ref{Pastebuffer} -for examples. -Default: -@example -!Ctrlx: PasteBuffer(Clear) PasteBuffer(AddSelected) - Mode(PasteBuffer) -!Shift Ctrlx: PasteBuffer(Clear) PasteBuffer(AddSelected) - RemoveSelected() Mode(PasteBuffer) -!Mod1c: PasteBuffer(Clear) PasteBuffer(AddSelected) -!Mod1x: PasteBuffer(Clear) PasteBuffer(AddSelected) - RemoveSelected() -!Shift1: PasteBuffer(1) -!Shift2: PasteBuffer(2) -!Shift3: PasteBuffer(3) -!Shift4: PasteBuffer(4) -!Shift5: PasteBuffer(5) -NoneF3: Mode(PasteBuffer) -@end example - -@findex Polygon() -@cindex polygon, closing a -@cindex polygon point, go back to previous -@cindex closing a polygon -@item Polygon((Close|PreviousPoint) -Polygons need a special action routine to make life easier. Calling -@emph{Polygon(PreviousPoint)} resets the newly entered corner to the -previous one. The Undo action will call Polygon(PreviousPoint) -when appropriate to do so. @emph{Close} creates the final -segment of the polygon. This may fail if clipping to 45 degree -lines is switched on, in which case a warning is issued. -Default: -@example -Nonep: Polygon(Close) -!Shiftp: Polygon(Close) -@end example - -@findex Print() -@cindex layout, printing a -@cindex printing a layout -@item Print() -Pops up a print control box that lets you select the output -device, scaling and many more options. Each run creates all -files that are supported by the selected device. These are -mask files as well as drilling files, silk screens and so on. The table -shows the filenames for all possible files: -@example - POSIX (extension) 8.3 filename - --------------------------------------------- - *_componentmask.* cmsk.* - *_componentsilk.* cslk.* - *_soldermask.* smsk.* - *_soldersilk.* sslk.* - *_drill.* dril.* - *_groundplane.* gpl.* - *_group[1..8].* [..8].* -@end example -The output may be sent to a post-processor by starting the filename with the -@emph{pipe} @code{("|")} character. Any @code{"%f"} in a command is replaced -with the current filename. The function is available from the @emph{file} menu. -There are no defaults. - -@findex Quit() -@cindex quit -@cindex exit -@item Quit() -Quits the application after confirming the operation. -Default: -@example -WM_PROTOCOLS: Quit() -@end example - -@findex Redo() -@cindex redo -@cindex recover -@item Redo() -This routine allows you to recover from the last undo command. -You might want to do this if you thought that undo was going to -revert something other than what it actually did (in case you -are confused about which operations are un-doable), or if you -have been backing up through a long undo list and over-shoot -your stopping point. Any change that is made since the undo -in question will trim the redo list. For example if you add -ten lines, then undo three of them you could use redo to put -them back, but if you move a line on the board before performing -the redo, you will lose the ability to "redo" the three "undone" lines. -Default: -@example -!Shiftr: Redo() -@end example - -@findex RemoveSelected() -@cindex removing selected objects -@cindex selected object, removing an -@item RemoveSelected() -This routine removes all visible and selected objects. -There are no defaults. - -@findex Report() -@cindex report -@cindex information about objects -@cindex drill -@item Report(Object|DrillReport) -This routine pops up a dialog box describing the various -characteristics of an object (or piece of an object such as a pad or pin) -in the layout at the cursor position, or a report about all of the -drill holes in the layout. -There are no defaults. - -@findex RouteStyle() -@cindex routing style -@cindex size of lines and vias -@item RouteStyle(1|2|3|4) -This routine copies the sizes corresponding to the numbered route style -into the active line thickens, via diameter, and via drill size. -Defaults: -@example -!Ctrl1: RouteStyle(1) -... -!CtrlNUM_STYLES: RouteStyle(NUM_STYLES) -@end example -The variable @code{NUM_STYLES} is set at compile time in -@file{globalconfig.h}. - -@findex Save() -@cindex saving files -@cindex saving connections -@item Save(Layout|LayoutAs) -@itemx Save(AllConnections|AllUnusedPins|ElementConnections) -Passing @emph{Layout} saves the layout using the file from which it was -loaded or, if it is a new layout, calls @emph{Save(LayoutAs)} which queries -the user for a filename. -The values: @emph{AllConnections}, @emph{AllUnusedPins} and -@emph{ElementConnections} start a connection scan and save all connections, -all unused pins or the connections of a single element to a file. -There are no defaults. - -@findex Select() -@cindex selection -@cindex selecting objects -@item Select(All|Block|Connection|ToggleObject) -@itemx Select(ElementByName|ObjectByName|PadByName|PinByName) -@itemx Select(TextByName|ViaByName) -Toggles either the selection flag of the object at the cross hair position -(@emph{ToggleObject}) or selects all visible objects, all inside a -rectangle or all objects which have been found during the last connection -scan. The @emph{ByName} functions use a @ref{Regular Expressions} search, -always case insensitive, to select the objects. -Default: -@example -None: Select(ToggleObject) -None,None: See resource file - this is complex -@end example - -@findex SetFlag() -@cindex flags, setting -@cindex octagonal flag, setting -@cindex square flag, setting -@cindex thermal flag, setting -@item SetFlag(Object|SelectElements|SelectedPins|SelectedVias|Selected,thermal|octagon|square) -Sets the indicated flag. This adds thermals, sets the flag -which indicates a pin/pad should be square, or sets the flag which -indicates a pin/pad should be octagonal. -@example -:SetFlag(Selected,thermal) -@end example - -@findex SetValue() -@cindex change settings -@cindex zoom, setting of -@cindex grid, setting of -@cindex drilling hole, setting of initial size -@cindex vias, setting of initial size -@cindex lines, setting of initial size -@item SetValue(Grid|LineSize|TextScale|ViaDrillingHole|ViaSize|Zoom, value) -Some internal values may be changed online by this function. -The first parameter specifies which data has to be changed. The other one -determines if the resource is set to the passed value, if @emph{value} is -specified without sign, or increments/decrements if it is specified with -a plus or minus sign. -The function doesn't change any existing object only the initial values of -new objects. Use the @emph{ChangeSize()} and @emph{ChangeDrillSize()} -to change existing objects. -Default: -@example -Noneg: SetValue(Grid, +5) -!Shiftg: SetValue(Grid, -5) -Nonel: SetValue(LineSize, +5) -!Shiftl: SetValue(LineSize, -5) -Nonet: SetValue(TextScale, +10) -!Shiftt: SetValue(TextScale, -10) -Nonev: SetValue(ViaSize, +5) -!Shiftv: SetValue(ViaSize, -5) -!Mod1v: SetValue(ViaDrillingHole, +5) -!Mod1 Shiftv: SetValue(ViaDrillingHole, -5) -Nonez: SetValue(Zoom, -1) -!Shiftz: SetValue(Zoom, +1) -@end example - -@findex SwapSides() -@cindex change viewing side -@cindex viewing side, changing of -@item SwapSides() -This routine changes the board side you are viewing. -Default: -@example -NoneTab: SwapSides() -@end example - -@findex SwitchDrawingLayer() -@cindex change drawing layer -@cindex layer, change active -@item SwitchDrawingLayer(value) -Makes layer number 1..MAX_LAYER the current one. -Default: -@example -None1: SwitchDrawingLayer(1) -... -NoneMAX_LAYER: SwitchDrawingLayer(MAX_LAYER) -@end example - -@findex ToggleHideName() -@cindex hide element name -@cindex element name, hiding -@cindex element name, removing from silk-screen -@item ToggleHideName(Object|SelectedElements) -Toggles whether the element's name is displayed or hidden. If it -is hidden you won't see it on the screen and it will not appear -on the silk layer when you print the layout. -@example -Noneh: ToggleHideName(Object) -!Shifth: ToggleHideName(SelectedElements) -@end example - -@findex ToggleVendor() -@cindex vendor map, toggling -@cindex vendor drill table, toggling -@item ToggleVendor() -Toggles automatic drill size mapping to the loaded vendor drill table. -@example -ToggleVendor() -@end example - -@findex ToggleVisibility() -@cindex toggle layer visibility -@cindex layer visibility, toggling -@item ToggleVisibility(Layer) -Toggles the visibility of the layer. -@example -Mod11: ToggleVisibility(1) -Mod12: ToggleVisibility(2) -Mod13: ToggleVisibility(3) -Mod14: ToggleVisibility(4) -@end example - -@findex Undo() -@cindex undo -@cindex recover -@item Undo() -@itemx Undo(ClearList) -The unlimited undo feature of @pcb{} allows you to recover -from most operations that materially affect you work. -Calling @emph{Undo()} without any parameter recovers -from the last (non-undo) operation. @emph{ClearList} is used to release the -allocated memory. @emph{ClearList} is called whenever a new layout is started -or loaded. See also @emph{Redo}. -Default: -@example -Noneu: Undo() -!Shift Ctrlu: Undo(ClearList) -@end example - -@findex UnloadVendor() -@cindex vendor map, unloading -@cindex vendor drill table, unloading -@item UnloadVendor() -Unloads the loaded vendor drill table. -@example -UnloadVendor() -@end example - -@findex Unselect() -@cindex selection -@cindex unselect objects -@item Unselect(All|Block|Connection) -Unselects all visible objects, all inside a rectangle or all objects which -have been found during the last connection scan. -Default: -@example -!Shift : Mode(Save) Mode(None) Unselect(Block) -!Shift : Unselect(Block) Mode(Restore) -@end example - -@end table - - -@node Translations -@section Default Translations -@cindex translations -@cindex default translations -@cindex X11 default translations - -This section covers some default translations of key and button events as -defined in the shipped default application resource file. Most of them have -already been listed in @ref{Actions}. @pcb{} makes use of a nice @code{X11} -feature; calling several action routines for one event. - -@table @samp - -@cindex removing objects -@cindex removing connections -@cindex object, removing an -@cindex connection, removing an -@item NoneBackSpace: -@item NoneDelete: -@itemx !ShiftBackSpace: -@itemx !Shift Ctrl: -The object at the cursor location is removed by @emph{NoneBackSpace} or -@emph{Shift Ctrl} whereas @emph{ShiftBackSpace} also removes -all other objects that are fully-connected to the one at the cursor location. - -@cindex scrolling -@item !Mod1 CtrlLeft: -@itemx !Mod1 CtrlRight: -@itemx !Mod1 CtrlUp: -@itemx !Mod1 CtrlDown: -Scroll one page in one of the four directions. - -@cindex scrolling -@item NoneLeft:, !ShiftLeft: -@itemx NoneRight:, !ShiftRight: -@itemx NoneUp:, !ShiftUp: -@itemx NoneDown:, !ShiftDown: -Move cross hair either one or ten points in grid. - -@cindex user input -@item NoneReturn: -Finished user input, selects the 'default' button of dialogs. - -@cindex user input -@item NoneEscape: -@emph{Mode(Reset)}, aborts user input, selects the 'abort' button of -dialogs or resets all modes. - -@cindex element, move name of -@cindex object, move an -@cindex object, copy an -@cindex move an object -@cindex copy an object -@item None, Btn2, None: -@itemx !Mod1, Btn2, !Mod1: -The first sequence moves the object or element name at the cursor location. -The second one copies the objects. Copying isn't available for -element names. - -@end table - - -@c --------------------------- chapter 6 ------------------------------- -@node File Formats -@chapter File Formats -@cindex file formats -@cindex ASCII files, format of - -All files used by @pcb{} are read from the standard output of a command -or written to the standard input of one as plain seven bit @code{ASCII}. This -makes it possible to use any editor to change the contents of a layout file. -It is the only way for element or font description files to be created. -To do so you'll need to study the example files @file{example/*} and -@file{default_font} which are shipped with @pcb{}. -For an overview refer to @ref{Intro}. - -@vindex elementCommand -@vindex fileCommand -@vindex fontCommand -@vindex libraryCommand -@vindex libraryContentsCommand -@vindex saveCommand -The following sections provide the necessary information about the syntax of -the files. -Netlist files are not created by @pcb{}, but it does use them. For information -on the format of a netlist file see the @emph{:rn}, -@ref{User Commands}. -The commands described allow you to add almost any additional -functionality you may need. Examples are compressed read and write access as -well as archives. The commands themselves are defined by the resources -@emph{elementCommand}, @emph{fileCommand}, @emph{fontCommand}, -@emph{libraryCommand}, @emph{libraryContentsCommand} and @emph{saveCommand}. -Note that the commands are not saved along with the data. -It is considered an advantage to have the layout file contain all necessary -information, independent of any other files. - -One thing common to all files is they may include comments, newlines, -and carriage returns at any place except within quoted strings. - -@menu -* Pad and Line Representation:: -* Layout File:: -* Element File:: -* Font File:: -* Netlist File:: -* Library Contents File:: -* Library File:: -* File Syntax:: -* Object Flags:: -* PCBFlags:: -@end menu - - - -@node Pad and Line Representation -@section Pad and Line Representation -@cindex pad specification -@cindex file formats, pads and lines - -Pads and lines (copper traces, silk screen lines, etc) are represented by the -line end points and the aperture used to draw the line. It is important to -understand this when creating the pads for a new footprint. The following figure -illustrates a pad or line which is drawn using a square aperture. The end -points (X0,Y0), (X1,Y1) specify the center of the aperture. The size parameter -specifies the size of the aperture. - -@center @image{pad,,,Pad Layout,png} - -Pads and lines are represented in this way because this is how lines are -specified in RS-274X (Gerber) files which are used for creating -the masks used in board manufacturing. In fact, older mask making -equipment created lines in precisely this fashion. A physical aperture was -used to pass light through onto a photosensitive film. - -@node Layout File -@section Layout File Format -@cindex layout files, format of -@cindex format of layout files -@cindex file format, layout data - -The layout file describes a complete layout including symbols, vias, -elements and layers with lines, rectangles and text. This is the most -complex file of all. As @pcb{} has evolved, the file format has -changed several times to accommodate new features. @pcb{} has -always been able to read all older versions of the @code{.pcb} file. -This allows the migration of older designs to newer versions of the -program. Obviously older versions of @pcb{} will not be able -to properly read layout files stored in newer versions of the file -format. - -In practice it is very common for footprint libraries to contain -elements which have been defined in various versions of the @pcb{} -file format. When faced with trying to understand an element file or -layout file which includes syntax not defined here, the best approach -is to examine the file @file{src/parse_y.y} which is the definitive -definition of the file format. - -The PCB layout file contains the following contents, in this order (individual items -are defined in @ref{File Syntax}: - -@table @code - -@item PCB -This names the board and sets its size - -@item Grid -Optional. - -@item Cursor -Optional. - -@item Flags -Optional. - -@item Groups -Optional. - -@item Styles -Optional. - -@item Symbols -Optional. - -@item Vias, Rats, Layers, and Elements -These may occur in any order, at this point in the file. - -@item Netlists -Optional. - -@end table - -@node Element File -@section Element File Format -@cindex element, file format -@cindex format of element files -@cindex file format, element data - -Element files are used to describe one component which then may be used -several times within one or more layouts. You will normally split the -file into two parts, one for the pinout and one for the package description. -Using @code{m4} allows you to define pin names as macros in one file and -include a package description file which evaluates the macros. See -the resource @emph{elementCommand} for more information. The pins (and pads) -must appear in sequential order in the element file (new in 1.5) so that -pin 1 must be the first PIN(...) in the file. - -Doing things this way makes it possible to use one package file for several -different circuits. See the sample files @file{dil*}. - -The lowest x and y coordinates of all sub-objects of an element are -used as an attachment point for the cross hair cursor of the main -window, unless the element has a mark, in which case that's the -attachment point. - - - -@node Font File -@section Font File Format -@cindex font file, format of -@cindex format of font files -@cindex file format, font data - -A number of user defined Symbols are called a font. There is only one per -layout. All symbols are made of lines. See the file @file{default_font} -as an example. - -The lowest x and y coordinates of all lines of a font are transformed to (0,0). - -@node Netlist File -@section Netlist File Format -@cindex netlist, file format -@cindex netlist, reading - -Netlists read by @pcb{} must have this simple text form: - -@example -netname [style] NAME-PINNUM NAME2-PINNUM2 NAME3-PINNUM3 ... [\] -@end example - -@noindent -for each net on the layout. -where "netname" is the name of the net which must be unique for each -net, [style] is an optional route-style name, -NAME is the layout-name name given to an element, -and PINNUM is the (usually numeric) -pin number of the element that connects to the net -(for details on pin numbering see @ref{Element Objects}). -Spaces or tabs separate the fields. -If the line ends with a "\" the -net continues on the next line and the "\" is treated exactly as if it -were a space. If a NAME ends with a lower-case letter, -all lower-case letters are stripped from the end of the NAME to determine the -matching layout-name name. For example: - -@example - Data U1-3 U2abc-4 FLOP1a-7 Uabc3-A9 -@end example - -specifies that the net called "Data" should have -pin 3 of U1 connected to pin 4 of U2, to pin 7 of -FLOP1 and to pin A9 of Uabc3. Note that element name and -pin number strings are case-sensitive. -It is up to you to name the elements so that their layout-name names -agrees with the netlist. - -@node Library Contents File -@section Library Contents File Format -@cindex library contents file, format of -@cindex format of library contents -@cindex file format, library contents - -There is nothing like a special library format. The ones that have been -introduced in 1.4.1 just use some nice (and time consuming) features of GNU -@code{m4}. The only predefined format is the one of the contents file -which is read during startup. It is made up of two basic line types: - -@example -menu entry = "TYPE="name -contents line = template":"package":"value":"description -name = String -template = String -package = String -value = String -description = String -String = -@end example - -No leading white spaces or comments are allowed in this file. If you need -either one, define a command that removes them before loading. Have a look -to the @emph{libraryContentsCommand} resource. - -The menu entry will appear in the selection menu at the top and of the -library window. - -@node Library File -@section Library File Format -@cindex library file, format of -@cindex format of libraries -@cindex file format, libraries - -This section provides an overview about the existing @code{m4} definitions -of the elements. There are basically two different types of files. One -to define element specific data like the pinout, package and so on, the -other to define the values. For example the static RAM circuits 43256 and -62256 are very similar. They therefore share a common definition in the -macro file but are defined with two different value labels. - -The macro file entry: -@example -define(`Description_43256_dil', `SRAM 32Kx8') -define(`Param1_43256_dil', 28) -define(`Param2_43256_dil', 600) -define(`PinList_43256_dil', ``pin1', `pin2', ...') -@end example - -And the list file: -@example -43256_dil:N:43256:62256 -@end example - -The macro must define a description, the pin list and up to two additional -parameters that are passed to the package definitions. The first one is -the number of pins whereas the second one defines for example the width -of a package. - -It is very important to select a unique identifier for each macro. In -the example this would be @emph{43256_dil} which is also the templates name. -It is required by some low-level macros that -@emph{Description_, Param1_, Param2_} and @emph{PinList_} are perpended. - -The list file uses a syntax: -@example -template:package:value[:more values] -@end example - -This means that the shown example will create two element entries with the -same package and pinout but with different names. - -A number of packages are defined in @file{common.m4}. Included are: - -@example -DIL packages with suffix D, DW, J, JD, JG, N, NT, P -PLCC -TO3 -generic connectors -DIN 41.612 connectors -zick-zack (SD suffix) -15 pin multiwatt -@end example - -If you are going to start your own library please take care about @code{m4} -functions. Be aware of quoting and so on and, most important check your -additional entry by calling the macro: - -@example -CreateObject(`template', `value', `package suffix') -@end example - -If quoting is incorrect an endless loop may occur (broken by a out-of-memory -message). - -The scripts in the @file{lib} directory handle the creation of libraries -as well as of their contents files. Querying is also supported. - -I know quite well that this description of the library implementation is -not what some out there expect. But in my opinion it's much more useful to -look at the comments and follow the macros step by step. - -@node File Syntax -@section File Syntax -@cindex File sytax -@cindex Syntax, file - -@include pcbfile.texi - -@c --------------------------- chapter 7 ------------------------------- -@node Library Creation -@chapter Library Creation -@cindex library creation - -This chapter provides a detailed look at how footprint libraries are -created and used. The chapter is split into two section, the first -section covers the "old" style libraries which use the @code{m4} macro -processor and the second section covers the "new" style libraries. - -Despite the names "old" and "new", both styles of libraries are useful -and the "old" style should not be discounted because of its name. The -advantage of the old style libraries is that one can define a family of -footprints, say a DIP package, and then quickly produce all the members -of that family. Because the individual packages make use of a base -definition, corrections made to the base definition propagate to all the -members of a family. The primary drawback to using this library -approach is that the effort to create a single footprint is more than a -graphical interface and may take even longer if the user has not used -the @code{m4} macro language previously. - -The new style of footprint libraries stores each footprint in its own -file. The footprints are created graphically by placing pads and then -converting a group of pads to a component. This library method has the -advantage of being quick to learn and it is easily to build single -footprints quickly. If you are building a family of parts, however, the -additional effort in creating each one individually makes this approach -undesirable. In addition, creating a part with a large pin count -can be quite tedious when done by hand. - - -@section Old Style (m4) Libraries -The old style libraries for pcb use the @code{m4} macro processor to -allow the definition of a family of parts. There are several files -associated with the old style library. The file @file{common.m4} is the -top level file associated with the library. @file{common.m4} defines a -few utility macros which are used by other portions of the library, -and then includes a predefined set of library files (the lines like -@code{include(geda.inc)}). - -@subsection Overview of Oldlib Operation -The big picture view of the old style library system is that the library -is simply a collection of macro definitions. The macros are written in -the @code{m4} macro language. An example of a macro and what it expands -to is the following. One of the predefined footprints in the library -which comes with PCB is the @code{PKG_SO8} macro. Note that all the -footprint macros begin with @code{PKG_}. For this particular example, -@code{PKG_SO8} is a macro for an 8-pin small outline surface mount -package. All of the footprint macros take 3 arguments. The first is the -canonical name of the footprint on the board. In this case "SO8" is an -appropriate name. The second argument is the reference designator on -the board such as "U1" or "U23". The third and final argument is the -value. For an integrated circuit this is usually the part number such -as "MAX4107" or "78L05" and for a component such as a resistor or -capacitor it is the resistance or capacitance. The complete call to the -macro in our example is @samp{PKG_SO8(SO8, U1, MAX4107)}. When -processed by @code{m4} using the macros defined in the PCB library, this -macro expands to -@example -Element(0x00 "SO8" "U1" "MAX4107" 146 50 3 100 0x00) -( - Pad(10 25 38 25 20 "1" 0x00) - Pad(10 75 38 75 20 "2" 0x100) - Pad(10 125 38 125 20 "3" 0x100) - Pad(10 175 38 175 20 "4" 0x100) - Pad(214 175 242 175 20 "5" 0x100) - Pad(214 125 242 125 20 "6" 0x100) - Pad(214 75 242 75 20 "7" 0x100) - Pad(214 25 242 25 20 "8" 0x100) - ElementLine(0 0 151 0 10) - ElementArc(126 0 25 25 0 180 10) - ElementLine(101 0 252 0 10) - ElementLine(252 0 252 200 10) - ElementLine(252 200 0 200 10) - ElementLine(0 200 0 0 10) - Mark(29 25) -) -@end example -which is the actual definition of the footprint that the PCB program -works with. As a user of PCB the only time you will need or want to run -@code{m4} directly is when you are debugging a new library addition. In -normal operation, the calls to @code{m4} are made by helper scripts that -come with PCB. - -Tools such as @code{gsch2pcb} (used to interface the gEDA schematic -capture program to PCB layout) will call @code{m4} to produce an initial -PCB layout that includes all the components on a schematic. In -addition, when manually instantiating parts from within PCB, @code{m4} -will be called by PCB's helper scripts to produce the footprints. - -@subsection The Library Scripts -There are several scripts that are used for processing the m4 -libraries. This section briefly describes these scripts and details how -they are used by PCB. - -@subsubsection Scripts Used During Compilation -The scripts described in this section are used during compilation of -PCB. They are run automatically by the build system, but are described -here to help document the complete library processing that occurs. -During the build of PCB, the following actions are taken. The -@code{CreateLibrary.sh} script is run to produce an M4 "frozen file". -This frozen file is simply a partially processed M4 input file which can -be loaded by M4 more quickly than the original input file. - -A typical call to @code{CreateLibrary.sh} used during the compilation of -PCB is: -@example -./CreateLibrary.sh -I . pcblib ./common.m4 TTL_74xx_DIL.m4 -connector.m4 crystal.m4 generic.m4 genericsmt.m4 gtag.m4 -jerry.m4 linear.m4 logic.m4 lsi.m4 memory.m4 optical.m4 pci.m4 -resistor_0.25W.m4 resistor_adjust.m4 resistor_array.m4 -texas_inst_amplifier.m4 texas_inst_voltage_reg.m4 -transistor.m4 geda.m4 -@end example -The @samp{-I .} says to search in the current directory for the -@file{.m4} files. The output frozen file is @file{pcblib}. The main -@file{common.m4} file is listed as well as all of the @file{*.m4} files -which define the components in the library. - -In addition, a library contents file is created during the build with -the @code{CreateLibraryContents.sh} script. -A typical call to @code{CreateLibrary.sh} used during the compilation of -PCB is: -@example -./CreateLibraryContents.sh -I . ./common.m4 TTL_74xx_DIL.list -connector.list crystal.list generic.list genericsmt.list gtag.list -jerry.list linear.list logic.list lsi.list memory.list optical.list -pci.list resistor_0.25W.list resistor_adjust.list resistor_array.list -texas_inst_amplifier.list texas_inst_voltage_reg.list transistor.list -geda.list > pcblib.contents -@end example - -The @file{pcblib.contents} file is used by the PCB program to define the -libraries and components which will be displayed when you bring up -the library window from within PCB. An example of part of the -@file{pcblib.contents} file is: -@example -TYPE=~TTL 74xx DIL -7400_dil:N:7400:4 dual-NAND -7401_dil:N:7401:4 dual-NAND OC -7402_dil:N:7402:4 dual-NOR -TYPE=~geda -geda_DIP6:DIP6:DIP6:Dual in-line package, narrow (300 mil) -geda_DIP8:DIP8:DIP8:Dual in-line package, narrow (300 mil) -geda_DIP14:DIP14:DIP14:Dual in-line package, narrow (300 mil) -geda_ACY300:ACY300:ACY300:Axial non-polar component, -@end example -The @code{TYPE=} lines define the library name that will show up in the -library window in PCB. The other lines define the actual components in -the library. - -@subsubsection Scripts Used by PCB at Runtime -When PCB is first executed, it makes a call to the -@code{ListLibraryContents.sh} script. This script provides the PCB -program with the contents of the library contents file created when PCB -was compiled. A typical call to @code{ListLibraryContents.sh} is -@example -../lib/ListLibraryContents.sh .:/tmp/pcb-20030903/src/../lib pcblib -@end example -This command says to search the path -@samp{.:/tmp/pcb-20030903/src/../lib} for a file called -@file{pcblib.contents} (the @file{.contents} part is added -automatically) and display the contents of the file. -PCB parses this output and generates the library window entries. - -When you pick a library component from the library window, PCB calls the -@code{QueryLibrary.sh} script to actually pull the footprint into the -layout. For example, when the ACY300 component is selected from the -@code{~geda} library, the generated call may be: - -@example -/tmp/pcb-20030903/src/../lib/QueryLibrary.sh -.:/tmp/pcb-20030903/src/../lib pcblib geda_ACY300 ACY300 -ACY300 -@end example -If you were to run this command by hand you would see the PCB code for -the element: -@example -Element(0x00 "Axial non-polar component," "" "ACY300" 245 70 0 100 0x00) -( - Pin(0 25 50 20 "1" 0x101) - Pin(300 25 50 20 "2" 0x01) - - ElementLine(0 25 75 25 10) - ElementLine(225 25 300 25 10) - - ElementLine(75 0 225 0 10) - ElementLine(225 0 225 50 10) - ElementLine(225 50 75 50 10) - ElementLine(75 50 75 0 10) - -# ElementArc(X1 Y 50 50 270 180 10) -# ElementArc(X2 Y 50 50 90 180 10) - - Mark(75 25) -) -@end example - -@subsection Creating an Oldlib Footprint -This section provides a complete example of defining a family of -footprints using the M4 style library. As a vehicle for this example, a -family of footprints for surface mount resistors and capacitors will be -developed. The file @file{example.inc} should have been installed on -your system as @file{$prefix/share/examples/oldlib/example.inc} where -@file{$prefix} is often times @file{/usr/local}. - -The @file{example.inc} file defines a macro called -@code{COMMON_PKG_RCSMT} which is a generic definition for a surface -mount footprint with two identical, rectangular pads. This macro will -be called with different parameters to fill out the family of parts. -The arguments to the @code{COMMON_PKG_RCSMT} are: -@example -# ------------------------------------------------------------------- -# the definition for surface mount resistors and capacitors -# $1: canonical name -# $2: name on PCB -# $3: value -# $4: pad width (in direction perpendicular to part) -# $5: pad length (in direction parallel with part) -# $6: pad spacing (center to center) -# $7: distance from edge of pad to silk (in direction -# perpendicular to part) -# $8: distance from edge of pad to silk (in direction parallel -# with part) -# $9: Set to "no" to skip silk screen on the sides of the part -@end example - -@example -define(`COMMON_PKG_RCSMT', - `define(`XMIN', `eval( -1*`$6'/2 - `$5'/2 - `$8')') - define(`XMAX', `eval( `$6'/2 + `$5'/2 + `$8')') - define(`YMIN', `eval(-1*`$4'/2 - `$7')') - define(`YMAX', `eval( `$4'/2 + `$7')') -Element(0x00 "$1" "$2" "$3" eval(XMIN+20) eval(YMAX+20) 0 100 0x00) -( - ifelse(0, eval($4>$5), - # Pads which have the perpendicular pad dimension less - # than or equal to the parallel pad dimension - Pad(eval(-1*( $6 + $5 - $4)/2) 0 - eval((-1*$6 + $5 - $4)/2) 0 eval($4) "1" 0x100) - Pad(eval(-1*(-1*$6 + $5 - $4)/2) 0 - eval(( $6 + $5 - $4)/2) 0 eval($4) "2" 0x100) - , - # Pads which have the perpendicular pad dimension greater - # than or equal to the parallel pad dimension - Pad(eval(-1*$6/2) eval(-1*($4 - $5)/2) - eval(-1*$6/2) eval(($4 - $5)/2) eval($5) "1" 0x100) - Pad(eval( $6/2) eval(-1*($4 - $5)/2) - eval( $6/2) eval(($4 - $5)/2) eval($5) "2" 0x100) - ) - - # silk screen - # ends - ElementLine(XMIN YMIN XMIN YMAX 10) - ElementLine(XMAX YMAX XMAX YMIN 10) - # sides -ifelse($9,"no", - #skip side silk - , - ElementLine(XMIN YMIN XMAX YMIN 10) - ElementLine(XMAX YMAX XMIN YMAX 10) -) - Mark(0 0) -)') -@end example -Note that the part has been defined with the mark located at -@code{(0,0)} and that the pads have been placed with the mark at the -common centroid of the footprint. While not a requirement, this is -highly desirable when developing a library that will need to interface -with a pick and place machine used for factory assembly of a board. - -The final part of @file{example.inc} defines particular versions of the -generic footprint we have created. These particular versions correspond -to various industry standard package sizes. -@example -# 0402 package -# -# 30x30 mil pad, 15 mil metal-metal spacing=> -# 15 + 15 + 15 = 45 center-to-center -define(`PKG_RC0402', - `COMMON_PKG_RCSMT(`$1', `$2', `$3', 30, 30, 45, 0, 10, "no")') - -# 0603 package -# -# 40x40 mil pad, 30 mil metal-metal spacing=> -# 30 + 20 + 20 = 70 center-to-center -define(`PKG_RC0603', - `COMMON_PKG_RCSMT(`$1', `$2', `$3', 40, 40, 70, 10, 10)') - -# 1206 package -# -# 40x60 mil pad, 90 mil metal-metal spacing=> -# 90 + 20 + 20 = 130 center-to-center -define(`PKG_RC1206', - `COMMON_PKG_RCSMT(`$1', `$2', `$3', 60, 40, 130, 10, 10)') -@end example - -At this point, the @file{example.inc} file could be used by third party -tools such as @code{gsch2pcb}. However to fully integrate our -footprints into PCB we need to create the @file{example.m4} and -@file{example.list} files. The @file{example.m4} file defines -descriptions for the new footprints. -@example -define(`Description_my_RC0402', - ``Standard SMT resistor/capacitor (0402)'') -define(`Description_my_RC0603', - ``Standard SMT resistor/capacitor (0603)'') -define(`Description_my_RC1206', - ``Standard SMT resistor/capacitor (1206)'') -@end example -Finally we need to create the @file{example.list} file. -@example -my_RC0402:RC0402:RES0402 -my_RC0402:RC0402:CAP0402 -my_RC0603:RC0603:RES0603 -my_RC0603:RC0603:CAP0603 -my_RC1206:RC1206:RES1206 -my_RC1206:RC1206:CAP1206 -@end example -The first field in the list file has the name corresponding to the -Description definitions in @file{example.m4}. The second field is the -template name which corresponds to the macros @code{PKG_*} we defined in -@file{example.inc} with the leading @code{PKG_} removed. It is the -second field which controls what footprint will actually appear on the -board. The final -field is the name of the part type on the board. The first line in our -@file{example.list} file will produce a menu entry in the library window -that reads: -@example -CAP0402, Standard SMT resistor/capacitor (0402) -@end example -The @code{CAP0402} portion comes directly from the third field in -@code{example.list} and the longer description comes from descriptions -macros in @code{example.m4}. Please note that any extra white space -at the end of a line in the @file{.list} files will cause them to -not work properly. - -@subsection Troubleshooting Old Style Libraries - -A powerful technique to help debug problems with libraries is to invoke -the @code{m4} processor directly. This approach will provide error -output which is not visible from within PCB. The following example -shows how one might try to debug an 8 pin small outline (SO8) package. The -macro name for the package is PKG_SO8. In this example, the -canonical name that is to be associated with the part is SO8, the -reference designator is U1, and the value is MAX4107 (the part number). - -@example -echo "PKG_SO8(SO8, U1, MAX4107)" | \ - gm4 common.m4 - | \ - awk '/^[ \t]*$/ @{next@} @{print@}' | \ - more -@end example -The @code{awk} call simply removes blank lines which make the output -hard to read. - -For this particular example, the output is: -@example -Element(0x00 "SO8" "U1" "MAX4107" 146 50 3 100 0x00) -( - Pad(10 25 38 25 20 "1" 0x00) - Pad(10 75 38 75 20 "2" 0x100) - Pad(10 125 38 125 20 "3" 0x100) - Pad(10 175 38 175 20 "4" 0x100) - Pad(214 175 242 175 20 "5" 0x100) - Pad(214 125 242 125 20 "6" 0x100) - Pad(214 75 242 75 20 "7" 0x100) - Pad(214 25 242 25 20 "8" 0x100) - ElementLine(0 0 151 0 10) - ElementArc(126 0 25 25 0 180 10) - ElementLine(101 0 252 0 10) - ElementLine(252 0 252 200 10) - ElementLine(252 200 0 200 10) - ElementLine(0 200 0 0 10) - Mark(29 25) -) -@end example - -@section New Style Libraries -Footprints for the new style library are created graphically using the -PCB program. A single footprint is saved in each file. - -@subsection Creating Newlib Footprints -To create -@enumerate -@item Start PCB with an empty layout. -@item Make the component layer active. -@item For a leaded part, select the via tool and place vias where the -pads for the part should go. For surface mount pads, draw line -segments. Note that until the footprint is completed, the surface -mount pads will remain rounded. Currently a rectangle or polygon -may not be used as a pad. -@item For each via and line segment which will become a pad, select it -and press 'n' to be able to enter a name. Enter -the pin number and press enter. -@item Make the silk layer active. -@item Using the line and arc tools, draw a silk screen outline for the -part. -@item Using the selection tool, select all of the pins and silk screen -for the part. -@item Place the pointer above the reference point for the part. This is -typically the common centroid. Keeping the pointer there, shift-right-click -to bring up the popup menu and choose "convert -selection to element". -@item At this point, the vias, line segments, and silk screen will have -been converted to an element. To change any of the line segments to -have square ends rather than round ends, select the pads by holding -down the shift key and clicking each pad with the center mouse button. -Now under the Select menu, "Change square-flag of selected objects" -section, choose "Pins". -@item Select the element, shift-right-click to bring up the popup menu, and -choose "Copy Selection to Buffer". Now left-click on the center of -the new element. -@item Under the buffer menu, choose "save buffer elements to file" to -save the new footprint to a file. -@item Press ESC to exit from buffer mode. -@end enumerate - -@subsection Modifying Newlib Footprints -@enumerate -@item In the @pcb{} program, instantiate the footprint you wish to modify. -@item Using the selection tool, select the footprint. -@item Now left-click on the selected element, this brings up a popup menu, choose -"Cut Selection to Buffer" from the popup menu. -@item Under the buffer menu, choose "break buffer element to pieces", -and then left-click to place the broken apart footprint to an open area of -the layout. Note that you must use the items under the buffer menu, the -items with the same names in the popup menu do not work. -@item Make your desired modifications to the footprint and then convert -the pieces back to an element using the same procedure as when starting -from scratch on a new footprint. -@end enumerate - - -@c --------------------------- chapter 8 ------------------------------- -@node Schematic Frontends -@chapter Schematic Capture for PCB -@cindex schematic capture -@cindex schematic frontend - -When designing a circuit board of any complexity, a schematic capture -front-end for the design is highly desired. Any schematic capture -program which is able to generate a netlist in a user defined format as -well as a bill of materials can be made to work with PCB. Currently, we -are aware of two freely available schematic capture programs which can -interface with PCB. This chapter shows how a design can be taken from -start to finish using either of these two tools for schematic capture -and PCB for layout. - -@menu -* gEDA:: Interfacing with GNU EDA (gEDA). -* xcircuit:: Interfacing with xcircuit. -@end menu - -@node gEDA -@section gEDA -@cindex gschem, how to interface with -@cindex gEDA, how to interface with - -This section shows how to use gEDA as the schematic capture front-end for -a PCB design. This section is not intended to be complete documentation -on gEDA and it is assumed that the user has at least some familiarity -with the gEDA suite of programs. - -The basic steps in a gEDA + PCB design flow are: -@enumerate -@item Set up project directories -@item Set up gEDA (gschem/gnetlist) config files -@item Set up gsch2pcb config files -@item Capture schematics using @code{gschem} (part of gEDA) -@item Create any unique PCB footprints needed for the design -@item Generate initial PCB design using @code{gsch2pcb} (part of gEDA) -@item Layout circuit board using @code{pcb} -@item Make any additional schematic changes with @code{gschem} and -forward annotate to PCB with @code{gsch2pcb} -@item Generate photoplot files (RS-274X, also known as "Gerber") for -board vendor -@end enumerate - -@subsection Set Up Project Directories -Although not required, a typical project directory will contain the -schematics and board layout at the top level. -Schematic symbols and circuit board footprints which are unique to this -project are stored in subdirectories. For this example, @file{sym} -contains the project specific schematic symbols and @file{pkg} contains -the project specific footprints. Set up the project subdirectory and -subdirectories by executing: -@example -mkdir ~/myproj -cd ~/myproj -mkdir sym -mkdir pkg -mkdir pkg/newlib -mkdir pkg/m4 -@end example - -@subsection Set Up gEDA Config Files -The gEDA tools, specifically @code{gschem} and @code{gnetlist}, use -configuration files to set the search path for symbol libraries in -addition to other user preferences. Create a file in the top level -project directory called @file{gschemrc}. Add the following lines to -that file: -@example - -;; list libraries here. Order matters as it sets the -;; search order -(component-library "./sym") - -@end example -This sets the local search path for the schematic capture program -@code{gschem}. Now the netlister, @code{gnetlist}, must also be -configured. This can be done by copying the file @file{gschemrc} to -@file{gnetlistrc} by running @samp{cp gschemrc gnetlistrc}. -Alternatively, you can create a soft link so only a single file needs to -be updated if additional symbol paths are added. The link is created by -running @samp{ln -s gschemrc gnetlistrc}. - -@subsection Set Up @code{gsch2pcb} Config Files -The program @code{gsch2pcb}, not to be confused with the older -@code{gschem2pcb} script, is used to link the schematic to layout. -@code{gsch2pcb} is responsible for creating the netlist used to provide -connectivity information to PCB as well creating an initial layout with -all components instantiated in the design. Forward annotation of -schematic changes to the layout is also done using @code{gsch2pcb}. -@code{gsch2pcb} uses a project file to set up the schematic file names, -PCB library locations, and output file names. Create a project file -called @file{project} using the following as an example: -@example - -# List all the schematics to be netlisted -# and laid out on the pc board. -schematics first.sch second.sch third.sch - -# For an output-name of foo, gsch2pcb generates files -# foo.net, foo.pcb, and foo.new.pcb. If there is no -# output-name specified, the file names are derived from -# the first listed schematic, i.e. first.net, etc. -output-name preamp - -@end example - - -@subsection Capture Schematics Using @code{gschem} -This section is fairly brief and assumes familiarity with using the -@code{gschem} schematic capture program. As you are creating your -schematics, be sure to observe the following rules: -@itemize -@item Make sure that each component in the schematic has a -@code{footprint} attribute that corresponds to a footprint in the PCB -library or a footprint you plan on creating. -@item Make sure all reference designators are unique. One way to ensure -this is to run the @code{refdes_renum} script (part of gEDA) after the -schematics are created. -@end itemize - -@subsection Create Any Unique PCB Footprints -Create the new footprints you design needs using either the m4 style or -newlib style of PCB libraries. Refer to @ref{Library Creation} for details on this -process. For m4 style footprints, store them in the @file{pkg/m4} -subdirectory and for newlib footprints, store them in the -@file{pkg/newlib} subdirectory. - -@subsection Generate Initial PCB Design Using @code{gsch2pcb} -The @code{gsch2pcb} program connects the schematic and layout. It basic -operation is to call @code{gnetlist} to generate the connectivity -netlist that PCB used to verify connectivity and to instantiate all -elements found in the schematic to a new layout. -The default, as of @code{gsch2pcb} version 0.9, is to use any found m4 -style parts first and then search for newlib style if no old style part -was found. By using the @code{--use-files} or @code{-f} flag to @code{gsch2pcb} -priority is given to newlib style parts even if m4 style are found. You -may wish to verify this in the @code{gsch2pcb} documentation in case -this changes in the future. -To start your layout, -run @samp{gsch2pcb project} where @file{project} is the project file -created previously. This will create a new netlist file, -@file{preamp.net}, and a new layout file, @file{preamp.pcb}. - - -@subsection Layout Circuit Board -Run PCB on the new layout by running @samp{pcb preamp.pcb}. -Load the netlist file by selecting "load netlist file" from the "file" -menu. In the file selection dialog box, choose @file{preamp.net}. This -loads connectivity information into PCB. - -Using the selection tool, grab and move apart the various footprints -with the middle mouse button. Once the parts are moved apart from each -other, choose "optimize rats-nest" from the "Connects" menu. This menu -choice will display and optimize the rats nest. Use the rats nest to -help guide placement of the parts. You may wish to re-run the "optimize -rats-nest" command after moving parts around. - -After the placement is complete, use the line tool to add traces to the -board. As traces are added, the corresponding rats line will disappear. - -@subsection Forward Annotation of Schematic Changes -If schematic changes are made after the layout has started, -@code{gsch2pcb} can be used to forward annotate these changes to the -layout. To forward annotate schematic changes, run @samp{gsch2pcb -project}. This command will create the files @file{preamp.new.pcb}, -@file{preamp.net}, and modify the file @file{preamp.pcb}. The -modifications to @file{preamp.pcb} include forward annotation of -schematic component value changes, adds any new components, and removes -any deleted components. - -@subsection Generate Photoplot Files (RS-274X) -After the layout is complete, choose "edit layer-groupings" from the -"Settings" menu. The LayerGroups form lets you specify which layers -will appear in each output layer group. For example, in the default -form, layer group 1 has "front" and "front side" in it. The -output file @file{1.gbr} if DOS file names are used, or -@file{somename_front.gbr} if long file names are used will contain the -"front" and "front side" layers in it. Usually the defaults are -sufficient, but this form is still a useful reference. - -Choose "print layout..." from the "File" menu. In the print dialog box, -select "Gerber/RS-274X" for the device -driver. Select the "outline", "alignment", and "drillhelper" options. -To get DOS compatible file names, select the "DOS (8.3) names" option, -otherwise enter "preamp" for the filename. Press "OK". - -The following output files should have been created in the project directory. -The names in parentheses correspond to the DOS compatible output file names. -@table @file -@item preamp_frontsilk.gbr (csilk.gbr) -Top side silk screen. -@item preamp_frontmask.gbr (cmask.gbr) -Top side soldermask relief. -@item preamp_front.gbr (1.gbr) -Top copper. -@item preamp_backmask.gbr (smask.gbr) -Bottom side soldermask relief. -@item preamp_back.gbr (2.gbr) -Bottom Copper. -@item preamp_fab.gbr (fab.gbr) -Fabrication drawing. Also known as the drill drawing. This drawing is -used for reference by the board vendor but is not directly used in the -fabrication process. -@item preamp_plated-drill.cnc (pdrill.cnc) -NC Drill format file for the plated through holes. -@item preamp_unplated-drill.cnc (udrill.cnc) -NC Drill format file for the unplated through holes. -@item preamp_bom.txt (bom.txt) -A bill of materials for the layout. -@item preamp_xy.txt (xy.txt) -Centroid (X-Y) data for driving automated assembly equipment. -@end table - -@comment to include an image: -@comment @image{geda1, 6in, 4in, geda schematic, png} - -@node xcircuit -@section xcircuit -@cindex xcircuit, how to interface with -@cindex xcircuit, how to interface with - -If anyone cares to contribute this section, it will get added. Please -submit changes to the bug tracking system for PCB which can be found from -the PCB homepage at @url{http://pcb.gpleda.org}. - -@c --------------------------- Appendix A ------------------------------- - -@node Installation -@appendix Installation and Troubleshooting - -Compiling and installing the package should be straightforward. If any problems -occur, please contact the author @email{Thomas.Nau@@rz.uni-ulm.de}, or the -current maintainer @email{haceaton@@aplcomm.jhuapl.edu} to find -a solution and include it into the next release. - -@menu -* compiling:: Compiling and installing. -* problems:: Troubleshooting. -@end menu - - -@node compiling -@section Compiling and Installing -@cindex install, how to -@cindex compile, how to - -This section covers the steps which are necessary to compile the package. - -@menu -* quickstart:: Quick start. -* running configure:: Customizing Pcb with Configure -@end menu - -@node quickstart -@subsection Quick Start -@cindex GNU build system - -Starting with version 2.0, @pcb{} has switched to a GNU -autoconf/automake build system. Installation of @pcb{} consists of -three steps: configuration, building, and installing. -In a typical installation, these steps are as simple as -@example -./configure -make -make install -@end example - -@node running configure -@subsection Running the configure Script -@cindex GNU configure script -@cindex configure - -The @code{configure} script accepts all of the standard GNU configure -options. For a complete list of configuration options, run -@code{./configure --help}. - - -@table @samp -@vindex INFOLIBDIR -@item INFOLIBDIR -must be set to the directory where your GNU info files are located. - -@vindex PCBLIBDIR -@item PCBLIBDIR -is the path of a directory where the font files will be installed. - -@vindex DEFAULTFONT -@item DEFAULTFONT -the name of the default font file. - -@vindex DEFAULTLIBRARY -@item DEFAULTLIBRARY -the name of the default library. - -@vindex GNUM4 -@item GNUM4 -the name of GNUs m4 version. - -@vindex BTNMOD -@item BTNMOD -If your window manager has already bound @emph{Mod1} together with some -function keys you may want to change this setting. This is true for HP-VUE. - - -@end table - -If you find things which must be changed to compile on your system, -please add the appropriate autoconf tests (if you are familiar with -that) and mail a copy to the maintainer, harry eaton, at -@email{haceaton@@aplcomm.jhuapl.edu}. - - -If you do not have the appropriate permissions you should run -@file{./pcbtest.sh} in the @file{src} directory to run @pcb{} from -the installation directory. - - -@node problems -@section Troubleshooting -@cindex problems -@cindex troubleshooting - -There are some known problems. Most of them are related to -missing parts of a standard @code{X11} distribution. Some others are caused by -third party applications such as @code{X} servers. To make this list more -complete please mail your problems and, if available, solutions to the author. -The mail address may be found at the beginning of this chapter. -In any case, read @ref{X11}. - -By the way, you @code{MUST HAVE AN ANSI COMPILER} to make @pcb{} work. - - -Another source of problems are older versions of @code{flex} and @code{bison}. -@pcb{} definitely works with @code{flex-2.4.7} and @code{bison-1.22} or -later. The problems will result in a @emph{syntax error} while parsing files. -This should only be a problem if you have modified the @code{flex} or -@code{bison} input files. - -The following list gives you just an idea because I'm not able to test -all @pcb{} releases on all platforms. - -@menu -* HP:: Hewlett-Packard series 700 and 800 running HP-UX 10.* -* Sun:: Sun, Solaris 2.5 -* SGI:: SGI, IRIX 5.3 and 6.* -* DEC Alpha:: DEC Alpha, DEC UNIX 3.2c and 4.0 -* SCO:: SCO Unix ODT 3.0, PC hardware -* Linux:: Linux 0.99pl14 and later -* BSD:: FreeBSD, NetBSD ... -* X11:: Refers to @code{X11R4}, @code{X11R5}, and @code{OpenWindows} -* TeX and Manuals:: Problems creating the @file{pcb.dvi} -@end menu - -@node HP -@subsection HP Series 700 and 800 -@cindex architecture -@cindex HP -@cindex Hewlett Packard - -You have to install several @code{X11} include files -or, better, install a complete @code{X11R5} release. Hewlett-Packard doesn't -support the Athena Widgets. So the header files and libraries are missing -from the application media, but they are available as a patch. -They also do not ship the @code{ANSI} compiler with the normal operating -system release so you have to buy one or use @code{GCC}. -Some of the tools are available as patches. - -In addition, @pcb{} has been successfully tested on these platforms with -@code{HPUX 9.*, 10.*} running self-compiled @code{X11R5}. - - -@node Sun -@subsection Sun SPARC architecture -@cindex architecture -@cindex Sun -@cindex Solaris -@cindex OpenWindows - -There are no known problems with Sun machines if they use @code{X11R5} instead -of @code{OpenWindows}. @pcb{} compiled successfully with all kinds of -SPARCstations @code{Solaris-2.[345]}. - -For problems with @code{OpenWindows} refer to @ref{X11}. - -@node SGI -@subsection Silicon Graphics -@cindex architecture -@cindex Silicon Graphics -@cindex SGI - -@pcb{} has been tested on some boxes running either @code{IRIX-4.0.5} or -@code{IRIX-5.3}. The former one uses a @code{X11R4} server. -There are no problems. -For known problems -with @code{X11R4}, see @ref{X11}. - - -@node DEC Alpha -@subsection DEC Alpha -@cindex architecture -@cindex DEC -@cindex Alpha - -@pcb{} compiled and runs without problems on @code{DEC UNIX V3.2c}. - - -@node SCO -@subsection SCO Unix -@cindex architecture -@cindex SCO -@cindex PC UNIX - -John DuBois wrote: -@example -@code{SCO-ODT-3.0} requires the latest version of tls003, the Athena -widget library (available from sosco.sco.com). The main problems -I have encountered are it core dumps fairly often, especially -while loading/dropping elements... -@end example -I'll see what I am able to do as soon as I have access to an @code{SCO} system. - - -@node Linux -@subsection Linux -@cindex architecture -@cindex Linux -@cindex PC UNIX - -Since the @code{X11} version of @pcb{} has been developed on a Linux -system here are no known problems. - - -@node BSD -@subsection FreeBSD and NetBSD -@cindex FreeBSD -@cindex NetBSD -@cindex PC UNIX - -@pcb{} has been tested on NetBSD and works without any problems. -You may also be able to find a NetBSD package at -@url{ftp://ftp.netbsd.org/pub/NetBSD/packages/cad/pcb/README.html} or a -FreeBSD port at -@url{http://www.freebsd.org/cgi/url.cgi?ports/cad/pcb/pkg-descr}. - -@node X11 -@subsection Problems related to X11 -@cindex X11, problems - -There are a some problems related to @code{X11R4} or systems derived from -@code{X11} such as @code{OpenWindows}. @xref{Sun}. You at least have to change -all occurances of @emph{baseTranslations} in the resource files to -@emph{translations} if you are using a @code{X11R4} server. Look at the -@code{X11R5} @emph{Intrinsics} manual for details. - -The panner widget (print dialog box) appears only in release @code{X11R5} and -later. It really simplifies adjusting the offsets. -With earlier releases the printout will always appear in the center of the -page. - -You may have some problems in a mixed @code{X11-OpenWindows} -environment. - -@pcb{} has been tested successfully with @code{X11R6} under Linux 1.1.59 -and later. - - -@node TeX and Manuals -@subsection Problems related to TeX -@cindex TeX, problems - -If your @code{TeX} installation complains about a missing @file{texinfo.tex} -file copy the one included in this release (directory @file{doc} -to your @code{TeX} macro directory. -Note, there are probably newer versions of this file available from some -FTP sites. -@code{TeX-3.0} failed, @code{TeX-3.14} worked just fine. Check our FTP server -@emph{ftp.uni-ulm.de} for ready-to-print versions of the manuals. - - -@c --------------------------- Appendix B ------------------------------- - -@node Custom Menus -@appendix Customizing the Menus - -The menu system is driven off a data file that contains -@dfn{resources}. A resource is a hierarchical description of a data -tree which, in this case, is mapped to the hierarchical menus used by -Pcb. - -@menu -* Resource Syntax:: What a resource file looks like. -* Menu Definitions:: Using a resource to define a menu. -* Menu Files and Defaults:: Where Pcb looks for its menu resource. -@end menu - -@node Resource Syntax -@section Resource Syntax - -A resource file is a simple text file. It contains curly braces to -group things, spaces between things, and double quotes when strings -need to include spaces. There are four fundamental ways of adding -data to a resource. - -First, a string (either a single word or a quoted string with spaces, -we call both ``strings'' in this appendix) can be added all by itself, -to add a string resource to the current resource. This is used, for -example, to define the string printed on a menu button. In this -example, four strings are added to the @var{File} resource: - -@example -File = @{ - Sample - "longer sample" - some text -@} -@end example - -Second, a named string may be added by giving two strings separated by -an equals sign. This is used to specify X resources and a few other -optional parameters of menus, for example. Note that a string all by -itself is thus an ``unnamed'' string. - -@example -@{"Layer groups" foreground=red sensitive=false@} -@end example - -Third, an unnamed subresource may be added. This is used to create -submenus and menu buttons. To add a subresource, simply group other -things in curly braces. This example describes a resource containing -one string and three subresources: - -@example -@{File - @{New do_new()@} - @{Save do_save()@} - @{Quit do_quit()@} -@} -@end example - -Lastly, a named subresource may be added by prefixing an unnamed -subresource with a string and an equals sign, just as when naming -strings. This syntax is used to name the resources used for the main -menu and popup menus: - -@example -MainMenu = @{ - @dots{} - @} -@end example - -Additionally, the menu parser allows for ``hooks'' whereby portions of -the menu system can be programmatically created at runtime by the -application. These hooks are invoked by a single word proceeded by an -at sign, such as this example where most of the Sizes menu is created -automatically: - -@example -@{Sizes - @@sizes - @{"Adjust active sizes ..." AdjustStyle(0)@} - @} -@end example - -In addition to all that, any unquoted pound sign (@code{#}) begins a -comment. Commented text continues until the end of the containing -line. Comments may begin at the beginning of a line, or after other -text on the line: - -@example -# This is a comment -MainMenu = @{ # This is also a comment -@end example - -@node Menu Definitions -@section Menu Definitions - -To best understand this section, you should find the -@file{pcb-menu.res} file that your Pcb uses and refer to it for -examples (@pxref{Menu Files and Defaults}). Note that the lesstif -GUI uses @file{pcb-menu.res} and the GTK+ GUI uses @file{gpcb-menu.res}. -The file format is identical however and if so desired, one can make -one file be a soft link to the other. - -A resource defines a menu when it meets certain semantic requirements. -The menu hierarchy is reflected as a hierarchy of unnamed -subresources, with the first string of each subresource defining the -label used for the menu button. A subresource that itself contains -subresources becomes a submenu, a subresource that does not becomes a -button. - -A submenu should only contain subresources for the buttons or submenus -within that submenu. Two exceptions are allowed: an initial string -sets the label, and the string ``-'' (a single dash) will create a -separator. - -A button should not contain subresources, but will contain many -strings, named and unnamed. The first member shall be an unnamed -string which is the label for the button. Any other unnamed strings -within the button's resource will be used as actions (much like the -.Xdefaults action strings), which are functions that will be called -when the button is pressed (or popped up, or created, depending on the -action). As a convenience, if a left parenthesis is seen, the current -``word'' will continue at least until the matching right parenthesis. -This allows you to pass strings with spaces as arguments to actions -without needing to quote the action. - -Named resources in button resources will be used as X resources. Such -resources can be used to set the font, color, and spacing of buttons. -As a convenience, ``fg'' can be used as an abbreviation for ``foreground''. - -Within the menu's resource file, Pcb will look for a few key named -subresources. At the moment, the only one it looks for is one called -@code{MainMenu}. This will be used for the main menu bar. In the -future, other named subresources will be used for popup resources. - -Given all this, a small sample @file{pcb-menu.res} would be: - -@example -MainMenu = @{ - @{File - @{"Load layout" Load(Layout)@} - - - @{"Quit Program" Quit() fg=red font=10x20@} - @} -@} -@end example - -Within the Pcb sources are specially crafted comments that mark all -the actions, flags, menu hooks, and whatnot that Pcb offers. Read the -file @file{src/gather-actions} in the Pcb source tree for -documentation for these comments. - -@node Menu Files and Defaults -@section Menu Files and Defaults - -Pcb will look for a file which defines its menus, trying the following -names (the example is for the lesstif GUI, the GTK+ GUI has ``gpcb-menu.res'' -in place of ``pcb-menu.res''): - -@example -./pcb-menu.res -$HOME/.pcb-menu.res -$PCBLIBDIR/pcb-menu.res - -@end example - -Note that @var{pcblibdir} defaults to @file{/usr/local/share/pcb} -(hence, @file{/usr/local/share/pcb/pcb-menu.res}). The -@file{} entry refers to a menu definition within the Pcb -application itself. The master file for all this is the file -@file{src/pcb-menu.res} in the Pcb source tree. This master source is -used to create the internal menu definition as well as being installed -in @file{$pcblibdir}. - -@c --------------------------- Appendix C ------------------------------- -@node Regular Expressions -@appendix Element Search/Regular Expressions -@cindex Element Search -@cindex Regular Expressions -@vindex Element Search -@vindex Regular Expressions - -@section Element Search/Regular Expressions -@pcb{}'s search is based on POSIX 1003.2 Regular Expressions. Full POSIX -Regular Expressions are supported by @pcb{} if the regex library was -available when @pcb{} was built. One difference from the regular -expressions found in tools like awk or grep is that PCB implicitly -adds a ``^'' to the begining of a regular expression and ``$'' to the -end of the regular expression. For example, if you enter ``C1'', the -actual regular expression used internally is ``^C1$''. Another difference -is that search patterns in pcb are not case sensitive. That is, ``CON'' is -treated the same as ``con''. - -It is easier to show by example how to search than explain -POSIX 1003.2. With regular expressions most characters are just -themselves, but some are special: - -@table @samp -@item * -Matches 0 or more instances of preceding character. - -@item + -Matches 1 or more instances of preceding character. - -@item ? -Matches 0 or 1 instances of preceding character. - -@item . -Matches any single character other than the newline character. - -@item | -The vertical bar is the alternation operator. It combines two -regular expressions. The result matches if either of them matches. - -@item \ -A backslash indicates the next character should not be interpreted literally -if it normally is, and should be interpreted literally if it normally isn't. - -@item @{n@} -An integer n enclosed in curly brackets matches the preceding item if -it occurs exactly n times. - -@item [ ] -A pair of square brackets matches every character they contain. Characters -may be given explicitly, or as ranges. - -@item - -A hyphen in the context of square brackets denotes the range between the -preceding and the following character. E.g., the range of digits is -``0-9'' . The range of letters from C to K is ``C-K'' . - -@item \^ inside square brackets -Inside square brackets the caret is an anti operator. Its presence makes -the square prackets match anything except the contents of the brackets. - -@item ( ) -Round parenthesis group parts of a regular expression. This is very much -like they do in math formulars. - -@end table - -If you need a special character literally, you can escape it with a -backslash. - -The following examples illustrate how regular expressions can be used to -specify element names (reference designators) to search for. -@table @samp - -@item C5 -Select the element whose name is exactly ``C5''. - -@item C5 | R3 -Select C5 and R3. - -@item C.* -Select all elements whose name start with the letter ``C'', such as C5, or -C42, or CF1. - -@item C.*1 -Select all elements that start with ``C'' and end with ``1'', such as C1, -or C51 or C5/9B71. - -@item R10? -Search for R1 or R10, but will not select R100 or R105. The question mark -is a quantifier for the character ``0''. - -@item R128+ -Selects R128, R1288, R12888, etc. - -@item TB. -Select all terminal blocks having exactly one character designator after -``TB'' such as TB1, TBA, or TBx but not TB. - -@item TB.. -Select all terminal blocks having a two character designator such as TB21 or -TB1a. - -@item TB.* -Select all terminal blocks with any designator. - -@item .*31 -Select all items, whose name ends with ``31'' such as Q31, or R31, or R531. - -@item Q[12] -Select Q1 and Q2. - -@item [A-D].* -Select all items, whose name starts with ``A'', ``B'', ``C'', or ``D''. - -@item .*N@{2@}.* -Select all items, whose name contains two ``N'' in a row such as -CONN23, or connA, but not CON5 - -@item [^D].* -Select all items that do not start with the letter ``D'', such as C2, or -R34, but not D34 - -@end table - - -@c --------------------------- Appendix -- drill sizes ------------------------------- -@node Standard Drill Sizes -@appendix Standard Drill Size Tables -@cindex drill sizes, list of standard -@cindex standard drill sizes - -@section American Standard Wire Size Drills -@include wire_size.texi - -@section American Standard Letter Size Drills -@include letter_size.texi - -@section Fractional Inch Size Drills -@include fractional_size.texi - -@section Metric Drills -@include metric_size.texi - -@c --------------------------- Appendix -- Centroid File Format ---------------------- -@node Centroid File Format -@appendix Centroid (X-Y) File Format -@cindex centroid file format -@cindex x-y file format - -@section Overview - -@section File Format -The centroid output file is in a standard comma seperated values (CSV) -format. Comment lines begin with a ``#''. The output file contains a -header with an RCS Id tag (useful for those who will check the file -into a version control system), a version number for the file format, -some comments containing the author and title of the board, and a -comment describing the remainder of the file format. - -An example centroid file is shown below. - -@example - -# @verb{ $ }Id@verb{ $ } -# PcbXY Version 1.0 -# Date: Fri Jul 22 03:40:08 2005 UTC -# Author: PCB User -# Title: MyBoard - PCB X-Y -# RefDes, Description, Value, X, Y, rotation, top/bottom -# X,Y in mils. rotation in degrees. -# -------------------------------------------- -R61,"0603","10",2610.00,3560.00,90,top -J5,"AMPHENOL_ARFX1231","unknown",2390.00,4220.00,180,top -C13,"0402","0.01u",2340.00,3014.00,270,top - -@end example - -@section Computation of Centroid and Rotation -@cindex centroid file, algorithms -@cindex x-y file, algorithms -The center of each element is found by averaging the (X,Y) coordinates -for the center of each pin and pad in the element. For example if an -element has 2 pins, 1 at (1,0) and another at (1,4) then the centroid -will be at (1,2). - -The calculation of rotation is a bit more complex. Currently a -rotation is not stored for each element but rather the rotated element -is stored. In other words if the element from the library has a pin -at (0,0) and (0,2) and it has been rotated by 90 degrees, then the -@file{.pcb} file will store (0,0) and (2,0) for the pin locations with -no indication that they have been rotated from the original. - -In the event that the element has only 1 pin, then the rotation is set -to zero. If the element has only one pad (as opposed to a -through-hole pin), then the rotation of the pad is used. - -When the element has multiple pins, the location of pin #1 is placed -in the coordinate system which has the centroid of the part at (0,0). -Then which quadrant pin #1 falls in determines the rotation. Zero -degrees of rotation is defined as pin #1 being in the upper left -quadrant. Increasing angles correspond to counterclockwise rotation so a -rotation of 90 degrees places pin #1 in the lower left quadrant. -Currently, the only allowed rotations are 0, 90, 180, and 270 degrees. - -If pin #1 happens to be at the centroid of the part, then pin #2 is -examined to see which quadrant it is located in. The same rules apply -for the definitions of rotation. In other words, when pin #1 is at -the centroid of the part and pin #2 is in the upper left quadrant, the -rotation is declared to be zero degrees. - -@c --------------------------- Appendix -- Actions ---------------------- -@node Action Reference -@appendix Action Reference -@cindex action reference - -@include actions.texi - -@c --------------------------- Appendix -- Glossary ---------------------- -@node Glossary -@appendix Glossary -@cindex glossary -@cindex terminology -@cindex index of terms - -@table @asis - -@item Footprint -The pattern of metal, silkscreen, soldermask relief, and drills which -defines where you place a component on a circuit board. -Footprints are the placed by the user onto the PC board during the -placement phase of PCB layout. - -@item Gerber File -The file format used in the industry to convey a board database to the -manufacturer is RS-274X (which replaces the now obsolete RS-274D -format). This file format was originally developed by Gerber for -their photo plotters and thus RS-274D and RS-274X format files -are often times refered to as ``Gerber'' files. - -@item Thermal, Thermal Relief -A thermal relief is a way of connecting a pin to a ground -or power plane. Instead of directly connecting to the plane, small "spokes" -are used to increase the thermal resistance between the pin and the plane. -Often times these connections are refered to as simply a thermal. By increasing -the thermal resistance to the plane, it becomes easier to solder to the -pin. In the drawing below, the pin on the left is connected to the -polygon using a solid connection with no thermal relief, the middle -pin is connected using a thermal, while the pin on the right has no -connection to the polygon. In PCB, the ``Thermal'' Tool is used to -make both a solid connection and one with thermal relief (see @ref{Polygon Objects}). - -@center @image{thermal,,,Example of a thermal relief,png} - -@end table - -@c --------------------------------------------------------------------- -@node Index -@unnumbered Index of Resources -@printindex vr - -@unnumbered Index of Actions, Commands and Options -@printindex fn - -@unnumbered Index of Concepts -@printindex cp - -@contents -@bye Index: trunk/doc/Makefile =================================================================== --- trunk/doc/Makefile (revision 1036) +++ trunk/doc/Makefile (nonexistent) @@ -1,148 +0,0 @@ -## -*- makefile -*- -## -## COPYRIGHT -## -## PCB, interactive printed circuit board design -## Copyright (C) 1994,1995,1996 Thomas Nau -## -## This program is free software; you can redistribute it and/or modify -## it under the terms of the GNU General Public License as published by -## the Free Software Foundation; either version 2 of the License, or -## (at your option) any later version. -## -## This program is distributed in the hope that it will be useful, -## but WITHOUT ANY WARRANTY; without even the implied warranty of -## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -## GNU General Public License for more details. -## -## You should have received a copy of the GNU General Public License -## along with this program; if not, write to the Free Software -## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -## -## Contact addresses for paper mail and Email: -## Thomas Nau, Schlehenweg 15, 88471 Baustetten, Germany -## Thomas.Nau@rz.uni-ulm.de -## - -## not until it is fully fixed up in terms of building -##SUBDIRS= gs - -info_TEXINFOS= pcb.texi -pcb_TEXINFOS= ${inline_texi} ${pcb_output} ${tab_texi} ${images_output} - -dist_html_DATA= ${html_docs} ${pcb_output_inst} ${images_output_inst} - -dist_man_MANS= pcb.1 - -html_docs= ${info_TEXINFOS:.texi=.html} - -DVIS= - -# put the html manual into 1 file instead of multiple files? -AM_MAKEINFOHTMLFLAGS= --css-include=pcb.css --no-split - -EXTRA_DIST= \ - ascii2texi.awk \ - eps2png \ - extract-docs \ - refcard.tex \ - pcb.css \ - ${inline_texi} \ - ${pcb_files} \ - ${pcb_output_noinst} \ - ${tab_files} \ - ${tab_texi} \ - ${images} - -all: $(html_docs) - -# use this to avoid having the clean target delete pcb.{dvi,html,pdf,ps} -# which unfortunately deletes files which are part of the distfile -clean: - -rm -rf pcb.aux pcb.cp pcb.cps pcb.fn pcb.fns pcb.ky pcb.kys pcb.log pcb.pg \ - pcb.pgs pcb.tmp pcb.toc pcb.tp pcb.tps pcb.vr pcb.vrs - - -BUILT_SOURCES= ${tab_texi} ${pcb_output} ${inline_texi} -CLEANFILES= \ - refcard.aux refcard.log refcard.pdf \ - ${pcb_output} ${tab_texi} ${inline_texi} pcb.html \ - ${images_output} - -inline_texi= \ - options.texi \ - actions.texi \ - pcbfile.texi - -ASCII2TEXI= ${AWK} -f $(srcdir)/ascii2texi.awk ncol=3 - -# Tables -tab_files= \ - fractional_size.tab \ - letter_size.tab \ - metric_size.tab \ - wire_size.tab -tab_texi= ${tab_files:.tab=.texi} - -# PCB Drawings -pcb_files= \ - pad.pcb \ - puller.pcb \ - thermal.pcb \ - gcode.pcb - -pcb_output_noinst= \ - ${pcb_files:.pcb=.pdf} - -pcb_output_inst= \ - ${pcb_files:.pcb=.png} - -pcb_output= ${pcb_output_inst} ${pcb_output_noinst} - -# Additional images -images= \ - gcode_control_img.eps \ - gcode_tool_path.eps - -images_output_noinst= \ - ${images:.eps=.pdf} - -images_output_inst= \ - ${images:.eps=.png} - -images_output= ${images_output_noinst} ${images_output_inst} - -${inline_texi} : extracted-docs - -# no need to build these when building via a tarball. They're not used then -# anyway. -.PHONY : extracted-docs -extracted-docs : - ${PERL} $(srcdir)/extract-docs $(srcdir) - -SUFFIXES = .eps .pcb .pdf .png .tab .tex .html .texi - -.pcb.eps : - ${PCB} -x eps --only-visible --font-path $(top_srcdir)/src --eps-file $@ $< - -.pcb.png : - ${PCB} -x png --only-visible --font-path $(top_srcdir)/src --outfile $@ $< - -.eps.pdf : - ${PS2PDF} `${AWK} 'BEGIN{s=8}; /BoundingBox/ {printf("-r%d -g%dx%d", s*72, s*$$4, s*$$5);}' $<` $< $@ - -.tab.texi: - ${ASCII2TEXI} $< > $@ - -.tex.pdf: - ${PDFLATEX} $< - ${PDFLATEX} $< - ${PDFLATEX} $< - -.eps.png: - ${PERL} $(srcdir)/eps2png --png $< > $@ - -%.html: %.texi - rm $@ 2>/dev/null; true - makeinfo --html --css-include=pcb.css --no-split --output=$@ $^ - Index: trunk/doc/fractional_size.tab =================================================================== --- trunk/doc/fractional_size.tab (revision 1036) +++ trunk/doc/fractional_size.tab (nonexistent) @@ -1,68 +0,0 @@ -# $Id$ -# - -1/64 .0156 -1/32 .0313 -3/64 .0469 -1/16 .0625 -5/64 .0781 -3/32 .0938 -7/64 .1094 -1/8 .1250 -9/64 .1406 -5/32 .1562 -11/64 .1719 -3/16 .1875 -13/64 .2031 -7/32 .2188 -15/64 .2344 -1/4 .2500 -17/64 .2656 -9/32 .2812 -19/64 .2969 -5/16 .3125 -21/64 .3281 -11/32 .3438 -23/64 .3594 -3/8 .3750 -25/64 .3906 -13/32 .4062 -27/64 .4219 -7/16 .4375 -29/64 .4531 -15/32 .4688 -31/64 .4844 -1/2 .5000 -33/64 .5156 -17/32 .5313 -35/64 .5469 -9/16 .5625 -37/64 .5781 -19/32 .5938 -39/64 .6094 -5/8 .6250 -41/64 .6406 -21/32 .6562 -43/64 .6719 -11/16 .6875 -45/64 .7031 -23/32 .7188 -47/64 .7344 -3/4 .7500 -49/64 .7656 -25/32 .7812 -51/64 .7969 -13/16 .8125 -53/64 .8281 -27/32 .8438 -55/64 .8594 -7/8 .8750 -57/64 .8906 -29/32 .9062 -59/64 .9219 -15/16 .9375 -61/64 .9531 -31/32 .9688 -63/64 .9844 -1 1.0000 - Index: trunk/doc/fractional_size.texi =================================================================== --- trunk/doc/fractional_size.texi (revision 1036) +++ trunk/doc/fractional_size.texi (nonexistent) @@ -1,29 +0,0 @@ -@c Generated file. Do not edit directly -@c $Id$ -@multitable @columnfractions 0.167 0.167 0.167 0.167 0.167 0.167 -@item Drill @tab Diameter @tab Drill @tab Diameter @tab Drill @tab Diameter -@item Size @tab (inches) @tab Size @tab (inches) @tab Size @tab (inches) - -@item 1/64 @tab .0156 @tab 1/32 @tab .0313 @tab 3/64 @tab .0469 -@item 1/16 @tab .0625 @tab 5/64 @tab .0781 @tab 3/32 @tab .0938 -@item 7/64 @tab .1094 @tab 1/8 @tab .1250 @tab 9/64 @tab .1406 -@item 5/32 @tab .1562 @tab 11/64 @tab .1719 @tab 3/16 @tab .1875 -@item 13/64 @tab .2031 @tab 7/32 @tab .2188 @tab 15/64 @tab .2344 -@item 1/4 @tab .2500 @tab 17/64 @tab .2656 @tab 9/32 @tab .2812 -@item 19/64 @tab .2969 @tab 5/16 @tab .3125 @tab 21/64 @tab .3281 -@item 11/32 @tab .3438 @tab 23/64 @tab .3594 @tab 3/8 @tab .3750 -@item 25/64 @tab .3906 @tab 13/32 @tab .4062 @tab 27/64 @tab .4219 -@item 7/16 @tab .4375 @tab 29/64 @tab .4531 @tab 15/32 @tab .4688 -@item 31/64 @tab .4844 @tab 1/2 @tab .5000 @tab 33/64 @tab .5156 -@item 17/32 @tab .5313 @tab 35/64 @tab .5469 @tab 9/16 @tab .5625 -@item 37/64 @tab .5781 @tab 19/32 @tab .5938 @tab 39/64 @tab .6094 -@item 5/8 @tab .6250 @tab 41/64 @tab .6406 @tab 21/32 @tab .6562 -@item 43/64 @tab .6719 @tab 11/16 @tab .6875 @tab 45/64 @tab .7031 -@item 23/32 @tab .7188 @tab 47/64 @tab .7344 @tab 3/4 @tab .7500 -@item 49/64 @tab .7656 @tab 25/32 @tab .7812 @tab 51/64 @tab .7969 -@item 13/16 @tab .8125 @tab 53/64 @tab .8281 @tab 27/32 @tab .8438 -@item 55/64 @tab .8594 @tab 7/8 @tab .8750 @tab 57/64 @tab .8906 -@item 29/32 @tab .9062 @tab 59/64 @tab .9219 @tab 15/16 @tab .9375 -@item 61/64 @tab .9531 @tab 31/32 @tab .9688 @tab 63/64 @tab .9844 -@item 1 @tab 1.0000 @tab @tab @tab @tab @end multitable - Index: trunk/doc/stamp-vti =================================================================== --- trunk/doc/stamp-vti (revision 1036) +++ trunk/doc/stamp-vti (nonexistent) @@ -1,4 +0,0 @@ -@set UPDATED 17 September 2011 -@set UPDATED-MONTH September 2011 -@set EDITION 20110918 -@set VERSION 20110918 Index: trunk/doc/gcode.pcb =================================================================== --- trunk/doc/gcode.pcb (revision 1036) +++ trunk/doc/gcode.pcb (nonexistent) @@ -1,1000 +0,0 @@ -# release: pcb 20091103 -# date: Tue Feb 9 17:50:10 2010 -# user: amc (amc,/home/alberto,S-1-5-21-3544562028-792812758-4257637587-9314) -# host: ni28979b.office.amsiag.com - -# To read pcb files, the pcb version (or the cvs source date) must be >= the file version -FileVersion[20070407] - -PCB["" 280000 160000] - -Grid[1000.000000 0 0 0] -Cursor[0 0 0.000000] -PolyArea[200000000.000000] -Thermal[0.500000] -DRC[1000 1000 1000 1000 1500 1000] -Flags("showdrc,nameonpcb,swapstartdir,clearnew,snappin") -Groups("1,c:2,s:3:4:5:6:7:8") -Styles["Signal,4000,8000,3000,2000:Power,2500,6000,3500,1000:Fat,4000,6000,3500,1000:Skinny,600,2402,1181,600"] - -Symbol(' ' 18) -( -) -Symbol('!' 12) -( - SymbolLine(0 45 0 50 8) - SymbolLine(0 10 0 35 8) -) -Symbol('"' 12) -( - SymbolLine(0 10 0 20 8) - SymbolLine(10 10 10 20 8) -) -Symbol('#' 12) -( - SymbolLine(0 35 20 35 8) - SymbolLine(0 25 20 25 8) - SymbolLine(15 20 15 40 8) - SymbolLine(5 20 5 40 8) -) -Symbol('$' 12) -( - SymbolLine(15 15 20 20 8) - SymbolLine(5 15 15 15 8) - SymbolLine(0 20 5 15 8) - SymbolLine(0 20 0 25 8) - SymbolLine(0 25 5 30 8) - SymbolLine(5 30 15 30 8) - SymbolLine(15 30 20 35 8) - SymbolLine(20 35 20 40 8) - SymbolLine(15 45 20 40 8) - SymbolLine(5 45 15 45 8) - SymbolLine(0 40 5 45 8) - SymbolLine(10 10 10 50 8) -) -Symbol('%' 12) -( - SymbolLine(0 15 0 20 8) - SymbolLine(0 15 5 10 8) - SymbolLine(5 10 10 10 8) - SymbolLine(10 10 15 15 8) - SymbolLine(15 15 15 20 8) - SymbolLine(10 25 15 20 8) - SymbolLine(5 25 10 25 8) - SymbolLine(0 20 5 25 8) - SymbolLine(0 50 40 10 8) - SymbolLine(35 50 40 45 8) - SymbolLine(40 40 40 45 8) - SymbolLine(35 35 40 40 8) - SymbolLine(30 35 35 35 8) - SymbolLine(25 40 30 35 8) - SymbolLine(25 40 25 45 8) - SymbolLine(25 45 30 50 8) - SymbolLine(30 50 35 50 8) -) -Symbol('&' 12) -( - SymbolLine(0 45 5 50 8) - SymbolLine(0 15 0 25 8) - SymbolLine(0 15 5 10 8) - SymbolLine(0 35 15 20 8) - SymbolLine(5 50 10 50 8) - SymbolLine(10 50 20 40 8) - SymbolLine(0 25 25 50 8) - SymbolLine(5 10 10 10 8) - SymbolLine(10 10 15 15 8) - SymbolLine(15 15 15 20 8) - SymbolLine(0 35 0 45 8) -) -Symbol(''' 12) -( - SymbolLine(0 20 10 10 8) -) -Symbol('(' 12) -( - SymbolLine(0 45 5 50 8) - SymbolLine(0 15 5 10 8) - SymbolLine(0 15 0 45 8) -) -Symbol(')' 12) -( - SymbolLine(0 10 5 15 8) - SymbolLine(5 15 5 45 8) - SymbolLine(0 50 5 45 8) -) -Symbol('*' 12) -( - SymbolLine(0 20 20 40 8) - SymbolLine(0 40 20 20 8) - SymbolLine(0 30 20 30 8) - SymbolLine(10 20 10 40 8) -) -Symbol('+' 12) -( - SymbolLine(0 30 20 30 8) - SymbolLine(10 20 10 40 8) -) -Symbol(',' 12) -( - SymbolLine(0 60 10 50 8) -) -Symbol('-' 12) -( - SymbolLine(0 30 20 30 8) -) -Symbol('.' 12) -( - SymbolLine(0 50 5 50 8) -) -Symbol('/' 12) -( - SymbolLine(0 45 30 15 8) -) -Symbol('0' 12) -( - SymbolLine(0 45 5 50 8) - SymbolLine(0 15 0 45 8) - SymbolLine(0 15 5 10 8) - SymbolLine(5 10 15 10 8) - SymbolLine(15 10 20 15 8) - SymbolLine(20 15 20 45 8) - SymbolLine(15 50 20 45 8) - SymbolLine(5 50 15 50 8) - SymbolLine(0 40 20 20 8) -) -Symbol('1' 12) -( - SymbolLine(5 50 15 50 8) - SymbolLine(10 10 10 50 8) - SymbolLine(0 20 10 10 8) -) -Symbol('2' 12) -( - SymbolLine(0 15 5 10 8) - SymbolLine(5 10 20 10 8) - SymbolLine(20 10 25 15 8) - SymbolLine(25 15 25 25 8) - SymbolLine(0 50 25 25 8) - SymbolLine(0 50 25 50 8) -) -Symbol('3' 12) -( - SymbolLine(0 15 5 10 8) - SymbolLine(5 10 15 10 8) - SymbolLine(15 10 20 15 8) - SymbolLine(20 15 20 45 8) - SymbolLine(15 50 20 45 8) - SymbolLine(5 50 15 50 8) - SymbolLine(0 45 5 50 8) - SymbolLine(5 30 20 30 8) -) -Symbol('4' 12) -( - SymbolLine(0 30 20 10 8) - SymbolLine(0 30 25 30 8) - SymbolLine(20 10 20 50 8) -) -Symbol('5' 12) -( - SymbolLine(0 10 20 10 8) - SymbolLine(0 10 0 30 8) - SymbolLine(0 30 5 25 8) - SymbolLine(5 25 15 25 8) - SymbolLine(15 25 20 30 8) - SymbolLine(20 30 20 45 8) - SymbolLine(15 50 20 45 8) - SymbolLine(5 50 15 50 8) - SymbolLine(0 45 5 50 8) -) -Symbol('6' 12) -( - SymbolLine(15 10 20 15 8) - SymbolLine(5 10 15 10 8) - SymbolLine(0 15 5 10 8) - SymbolLine(0 15 0 45 8) - SymbolLine(0 45 5 50 8) - SymbolLine(15 30 20 35 8) - SymbolLine(0 30 15 30 8) - SymbolLine(5 50 15 50 8) - SymbolLine(15 50 20 45 8) - SymbolLine(20 35 20 45 8) -) -Symbol('7' 12) -( - SymbolLine(0 50 25 25 8) - SymbolLine(25 10 25 25 8) - SymbolLine(0 10 25 10 8) -) -Symbol('8' 12) -( - SymbolLine(0 45 5 50 8) - SymbolLine(0 35 0 45 8) - SymbolLine(0 35 5 30 8) - SymbolLine(5 30 15 30 8) - SymbolLine(15 30 20 35 8) - SymbolLine(20 35 20 45 8) - SymbolLine(15 50 20 45 8) - SymbolLine(5 50 15 50 8) - SymbolLine(0 25 5 30 8) - SymbolLine(0 15 0 25 8) - SymbolLine(0 15 5 10 8) - SymbolLine(5 10 15 10 8) - SymbolLine(15 10 20 15 8) - SymbolLine(20 15 20 25 8) - SymbolLine(15 30 20 25 8) -) -Symbol('9' 12) -( - SymbolLine(0 50 20 30 8) - SymbolLine(20 15 20 30 8) - SymbolLine(15 10 20 15 8) - SymbolLine(5 10 15 10 8) - SymbolLine(0 15 5 10 8) - SymbolLine(0 15 0 25 8) - SymbolLine(0 25 5 30 8) - SymbolLine(5 30 20 30 8) -) -Symbol(':' 12) -( - SymbolLine(0 25 5 25 8) - SymbolLine(0 35 5 35 8) -) -Symbol(';' 12) -( - SymbolLine(0 50 10 40 8) - SymbolLine(10 25 10 30 8) -) -Symbol('<' 12) -( - SymbolLine(0 30 10 20 8) - SymbolLine(0 30 10 40 8) -) -Symbol('=' 12) -( - SymbolLine(0 25 20 25 8) - SymbolLine(0 35 20 35 8) -) -Symbol('>' 12) -( - SymbolLine(0 20 10 30 8) - SymbolLine(0 40 10 30 8) -) -Symbol('?' 12) -( - SymbolLine(10 30 10 35 8) - SymbolLine(10 45 10 50 8) - SymbolLine(0 15 0 20 8) - SymbolLine(0 15 5 10 8) - SymbolLine(5 10 15 10 8) - SymbolLine(15 10 20 15 8) - SymbolLine(20 15 20 20 8) - SymbolLine(10 30 20 20 8) -) -Symbol('@' 12) -( - SymbolLine(0 10 0 40 8) - SymbolLine(0 40 10 50 8) - SymbolLine(10 50 40 50 8) - SymbolLine(50 35 50 10 8) - SymbolLine(50 10 40 0 8) - SymbolLine(40 0 10 0 8) - SymbolLine(10 0 0 10 8) - SymbolLine(15 20 15 30 8) - SymbolLine(15 30 20 35 8) - SymbolLine(20 35 30 35 8) - SymbolLine(30 35 35 30 8) - SymbolLine(35 30 40 35 8) - SymbolLine(35 30 35 15 8) - SymbolLine(35 20 30 15 8) - SymbolLine(20 15 30 15 8) - SymbolLine(20 15 15 20 8) - SymbolLine(40 35 50 35 8) -) -Symbol('A' 12) -( - SymbolLine(0 15 0 50 8) - SymbolLine(0 15 5 10 8) - SymbolLine(5 10 20 10 8) - SymbolLine(20 10 25 15 8) - SymbolLine(25 15 25 50 8) - SymbolLine(0 30 25 30 8) -) -Symbol('B' 12) -( - SymbolLine(0 50 20 50 8) - SymbolLine(20 50 25 45 8) - SymbolLine(25 35 25 45 8) - SymbolLine(20 30 25 35 8) - SymbolLine(5 30 20 30 8) - SymbolLine(5 10 5 50 8) - SymbolLine(0 10 20 10 8) - SymbolLine(20 10 25 15 8) - SymbolLine(25 15 25 25 8) - SymbolLine(20 30 25 25 8) -) -Symbol('C' 12) -( - SymbolLine(5 50 20 50 8) - SymbolLine(0 45 5 50 8) - SymbolLine(0 15 0 45 8) - SymbolLine(0 15 5 10 8) - SymbolLine(5 10 20 10 8) -) -Symbol('D' 12) -( - SymbolLine(5 10 5 50 8) - SymbolLine(20 10 25 15 8) - SymbolLine(25 15 25 45 8) - SymbolLine(20 50 25 45 8) - SymbolLine(0 50 20 50 8) - SymbolLine(0 10 20 10 8) -) -Symbol('E' 12) -( - SymbolLine(0 30 15 30 8) - SymbolLine(0 50 20 50 8) - SymbolLine(0 10 0 50 8) - SymbolLine(0 10 20 10 8) -) -Symbol('F' 12) -( - SymbolLine(0 10 0 50 8) - SymbolLine(0 10 20 10 8) - SymbolLine(0 30 15 30 8) -) -Symbol('G' 12) -( - SymbolLine(20 10 25 15 8) - SymbolLine(5 10 20 10 8) - SymbolLine(0 15 5 10 8) - SymbolLine(0 15 0 45 8) - SymbolLine(0 45 5 50 8) - SymbolLine(5 50 20 50 8) - SymbolLine(20 50 25 45 8) - SymbolLine(25 35 25 45 8) - SymbolLine(20 30 25 35 8) - SymbolLine(10 30 20 30 8) -) -Symbol('H' 12) -( - SymbolLine(0 10 0 50 8) - SymbolLine(25 10 25 50 8) - SymbolLine(0 30 25 30 8) -) -Symbol('I' 12) -( - SymbolLine(0 10 10 10 8) - SymbolLine(5 10 5 50 8) - SymbolLine(0 50 10 50 8) -) -Symbol('J' 12) -( - SymbolLine(0 10 15 10 8) - SymbolLine(15 10 15 45 8) - SymbolLine(10 50 15 45 8) - SymbolLine(5 50 10 50 8) - SymbolLine(0 45 5 50 8) -) -Symbol('K' 12) -( - SymbolLine(0 10 0 50 8) - SymbolLine(0 30 20 10 8) - SymbolLine(0 30 20 50 8) -) -Symbol('L' 12) -( - SymbolLine(0 10 0 50 8) - SymbolLine(0 50 20 50 8) -) -Symbol('M' 12) -( - SymbolLine(0 10 0 50 8) - SymbolLine(0 10 15 25 8) - SymbolLine(15 25 30 10 8) - SymbolLine(30 10 30 50 8) -) -Symbol('N' 12) -( - SymbolLine(0 10 0 50 8) - SymbolLine(0 10 0 15 8) - SymbolLine(0 15 25 40 8) - SymbolLine(25 10 25 50 8) -) -Symbol('O' 12) -( - SymbolLine(0 15 0 45 8) - SymbolLine(0 15 5 10 8) - SymbolLine(5 10 15 10 8) - SymbolLine(15 10 20 15 8) - SymbolLine(20 15 20 45 8) - SymbolLine(15 50 20 45 8) - SymbolLine(5 50 15 50 8) - SymbolLine(0 45 5 50 8) -) -Symbol('P' 12) -( - SymbolLine(5 10 5 50 8) - SymbolLine(0 10 20 10 8) - SymbolLine(20 10 25 15 8) - SymbolLine(25 15 25 25 8) - SymbolLine(20 30 25 25 8) - SymbolLine(5 30 20 30 8) -) -Symbol('Q' 12) -( - SymbolLine(0 15 0 45 8) - SymbolLine(0 15 5 10 8) - SymbolLine(5 10 15 10 8) - SymbolLine(15 10 20 15 8) - SymbolLine(20 15 20 45 8) - SymbolLine(15 50 20 45 8) - SymbolLine(5 50 15 50 8) - SymbolLine(0 45 5 50 8) - SymbolLine(10 40 20 50 8) -) -Symbol('R' 12) -( - SymbolLine(0 10 20 10 8) - SymbolLine(20 10 25 15 8) - SymbolLine(25 15 25 25 8) - SymbolLine(20 30 25 25 8) - SymbolLine(5 30 20 30 8) - SymbolLine(5 10 5 50 8) - SymbolLine(5 30 25 50 8) -) -Symbol('S' 12) -( - SymbolLine(20 10 25 15 8) - SymbolLine(5 10 20 10 8) - SymbolLine(0 15 5 10 8) - SymbolLine(0 15 0 25 8) - SymbolLine(0 25 5 30 8) - SymbolLine(5 30 20 30 8) - SymbolLine(20 30 25 35 8) - SymbolLine(25 35 25 45 8) - SymbolLine(20 50 25 45 8) - SymbolLine(5 50 20 50 8) - SymbolLine(0 45 5 50 8) -) -Symbol('T' 12) -( - SymbolLine(0 10 20 10 8) - SymbolLine(10 10 10 50 8) -) -Symbol('U' 12) -( - SymbolLine(0 10 0 45 8) - SymbolLine(0 45 5 50 8) - SymbolLine(5 50 15 50 8) - SymbolLine(15 50 20 45 8) - SymbolLine(20 10 20 45 8) -) -Symbol('V' 12) -( - SymbolLine(0 10 0 40 8) - SymbolLine(0 40 10 50 8) - SymbolLine(10 50 20 40 8) - SymbolLine(20 10 20 40 8) -) -Symbol('W' 12) -( - SymbolLine(0 10 0 50 8) - SymbolLine(0 50 15 35 8) - SymbolLine(15 35 30 50 8) - SymbolLine(30 10 30 50 8) -) -Symbol('X' 12) -( - SymbolLine(0 10 0 15 8) - SymbolLine(0 15 25 40 8) - SymbolLine(25 40 25 50 8) - SymbolLine(0 40 0 50 8) - SymbolLine(0 40 25 15 8) - SymbolLine(25 10 25 15 8) -) -Symbol('Y' 12) -( - SymbolLine(0 10 0 15 8) - SymbolLine(0 15 10 25 8) - SymbolLine(10 25 20 15 8) - SymbolLine(20 10 20 15 8) - SymbolLine(10 25 10 50 8) -) -Symbol('Z' 12) -( - SymbolLine(0 10 25 10 8) - SymbolLine(25 10 25 15 8) - SymbolLine(0 40 25 15 8) - SymbolLine(0 40 0 50 8) - SymbolLine(0 50 25 50 8) -) -Symbol('[' 12) -( - SymbolLine(0 10 5 10 8) - SymbolLine(0 10 0 50 8) - SymbolLine(0 50 5 50 8) -) -Symbol('\' 12) -( - SymbolLine(0 15 30 45 8) -) -Symbol(']' 12) -( - SymbolLine(0 10 5 10 8) - SymbolLine(5 10 5 50 8) - SymbolLine(0 50 5 50 8) -) -Symbol('^' 12) -( - SymbolLine(0 15 5 10 8) - SymbolLine(5 10 10 15 8) -) -Symbol('_' 12) -( - SymbolLine(0 50 20 50 8) -) -Symbol('a' 12) -( - SymbolLine(15 30 20 35 8) - SymbolLine(5 30 15 30 8) - SymbolLine(0 35 5 30 8) - SymbolLine(0 35 0 45 8) - SymbolLine(0 45 5 50 8) - SymbolLine(20 30 20 45 8) - SymbolLine(20 45 25 50 8) - SymbolLine(5 50 15 50 8) - SymbolLine(15 50 20 45 8) -) -Symbol('b' 12) -( - SymbolLine(0 10 0 50 8) - SymbolLine(0 45 5 50 8) - SymbolLine(5 50 15 50 8) - SymbolLine(15 50 20 45 8) - SymbolLine(20 35 20 45 8) - SymbolLine(15 30 20 35 8) - SymbolLine(5 30 15 30 8) - SymbolLine(0 35 5 30 8) -) -Symbol('c' 12) -( - SymbolLine(5 30 20 30 8) - SymbolLine(0 35 5 30 8) - SymbolLine(0 35 0 45 8) - SymbolLine(0 45 5 50 8) - SymbolLine(5 50 20 50 8) -) -Symbol('d' 12) -( - SymbolLine(20 10 20 50 8) - SymbolLine(15 50 20 45 8) - SymbolLine(5 50 15 50 8) - SymbolLine(0 45 5 50 8) - SymbolLine(0 35 0 45 8) - SymbolLine(0 35 5 30 8) - SymbolLine(5 30 15 30 8) - SymbolLine(15 30 20 35 8) -) -Symbol('e' 12) -( - SymbolLine(5 50 20 50 8) - SymbolLine(0 45 5 50 8) - SymbolLine(0 35 0 45 8) - SymbolLine(0 35 5 30 8) - SymbolLine(5 30 15 30 8) - SymbolLine(15 30 20 35 8) - SymbolLine(0 40 20 40 8) - SymbolLine(20 40 20 35 8) -) -Symbol('f' 10) -( - SymbolLine(5 15 5 50 8) - SymbolLine(5 15 10 10 8) - SymbolLine(10 10 15 10 8) - SymbolLine(0 30 10 30 8) -) -Symbol('g' 12) -( - SymbolLine(15 30 20 35 8) - SymbolLine(5 30 15 30 8) - SymbolLine(0 35 5 30 8) - SymbolLine(0 35 0 45 8) - SymbolLine(0 45 5 50 8) - SymbolLine(5 50 15 50 8) - SymbolLine(15 50 20 45 8) - SymbolLine(0 60 5 65 8) - SymbolLine(5 65 15 65 8) - SymbolLine(15 65 20 60 8) - SymbolLine(20 30 20 60 8) -) -Symbol('h' 12) -( - SymbolLine(0 10 0 50 8) - SymbolLine(0 35 5 30 8) - SymbolLine(5 30 15 30 8) - SymbolLine(15 30 20 35 8) - SymbolLine(20 35 20 50 8) -) -Symbol('i' 10) -( - SymbolLine(0 20 0 25 8) - SymbolLine(0 35 0 50 8) -) -Symbol('j' 10) -( - SymbolLine(5 20 5 25 8) - SymbolLine(5 35 5 60 8) - SymbolLine(0 65 5 60 8) -) -Symbol('k' 12) -( - SymbolLine(0 10 0 50 8) - SymbolLine(0 35 15 50 8) - SymbolLine(0 35 10 25 8) -) -Symbol('l' 10) -( - SymbolLine(0 10 0 45 8) - SymbolLine(0 45 5 50 8) -) -Symbol('m' 12) -( - SymbolLine(5 35 5 50 8) - SymbolLine(5 35 10 30 8) - SymbolLine(10 30 15 30 8) - SymbolLine(15 30 20 35 8) - SymbolLine(20 35 20 50 8) - SymbolLine(20 35 25 30 8) - SymbolLine(25 30 30 30 8) - SymbolLine(30 30 35 35 8) - SymbolLine(35 35 35 50 8) - SymbolLine(0 30 5 35 8) -) -Symbol('n' 12) -( - SymbolLine(5 35 5 50 8) - SymbolLine(5 35 10 30 8) - SymbolLine(10 30 15 30 8) - SymbolLine(15 30 20 35 8) - SymbolLine(20 35 20 50 8) - SymbolLine(0 30 5 35 8) -) -Symbol('o' 12) -( - SymbolLine(0 35 0 45 8) - SymbolLine(0 35 5 30 8) - SymbolLine(5 30 15 30 8) - SymbolLine(15 30 20 35 8) - SymbolLine(20 35 20 45 8) - SymbolLine(15 50 20 45 8) - SymbolLine(5 50 15 50 8) - SymbolLine(0 45 5 50 8) -) -Symbol('p' 12) -( - SymbolLine(5 35 5 65 8) - SymbolLine(0 30 5 35 8) - SymbolLine(5 35 10 30 8) - SymbolLine(10 30 20 30 8) - SymbolLine(20 30 25 35 8) - SymbolLine(25 35 25 45 8) - SymbolLine(20 50 25 45 8) - SymbolLine(10 50 20 50 8) - SymbolLine(5 45 10 50 8) -) -Symbol('q' 12) -( - SymbolLine(20 35 20 65 8) - SymbolLine(15 30 20 35 8) - SymbolLine(5 30 15 30 8) - SymbolLine(0 35 5 30 8) - SymbolLine(0 35 0 45 8) - SymbolLine(0 45 5 50 8) - SymbolLine(5 50 15 50 8) - SymbolLine(15 50 20 45 8) -) -Symbol('r' 12) -( - SymbolLine(5 35 5 50 8) - SymbolLine(5 35 10 30 8) - SymbolLine(10 30 20 30 8) - SymbolLine(0 30 5 35 8) -) -Symbol('s' 12) -( - SymbolLine(5 50 20 50 8) - SymbolLine(20 50 25 45 8) - SymbolLine(20 40 25 45 8) - SymbolLine(5 40 20 40 8) - SymbolLine(0 35 5 40 8) - SymbolLine(0 35 5 30 8) - SymbolLine(5 30 20 30 8) - SymbolLine(20 30 25 35 8) - SymbolLine(0 45 5 50 8) -) -Symbol('t' 10) -( - SymbolLine(5 10 5 45 8) - SymbolLine(5 45 10 50 8) - SymbolLine(0 25 10 25 8) -) -Symbol('u' 12) -( - SymbolLine(0 30 0 45 8) - SymbolLine(0 45 5 50 8) - SymbolLine(5 50 15 50 8) - SymbolLine(15 50 20 45 8) - SymbolLine(20 30 20 45 8) -) -Symbol('v' 12) -( - SymbolLine(0 30 0 40 8) - SymbolLine(0 40 10 50 8) - SymbolLine(10 50 20 40 8) - SymbolLine(20 30 20 40 8) -) -Symbol('w' 12) -( - SymbolLine(0 30 0 45 8) - SymbolLine(0 45 5 50 8) - SymbolLine(5 50 10 50 8) - SymbolLine(10 50 15 45 8) - SymbolLine(15 30 15 45 8) - SymbolLine(15 45 20 50 8) - SymbolLine(20 50 25 50 8) - SymbolLine(25 50 30 45 8) - SymbolLine(30 30 30 45 8) -) -Symbol('x' 12) -( - SymbolLine(0 30 20 50 8) - SymbolLine(0 50 20 30 8) -) -Symbol('y' 12) -( - SymbolLine(0 30 0 45 8) - SymbolLine(0 45 5 50 8) - SymbolLine(20 30 20 60 8) - SymbolLine(15 65 20 60 8) - SymbolLine(5 65 15 65 8) - SymbolLine(0 60 5 65 8) - SymbolLine(5 50 15 50 8) - SymbolLine(15 50 20 45 8) -) -Symbol('z' 12) -( - SymbolLine(0 30 20 30 8) - SymbolLine(0 50 20 30 8) - SymbolLine(0 50 20 50 8) -) -Symbol('{' 12) -( - SymbolLine(5 15 10 10 8) - SymbolLine(5 15 5 25 8) - SymbolLine(0 30 5 25 8) - SymbolLine(0 30 5 35 8) - SymbolLine(5 35 5 45 8) - SymbolLine(5 45 10 50 8) -) -Symbol('|' 12) -( - SymbolLine(0 10 0 50 8) -) -Symbol('}' 12) -( - SymbolLine(0 10 5 15 8) - SymbolLine(5 15 5 25 8) - SymbolLine(5 25 10 30 8) - SymbolLine(5 35 10 30 8) - SymbolLine(5 35 5 45 8) - SymbolLine(0 50 5 45 8) -) -Symbol('~' 12) -( - SymbolLine(0 35 5 30 8) - SymbolLine(5 30 10 30 8) - SymbolLine(10 30 15 35 8) - SymbolLine(15 35 20 35 8) - SymbolLine(20 35 25 30 8) -) -Via[48000 28000 8000 4000 0 3000 "" ""] -Via[63000 86000 8000 4000 0 3000 "" ""] - -Element["" "DIP18" "U5" "16F84" 116500 28500 17000 5000 3 100 ""] -( - Pin[0 0 8000 3000 5600 2800 "1" "1" "square"] - Pin[0 10000 8000 3000 5600 2800 "2" "2" ""] - Pin[0 20000 8000 3000 5600 2800 "3" "3" ""] - Pin[0 30000 8000 3000 5600 2800 "4" "4" ""] - Pin[0 40000 8000 3000 5600 2800 "5" "5" ""] - Pin[0 50000 8000 3000 5600 2800 "6" "6" ""] - Pin[0 60000 8000 3000 5600 2800 "7" "7" ""] - Pin[0 70000 8000 3000 5600 2800 "8" "8" ""] - Pin[0 80000 8000 3000 5600 2800 "9" "9" ""] - Pin[30000 80000 8000 3000 5600 2800 "10" "10" ""] - Pin[30000 70000 8000 3000 5600 2800 "11" "11" ""] - Pin[30000 60000 8000 3000 5600 2800 "12" "12" ""] - Pin[30000 50000 8000 3000 5600 2800 "13" "13" ""] - Pin[30000 40000 8000 3000 5600 2800 "14" "14" ""] - Pin[30000 30000 8000 3000 5600 2800 "15" "15" ""] - Pin[30000 20000 8000 3000 5600 2800 "16" "16" ""] - Pin[30000 10000 8000 3000 5600 2800 "17" "17" ""] - Pin[30000 0 8000 3000 5600 2800 "18" "18" ""] - ElementLine [20000 -5000 35000 -5000 1000] - ElementLine [-5000 -5000 10000 -5000 1000] - ElementLine [35000 85000 35000 -5000 1000] - ElementLine [-5000 85000 35000 85000 1000] - ElementLine [-5000 -5000 -5000 85000 1000] - ElementArc [15000 -5000 5000 5000 0 180 1000] - - ) - -Element["" "TO220" "U6" "unknown" 179500 45000 23000 -15000 0 100 ""] -( - Pin[0 -10000 8000 3000 8600 5000 "1" "1" "square,edge2"] - Pin[0 0 8000 3000 8600 5000 "2" "2" "edge2"] - Pin[0 10000 8000 3000 8600 5000 "3" "3" "edge2"] - Pin[67000 0 17500 3000 15100 13000 "4" "4" "edge2"] - ElementLine [0 -10000 18000 -10000 3000] - ElementLine [0 0 18000 0 3000] - ElementLine [0 10000 18000 10000 3000] - ElementLine [18000 -20000 18000 20000 2000] - ElementLine [18000 20000 55500 20000 2000] - ElementLine [55500 -20000 55500 20000 2000] - ElementLine [18000 -20000 55500 -20000 2000] - ElementLine [55500 -20000 55500 20000 2000] - ElementLine [55500 20000 68000 20000 2000] - ElementLine [68000 18500 68000 20000 2000] - ElementLine [68000 18500 75000 18500 2000] - ElementLine [75000 18500 75000 20000 2000] - ElementLine [75000 20000 79000 20000 2000] - ElementLine [79000 -20000 79000 20000 2000] - ElementLine [75000 -20000 79000 -20000 2000] - ElementLine [75000 -20000 75000 -18500 2000] - ElementLine [68000 -18500 75000 -18500 2000] - ElementLine [68000 -20000 68000 -18500 2000] - ElementLine [55500 -20000 68000 -20000 2000] - - ) - -Element["" "RCY300" "C11" "unknown" 205500 94500 2500 10000 3 100 ""] -( - Pin[0 0 8000 3000 5600 5000 "1" "1" ""] - Pin[0 30000 8000 3000 5600 5000 "2" "2" "square"] - ElementArc [0 15000 30000 30000 270 360 1000] - - ) - -Element["" "ALF400" "Z5" "unknown" 129000 142500 -33800 900 0 100 ""] -( - Pin[0 0 8000 3000 4600 2000 "2" "2" "square,edge2"] - Pin[-40000 0 8000 3000 4600 2000 "1" "1" "edge2"] - ElementLine [-13300 0 0 0 1000] - ElementLine [-40000 0 -26700 0 1000] - ElementLine [-13300 0 -26700 6600 1000] - ElementLine [-26700 -6600 -26700 6600 1000] - ElementLine [-26700 -6600 -13300 0 1000] - ElementLine [-13300 -6600 -13300 6600 1000] - - ) - -Element["" "ACY400" "R21" "unknown" 82500 28000 -5300 32000 3 100 ""] -( - Pin[0 0 8000 3000 5100 3000 "1" "1" "square"] - Pin[0 40000 8000 3000 5100 3000 "2" "2" ""] - ElementLine [0 0 0 10000 1000] - ElementLine [0 30000 0 40000 1000] - ElementLine [3300 10000 3300 30000 1000] - ElementLine [-3300 30000 3300 30000 1000] - ElementLine [-3300 10000 -3300 30000 1000] - ElementLine [-3300 10000 3300 10000 1000] - - ) - -Element["" "AXIAL_LAY-200" "C13" "100n" 87000 110000 -6000 -11400 0 100 ""] -( - Pin[5000 0 8000 3000 8600 3000 "1" "1" "edge2"] - Pin[-15000 0 8000 3000 8600 3000 "2" "2" "edge2"] - ElementLine [0 -1600 0 1600 1000] - ElementLine [-10000 -1600 0 -1600 1000] - ElementLine [-10000 -1600 -10000 1600 1000] - ElementLine [-10000 1600 0 1600 1000] - ElementLine [-15000 0 -10000 0 1000] - ElementLine [0 0 5000 0 1000] - - ) -Layer(1 "component") -( -) -Layer(2 "solder") -( - Line[48000 28000 48000 30000 4000 4000 "clearline"] - Line[48000 30000 69000 51000 4000 4000 "clearline"] - Line[69000 51000 96000 51000 4000 4000 "clearline"] - Line[96000 51000 98000 53000 4000 4000 "clearline"] - Line[98000 53000 98000 60000 4000 4000 "clearline"] - Line[98000 60000 106000 68000 4000 4000 "clearline"] - Line[106000 68000 116000 68000 4000 4000 "clearline"] - Line[116000 68000 116500 68500 4000 4000 "clearline"] - Line[82500 68000 82500 99500 4000 4000 "clearline"] - Line[82500 99500 72000 110000 4000 4000 "clearline"] - Line[92000 110000 93000 110000 4000 4000 "clearline"] - Line[93000 110000 101000 102000 4000 4000 "clearline"] - Line[101000 102000 101000 81000 4000 4000 "clearline"] - Line[101000 81000 103000 79000 4000 4000 "clearline"] - Line[103000 79000 116000 79000 4000 4000 "clearline"] - Line[116000 79000 116500 78500 4000 4000 "clearline"] - Line[116500 48500 129500 48500 4000 4000 "clearline"] - Line[129500 48500 133000 52000 4000 4000 "clearline"] - Line[133000 52000 133000 64000 4000 4000 "clearline"] - Line[133000 64000 137000 68000 4000 4000 "clearline"] - Line[137000 68000 146000 68000 4000 4000 "clearline"] - Line[146000 68000 146500 68500 4000 4000 "clearline"] - Line[146500 88500 137500 88500 4000 4000 "clearline"] - Line[137500 88500 129000 97000 4000 4000 "clearline"] - Line[129000 97000 118000 97000 4000 4000 "clearline"] - Line[118000 97000 116500 98500 4000 4000 "clearline"] - Line[129000 142500 131500 142500 4000 4000 "clearline"] - Line[131500 142500 161000 113000 4000 4000 "clearline"] - Line[161000 113000 161000 63000 4000 4000 "clearline"] - Line[161000 63000 158000 60000 4000 4000 "clearline"] - Line[158000 60000 148000 60000 4000 4000 "clearline"] - Line[148000 60000 146500 58500 4000 4000 "clearline"] - Line[205500 94500 205500 44500 4000 4000 "clearline"] - Line[205500 44500 197000 36000 4000 4000 "clearline"] - Line[197000 36000 180500 36000 4000 4000 "clearline"] - Line[180500 36000 179500 35000 4000 4000 "clearline"] - Line[82500 28000 96500 14000 4000 4000 "clearline"] - Line[96500 14000 128000 14000 4000 4000 "clearline"] - Line[128000 14000 133000 19000 4000 4000 "clearline"] - Line[133000 19000 133000 35000 4000 4000 "clearline"] - Line[133000 35000 136500 38500 4000 4000 "clearline"] - Line[136500 38500 146500 38500 4000 4000 "clearline"] - Line[146500 28500 148000 27000 4000 4000 "clearline"] - Line[148000 27000 166000 27000 4000 4000 "clearline"] - Line[166000 27000 166000 42000 4000 4000 "clearline"] - Line[166000 42000 169000 45000 4000 4000 "clearline"] - Line[169000 45000 179500 45000 4000 4000 "clearline"] - Line[179500 55000 179500 98500 4000 4000 "clearline"] - Line[179500 98500 205500 124500 4000 4000 "clearline"] - Line[89000 142500 107500 124000 4000 4000 "clearline"] - Line[107500 124000 127000 124000 4000 4000 "clearline"] - Line[127000 124000 127000 110000 4000 4000 "clearline"] - Line[127000 110000 138500 98500 4000 4000 "clearline"] - Line[138500 98500 146500 98500 4000 4000 "clearline"] - Line[146500 78500 132500 78500 4000 4000 "clearline"] - Line[132500 78500 132000 78000 4000 4000 "clearline"] - Line[132000 78000 121500 88500 4000 4000 "clearline"] - Line[121500 88500 116500 88500 4000 4000 "clearline"] - Line[63000 86000 63000 72000 4000 4000 "clearline"] - Line[63000 72000 67000 68000 4000 4000 "clearline"] - Line[67000 68000 82500 68000 4000 4000 "clearline"] - Polygon("clearpoly") - ( - [257000 147000] [169000 147000] [169000 10000] [257000 10000] - ) -) -Layer(3 "GND") -( -) -Layer(4 "power") -( -) -Layer(5 "signal1") -( -) -Layer(6 "signal2") -( -) -Layer(7 "signal3") -( -) -Layer(8 "signal4") -( -) -Layer(9 "silk") -( -) -Layer(10 "silk") -( -) Index: trunk/doc/gcode_control_img.pdf =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: trunk/doc/gcode_control_img.pdf =================================================================== --- trunk/doc/gcode_control_img.pdf (revision 1036) +++ trunk/doc/gcode_control_img.pdf (nonexistent) Property changes on: trunk/doc/gcode_control_img.pdf ___________________________________________________________________ Deleted: svn:mime-type ## -1 +0,0 ## -application/octet-stream \ No newline at end of property Index: trunk/doc/ascii2texi.awk =================================================================== --- trunk/doc/ascii2texi.awk (revision 1036) +++ trunk/doc/ascii2texi.awk (nonexistent) @@ -1,77 +0,0 @@ -#!/usr/bin/awk -f -# -# $Id$ -# - -BEGIN { - first = 1; - col = 1; -} - -/^[ \t]*#/ { - # skip comment lines - next; -} - -/^[ \t]*$/ { - # skip blank - next; -} - -# we do this 'first' song and dance because variables set -# on the command line are not available in the BEGIN section -first == 1 { - first = 0; - printf("@c Generated file. Do not edit directly\n"); - printf("@c $" "Id" "$\n"); - printf("@multitable @columnfractions "); - for(i = 1 ; i <= 2*ncol ; i = i + 1) { - printf("%.3g ", 0.5 / ncol); - } - printf("\n"); - - printf("@item "); - for(i = 1 ; i <= ncol ; i = i + 1) { - if( i > 1 ) { printf("@tab "); } - printf("Drill @tab Diameter "); - } - printf("\n"); - - printf("@item "); - for(i = 1 ; i <= ncol ; i = i + 1) { - if( i > 1 ) { printf("@tab "); } - printf("Size @tab (inches) "); - } - printf("\n"); - - printf("\n"); -} - -{ - if( col == 1 ) { - printf("@item "); - } else { - printf("@tab "); - } - drl = $1; - dia = $2; - gsub(/_/, " ", drl); - printf("%s @tab %s ", drl, dia); - col = col + 1; - if( col > ncol ) { - col = 1; - printf("\n"); - } -} - -END { - while( (col > 1) && (col <= ncol ) ) { - printf("@tab @tab "); - col = col + 1; - } - - printf("@end multitable\n\n"); -} - - - Property changes on: trunk/doc/ascii2texi.awk ___________________________________________________________________ Deleted: svn:executable ## -1 +0,0 ## -* \ No newline at end of property Index: trunk/doc/metric_size.texi =================================================================== --- trunk/doc/metric_size.texi (revision 1036) +++ trunk/doc/metric_size.texi (nonexistent) @@ -1,70 +0,0 @@ -@c Generated file. Do not edit directly -@c $Id$ -@multitable @columnfractions 0.167 0.167 0.167 0.167 0.167 0.167 -@item Drill @tab Diameter @tab Drill @tab Diameter @tab Drill @tab Diameter -@item Size @tab (inches) @tab Size @tab (inches) @tab Size @tab (inches) - -@item 0.20 mm @tab .00787 @tab 0.25 mm @tab .00984 @tab 0.30 mm @tab .0118 -@item 0.35 mm @tab .0138 @tab 0.40 mm @tab .0158 @tab 0.45 mm @tab .0177 -@item 0.50 mm @tab .0197 @tab 0.55 mm @tab .0217 @tab 0.60 mm @tab .0236 -@item 0.65 mm @tab .0256 @tab 0.70 mm @tab .0276 @tab 0.75 mm @tab .0295 -@item 0.80 mm @tab .0315 @tab 0.85 mm @tab .0335 @tab 0.90 mm @tab .0354 -@item 0.95 mm @tab .0374 @tab 1.00 mm @tab .0394 @tab 1.05 mm @tab .0413 -@item 1.10 mm @tab .0433 @tab 1.15 mm @tab .0453 @tab 1.20 mm @tab .0472 -@item 1.25 mm @tab .0492 @tab 1.30 mm @tab .0512 @tab 1.35 mm @tab .0531 -@item 1.40 mm @tab .0551 @tab 1.45 mm @tab .0571 @tab 1.50 mm @tab .0591 -@item 1.55 mm @tab .0610 @tab 1.60 mm @tab .0630 @tab 1.65 mm @tab .0650 -@item 1.70 mm @tab .0669 @tab 1.75 mm @tab .0689 @tab 1.80 mm @tab .0709 -@item 1.85 mm @tab .0728 @tab 1.90 mm @tab .0748 @tab 1.95 mm @tab .0768 -@item 2.00 mm @tab .0787 @tab 2.05 mm @tab .0807 @tab 2.10 mm @tab .0827 -@item 2.15 mm @tab .0846 @tab 2.20 mm @tab .0866 @tab 2.25 mm @tab .0886 -@item 2.30 mm @tab .0906 @tab 2.35 mm @tab .0925 @tab 2.40 mm @tab .0945 -@item 2.45 mm @tab .0965 @tab 2.50 mm @tab .0984 @tab 2.55 mm @tab .1004 -@item 2.60 mm @tab .1024 @tab 2.65 mm @tab .1043 @tab 2.70 mm @tab .1063 -@item 2.75 mm @tab .1083 @tab 2.80 mm @tab .1102 @tab 2.85 mm @tab .1122 -@item 2.90 mm @tab .1142 @tab 2.95 mm @tab .1161 @tab 3.00 mm @tab .1181 -@item 3.10 mm @tab .1220 @tab 3.15 mm @tab .1240 @tab 3.20 mm @tab .1260 -@item 3.25 mm @tab .1280 @tab 3.30 mm @tab .1299 @tab 3.40 mm @tab .1339 -@item 3.50 mm @tab .1378 @tab 3.60 mm @tab .1417 @tab 3.70 mm @tab .1457 -@item 3.75 mm @tab .1476 @tab 3.80 mm @tab .1496 @tab 3.90 mm @tab .1535 -@item 4.00 mm @tab .1575 @tab 4.10 mm @tab .1614 @tab 4.20 mm @tab .1654 -@item 4.25 mm @tab .1673 @tab 4.30 mm @tab .1693 @tab 4.40 mm @tab .1732 -@item 4.50 mm @tab .1772 @tab 4.60 mm @tab .1811 @tab 4.70 mm @tab .1850 -@item 4.75 mm @tab .1870 @tab 4.80 mm @tab .1890 @tab 4.90 mm @tab .1929 -@item 5.00 mm @tab .1969 @tab 5.10 mm @tab .2008 @tab 5.20 mm @tab .2047 -@item 5.25 mm @tab .2067 @tab 5.30 mm @tab .2087 @tab 5.40 mm @tab .2126 -@item 5.50 mm @tab .2165 @tab 5.60 mm @tab .2205 @tab 5.70 mm @tab .2244 -@item 5.75 mm @tab .2264 @tab 5.80 mm @tab .2283 @tab 5.90 mm @tab .2323 -@item 6.00 mm @tab .2362 @tab 6.10 mm @tab .2402 @tab 6.20 mm @tab .2441 -@item 6.25 mm @tab .2461 @tab 6.30 mm @tab .2480 @tab 6.40 mm @tab .2520 -@item 6.50 mm @tab .2559 @tab 6.60 mm @tab .2598 @tab 6.70 mm @tab .2638 -@item 6.75 mm @tab .2657 @tab 6.80 mm @tab .2677 @tab 6.90 mm @tab .2717 -@item 7.00 mm @tab .2756 @tab 7.10 mm @tab .2795 @tab 7.20 mm @tab .2835 -@item 7.25 mm @tab .2854 @tab 7.30 mm @tab .2874 @tab 7.40 mm @tab .2914 -@item 7.50 mm @tab .2953 @tab 7.60 mm @tab .2992 @tab 7.70 mm @tab .3031 -@item 8.00 mm @tab .3150 @tab 8.10 mm @tab .3189 @tab 8.20 mm @tab .3228 -@item 8.25 mm @tab .3248 @tab 8.30 mm @tab .3268 @tab 8.40 mm @tab .3307 -@item 8.50 mm @tab .3346 @tab 8.60 mm @tab .3386 @tab 8.70 mm @tab .3425 -@item 8.75 mm @tab .3445 @tab 8.80 mm @tab .3465 @tab 8.90 mm @tab .3504 -@item 9.00 mm @tab .3543 @tab 9.10 mm @tab .3583 @tab 9.20 mm @tab .3622 -@item 9.25 mm @tab .3642 @tab 9.30 mm @tab .3661 @tab 9.40 mm @tab .3701 -@item 9.50 mm @tab .3740 @tab 9.60 mm @tab .3780 @tab 9.70 mm @tab .3819 -@item 9.75 mm @tab .3839 @tab 9.80 mm @tab .3858 @tab 9.90 mm @tab .3898 -@item 10.00 mm @tab .3937 @tab 10.10 mm @tab .3976 @tab 10.20 mm @tab .4016 -@item 10.25 mm @tab .4035 @tab 10.30 mm @tab .4055 @tab 10.40 mm @tab .4094 -@item 10.50 mm @tab .4134 @tab 10.60 mm @tab .4173 @tab 10.70 mm @tab .4213 -@item 10.80 mm @tab .4252 @tab 10.90 mm @tab .4291 @tab 11.00 mm @tab .4331 -@item 11.10 mm @tab .4370 @tab 11.20 mm @tab .4409 @tab 11.25 mm @tab .4429 -@item 11.30 mm @tab .4449 @tab 11.40 mm @tab .4488 @tab 11.50 mm @tab .4528 -@item 11.60 mm @tab .4567 @tab 11.70 mm @tab .4606 @tab 11.75 mm @tab .4626 -@item 11.80 mm @tab .4646 @tab 11.90 mm @tab .4685 @tab 12.00 mm @tab .4724 -@item 12.50 mm @tab .4921 @tab 13.00 mm @tab .5118 @tab 13.50 mm @tab .5315 -@item 14.00 mm @tab .5512 @tab 14.50 mm @tab .5709 @tab 15.00 mm @tab .5906 -@item 15.50 mm @tab .6102 @tab 16.00 mm @tab .6299 @tab 16.50 mm @tab .6496 -@item 17.00 mm @tab .6693 @tab 17.50 mm @tab .6890 @tab 18.00 mm @tab .7087 -@item 18.50 mm @tab .7283 @tab 19.00 mm @tab .7480 @tab 19.50 mm @tab .7677 -@item 20.00 mm @tab .7874 @tab 20.50 mm @tab .8071 @tab 21.00 mm @tab .8268 -@item 21.50 mm @tab .8465 @tab 22.00 mm @tab .8661 @tab 22.50 mm @tab .8858 -@item 23.00 mm @tab .9055 @tab 23.50 mm @tab .9252 @tab 24.00 mm @tab .9449 -@item 24.50 mm @tab .9646 @tab 25.00 mm @tab .9843 @tab @tab @end multitable - Index: trunk/doc/puller.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: trunk/doc/puller.png =================================================================== --- trunk/doc/puller.png (revision 1036) +++ trunk/doc/puller.png (nonexistent) Property changes on: trunk/doc/puller.png ___________________________________________________________________ Deleted: svn:mime-type ## -1 +0,0 ## -application/octet-stream \ No newline at end of property Index: trunk/doc/pcb.css =================================================================== --- trunk/doc/pcb.css (revision 1036) +++ trunk/doc/pcb.css (nonexistent) @@ -1,11 +0,0 @@ -table.cartouche { - border-collapse: collapse; - border: 1px solid #800000; - width: 100%; -} -table.cartouche td { - padding: 4px; -} -pre.format { - font-family: monospace; -} Index: trunk/doc/pcb.info-1 =================================================================== --- trunk/doc/pcb.info-1 (revision 1036) +++ trunk/doc/pcb.info-1 (nonexistent) @@ -1,7585 +0,0 @@ -This is pcb.info, produced by makeinfo version 4.13 from pcb.texi. - -INFO-DIR-SECTION Miscellaneous -START-INFO-DIR-ENTRY -* pcb: (pcb). An interactive printed circuit board editor. -END-INFO-DIR-ENTRY - - This file documents how to use Pcb, the open source, interactive -printed circuit board layout system. - - Copyright (C) 1994,1995,1996, 2004 Thomas Nau - - Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 harry eaton - - Copyright (C) 2003, 2004, 2005, 2006, 2007, 2009 Dan McMahill - - Copyright (C) 2004 DJ Delorie - - This program is free software; you may redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at -your option) any later version. - - This program is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANT-ABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -General Public License for more details. - - -File: pcb.info, Node: Top, Next: Copying, Up: (dir) - -Pcb -*** - -This document is a manual for `Pcb', the open source, interactive -printed circuit board layout system. - -* Menu: - -* Copying:: `Pcb' is freely redistributable! -* History:: How it all began. -* Overview:: An overview of `Pcb'. -* Intro:: A short description of the basic objects. -* Getting Started:: Introduction to `Pcb'. -* Autorouter:: Using the autorouter. -* User Commands:: User commands of `Pcb'. -* Command-Line Options:: Calling `Pcb' from a shell. -* X11 Interface:: Action routines, resources and default translation. -* File Formats:: Description of `ASCII' files used by `Pcb'. -* Library Creation:: Detailed description of symbol library creation. -* Schematic Frontends:: Schematic capture programs that work with PCB. -* Installation:: Compiling, installing and troubleshooting. -* Custom Menus:: Customizing the menu bar. -* Regular Expressions:: Searching for elements with regular expressions -* Standard Drill Sizes:: Tables of standard drill sizes -* Centroid File Format:: Details of the centroid (x-y) output file -* Action Reference:: Documentation for all available actions -* Glossary:: Glossary -* Index:: The Index. - - -File: pcb.info, Node: Copying, Next: History, Prev: Top, Up: Top - -Copying -******* - -Copyright (C) 1994,1995,1996,1997 Thomas Nau - - Copyright (C) 1998,1999,2000,2001,2002 harry eaton - - This program is free software; you may redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at -your option) any later version. - - This program is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANT-ABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -General Public License for more details. - - -File: pcb.info, Node: History, Next: Overview, Prev: Copying, Up: Top - -History -******* - -`Pcb' is a handy tool for laying out printed circuit boards. - - `Pcb' was first written by Thomas Nau for an Atari ST in 1990 and -ported to `UNIX' and `X11' in 1994. It was not intended as a -professional layout system, but as a tool which supports people who do -some home-developing of hardware. - - The second release 1.2 included menus for the first time. This made -`Pcb' easier to use and thus a more important tool. - - Release 1.3 introduced undo for highly-destructive commands, more -straightforward action handling and scalable fonts. Layer-groups were -introduced to group signal-layers together. - - Release 1.4 provided support for add-on device drivers. Two layers -(the solder and the component side) were added to support SMD elements. -The handling of libraries was also improved in 1.4.1. Support for -additional devices like GERBER plotters started in 1.4.4. The undo -feature was expanded and the redo-feature added in 1.4.5. - - harry eaton took over pcb development beginning with Release 1.5, -although he contributed some code beginning with Release 1.4.3 - - Release 1.5 provides support for rats-nest generation from simple net -lists. It also allows for automatic clearances around pins that pierce -a polygon. A variety of other enhancements including a Gerber RS-274X -driver and NC drill file generation have also been added. - - Release 1.6 provides automatic screen updates of changed regions. -This should eliminate most of the need for the redraw ((_R_ key). Also -some changes to what order items under the cursor are selected were -made for better consistency - it is no longer possible to accidentally -move a line or line point that is completely obscured by a polygon -laying over top of it. Larger objects on the upper most layers can be -selected ahead of smaller objects on lower layers. These changes make -operations more intuitive. A new mode of line creation was added that -creates two line on 45 degree angles with a single click. The actual -outline of the prospective line(s) are now shown during line creation. -An arc creation mode was added. Drawn arcs are quarter circles and can -be useful for high frequency controlled impedance lines. (You can have -eighth circle arc if the source is compiled with -DARC45, but be aware -that the ends of such arcs can never intersect a grid point). Two new -flags for pins and vias were created - one indicates that the pin or -via is purely a drill hole and has no copper annulus. You can only -toggle this flag for vias - for elements, it must be an integral part -of the element definition. The other flag controls whether the pad -will be round or octagonal. There is also now a feature for converting -the contents of a buffer into an element. - - Release 1.6.1 added the ability to make groups of action commands -bound to a single X11 event to be undone by a single undo. Also a -simple design rule checker was added - it checks for minimum spacing -and overlap rules. Plus many fixes for bugs introduced with the many -changes of 1.6 - - Release 1.7 added support for routing tracks through polygons -without touching them. It also added support for unplated drill files, -and drawing directly on the silk layer. A Netlist window for easily -working with netlist was also added. - - Release 2.0 adds an auto-router, a new simpler library mechanism, -much improved support for graphically creating (and editing) elements, -viewable solder-mask layers (and editing), snap to pins and pads, -netlist entry by drawing rats, element files (and libraries) that can -contain whole sub-layouts, metric grids, improved user interface, a GNU -autoconf/automake based build system, and a host of other improvements. - - Special thanks goes to: - Thomas Nau (who started the project and wrote the early versions). - C. Scott Ananian (who wrote the auto-router code). - Bernhard Daeubler (Bernhard.Daeubler@physik.uni-ulm.de) - Harald Daeubler (Harald.Daeubler@physik.uni-ulm.de) - DJ Delorie (djdelorie@users.sourceforge.net) - Larry Doolittle (ldoolitt@recycle.lbl.gov) - Dan McMahill (danmc@users.sourceforge.net) - Roland Merk (merk@faw.uni-ulm.de) - Erland Unruh (Erland.Unruh@malmo.trab.se) - Albert John FitzPatrick III (ajf_nylorac@acm.org) - Boerge Strand (borges@ifi.uio.no) - Andre M. Hedrick (hedrick@Astro.Dyer.Vanderbilt.Edu) - -who provided all sorts of help including porting `Pcb' to several -operating systems and platforms, bug fixes, library enhancement, user -interface suggestions and more. In addition to these people, many -others donated time for bug-fixing and other important work. Some of -them can be identified in the source code files. Thanks to all of -them. If you feel left out of this list, I apologize; please send me an -e-mail and I'll try to correct the omission. - - -File: pcb.info, Node: Overview, Next: Intro, Prev: History, Up: Top - -1 Overview -********** - -`Pcb' is an open source printed circuit board editor. `Pcb' includes -many professional features such as: - * Up to 16 copper layer designs by default. By changing a compile - time setting, this can be set as high as needed. - - * RS-274X (Gerber) output - - * NC Drill output - - * Centroid (X-Y) data output - - * Postscript and Encapsulated Postscript output - - * Autorouter - - * Trace optimizer - - * Rats nest - - * Design Rule Checker (DRC) - - * Connectivity verification - - * `Pcb' is Free Software - - * Can interoperate with free schematic capture tools such as gEDA and - xcircuit - - * Runs under Linux, NetBSD, Solaris, and other similar operating - systems. - - * Windows version is available - - -File: pcb.info, Node: Intro, Next: Getting Started, Prev: Overview, Up: Top - -2 Introduction -************** - -Each layout consists of several, mostly independent, objects. This -chapter gives an overview of the object types and their relationship to -each other. For a complete description of how to use `Pcb', refer to -*note Getting Started::. The layout is generated on-screen on a grid -that can have its origin at any desired location. The X coordinate -increases to the right, Y increases down to the bottom. All distances -and sizes in `Pcb' are measured in mils (0.001 inch). One unit on the -coordinate display is one mil in distance on the board. The grid may -be set on a metric pitch, but is only correct to within the nearest +/- -0.01 mil because `Pcb' stores all dimensions as integer multiples of -1/100 of a mil or 0.00001 inch. - - The sections in this chapter are sorted by the order of appearance -of the objects within a layout file. - -* Menu: - -* Symbol Objects:: Information about fonts and symbols. -* Via Objects:: Vias and pins connect layers. -* Element Objects:: Element, the basic type of circuits. -* Layer Objects:: A `container' for lines, text... -* Line Objects:: Tracks on the board -* Arc Objects:: Curved tracks -* Polygon Objects:: Planes and such -* Text Objects:: Objects to add symbols to your board. -* Net Objects:: Describes the desired connections on the board. - - -File: pcb.info, Node: Symbol Objects, Next: Via Objects, Up: Intro - -2.1 Symbols -=========== - -The top object is the layout itself. It uses a set of symbols that -resides at the first logical level. Each symbol is uniquely identified -by a seven bit `ASCII' code. All layout objects share the same set of -symbols. These symbols are used to form text objects on the silkscreen -and copper layers. Undefined symbols are drawn as filled rectangles. - - Every font file is preprocessed by a user-defined command when it is -loaded. For details see `fontCommand', *note Resources::. - - -File: pcb.info, Node: Via Objects, Next: Element Objects, Prev: Symbol Objects, Up: Intro - -2.2 Vias -======== - -Vias provide through-hole connectivity across all layers. While vias -look a lot like element pins, don't use vias for adding elements to the -layout, even if that seems easier than creating a new element. The -default solder-mask will cover over vias, so you won't be able to -solder to them. Of course, you can change this so that vias also have -solder-mask cut-outs, but it is not the default. Vias are also useful -for defining arbitrary drill points such as those used for mounting a -board. Vias used in this way have a special flag set so that they have -no annular copper ring, and also appear in the unplated drill file. -_Ctrl-H_ key over a via switches it between being a pure-mounting hole -and a regular via. You can assign a name to a via, which is useful -during the creation of new element definitions. Each via exists on all -copper layers. (_i.e._ blind and buried vias are not supported) - - -File: pcb.info, Node: Element Objects, Next: Layer Objects, Prev: Via Objects, Up: Intro - -2.3 Elements -============ - -Elements represent the components on a board. Elements are loaded from -`ASCII' coded files in a similar manner to the layout file itself, or -from the library selector window. An element is composed of lines and -arcs on the silk-screen layer (used to define the package outline), pins -(or pads for SMD) and three labels that define the description, the -element's layout-name (which also appears on the silk-screen layer) and -its value. You can choose which of the names are displayed on the screen -with the Screen menu; however, the silk screen in the printout will -always show the layout-name. Element pins are contained on the first -logical level and so reside on all layers, but the pads of surface-mount -elements reside on only the component or solder layers. An element can -have a mixture of pins, pads (on one or both sides), and mounting holes. - - A mark is used to position the element with respect to the cross -hair during pasting. The mark will lie on a grid point when the element -is positioned. The mark is drawn as a small diamond shape, but is only -visible when _both_ the `silk' and `pins/pads' layers are visible. All -parts of an element are treated as one unit, except for the name. It -is not possible to delete a single pin or move only part of an element -on the layout. You can resize separate pieces of an element, but doing -so is usually a bad idea. You can move/rotate the element name -independently of the element it belongs to. When you move an element -name, a line is draw from the cursor to the element mark so it is easy -to tell which element the name belongs to. - - Each pin and pad has two string identifiers, one is the "name" which -is a functional description of the pin (_e.g._ "clock in") and the -other is the "number" of the pin which is used to identify it in a -netlist. The "number" is usually an integer, but it can be any string. -You can edit the "name" of each pin of an element, but the "number" is -embedded in the element definition and is determined when the new -element is first created. Pads are similar to lines on a layer but -they must be oriented either vertically or horizontally. Pads can have -either rounded or square ends. Pins can be round, square, or octagonal. - - Elements are supported by several special layers: `silk', -`pins/pads' and `far-side'. The `silk' layer shows the package outline -and also holds legend text and element names. The `pins/pads' layer is -used to toggle whether the element's pins and pads are displayed. The -`far-side' layer controls visibility of objects (silkscreen and pads) -that are on the far (_i.e._ not currently viewed) side of the board. - - The "oldlib" style of footprint libraries distributed with `Pcb' -rely upon the M4 macro processor. M4 is typically installed under the -name `m4' on most unix-like operating systems. It is recommended that -you use the GNU version of M4 to avoid limitations found in some vendor -implementations. See the m4 man page on your system for more -information. Every element file is preprocessed by a user-defined -command when the file is read. For details see `elementCommand', *note -Resources::. `m4', the default value of `elementCommand', allows you to -create libraries for package definitions that are shared by all -elements. The old element libraries distributed with `Pcb' expect `m4' -or an equivalent to be the _elementCommand_. The new library scheme -simply has each element stored in a self-contained file, so there is no -need to learn `m4' to add to the libraries. - - `Pcb' can create a list of all connections from one (or all) -elements to the others or a list of unconnected pins. It can also -verify the layout connections against a netlist file. The element's -`layout-name' is the name used to identify the element in a netlist -file (see *note Netlist File::). - - The old libraries, or very old (pre-1.6) layout files may have -incorrect pin numbering since there was no concept of pin numbers when -they were created. `Pcb' uses the order of appearance of the pin -definitions in the layout or library file if it uses the old format, -but there is no guarantee that it will be correct for these old objects. - - Be aware that a few of the old library parts may still be incorrectly -implemented regarding pin-numbering. All of the DIL (Dual- -Inline-Pins) parts are correct and most of the others are too, but you -should verify the pin numbering of any non-DIL part before using an old -library part. (use the `generate object report' in the Info menu to -see what `Pcb' thinks a pin's number is) All of the old library names -begin with a ~, so you can easily identify them. The old libraries -also _may_ contain other sorts of errors, including incorrect pin -spacing, silkscreen overlapping solder areas, etc. Check carefully any -element in the old library before using it! As the new library grows, -the old library will be pared down to at least remove all of the -elements with errors, but this will take time. - - You can make your own element definitions graphically now. Simply -draw vias for the pins, lines on the solder and/or component layers for -surface-mount pads (they must be either horizontal or vertical), and -lines and arcs on the silkscreen layer for the silkscreen outline. You -should _name_ (_N_ key) each via and copper line with the pin _number_. -Once you are happy with the geometry, select everything that is to -become part of the element, then choose `convert selection to element' -from the Select menu. Afterwords you can make pin (or pad) one square -if you like, and give the element its various names. You can also give -the pins and pads their functional names. Note that the element mark -corresponds to the position you click after choosing the conversion -from the menu, so decide where the mark goes and make sure it falls on -a grid point before you request the conversion. If the vias/lines are -not named, then the pin numbering will correspond to the order in which -they were placed. - - When you create a new element, remember that silkscreen lines should -_never_ overlap the copper part of the pins or pads, as this can -interfere with soldering. The silkscreen should identify the maximum -extent of the element package so it is easy to see how close elements -can be placed together. - - If you want to make an element similar to an existing one, you can -break an element into constituent pieces from the Buffer menu. Paste -the pieces to the layout, make the necessary changes, then convert it -back into an element. If the pin numbers haven't changed, there is no -need to name each via/line as they are pre-named when the element was -broken apart. When you create a new element, you can save it to a file -in order to have easy access to it the next time you run `Pcb'. - - -File: pcb.info, Node: Layer Objects, Next: Line Objects, Prev: Element Objects, Up: Intro - -2.4 Layers -========== - -Every layout consists of several layers that can be used independently -or treated as a group. Layer groups can be used to logically separate -(and color-code) different traces (_e.g._ power and signal); however, -all layers within a group reside on the same physical copper layer of a -board, so using different layers within the same group won't provide -electrical separation where they touch or overlap. For details, see -`layerGroups', *note Resources::. Each layer is drawn in a color -defined in the resource file and identified by a name that you can -change (for details see `layerColor', *note Resources::.) Layers are -really just containers for line, arc, polygon, and text objects. The -component and solder layers contain SMD elements as well, but the file -structure doesn't reflect that fact directly. - - Each layer group represents a physical layer on the printed circuit -board. If you want to make a four layer board, you'll need to have at -least four layer groups. Connections between layer groups are -established only through element pins and vias. The relationship -between a specific layer and the board itself is configurable from the -`Edit layer groups' option in the Settings menu. The layer groups -corresponding to the physical layers: _component-side_ and -_solder-side_ are always defined and you must map at least one logical -layer to each, even if you plan to make a single-sided board. You are -not obligated to put tracks on either of them. Surface mount elements -always reside on either the component-side or the solder-side layer -group. When you paste an element from the buffer, it will go onto -whichever side of the board you are viewing. You can swap which side -of the board you are viewing by pressing the _Tab_ key, or by selecting -`view solder side' from the Screen menu. The layer groups just have a -name or number associated with them - where they are sandwiched in the -board is left for you to tell the manufacturer. - - The silkscreen layer is special because there are actually two -silkscreen layers, one for the top (component) and one for the bottom -(solder) side of the board. Which silk layer you draw on is determined -by the side of the board that you are viewing. If you are viewing the -component side, then drawing on the silk layer draws to the -component-side silk layer. - - The netlist layer is another special layer. It shows rat's-nest lines -(_i.e._ guides that show how the netlist expects the element to -interconnect). If you make this the active layer, you can use the Line -tool to add entries into the netlist, or to delete connections from the -netlist window. Except for these two purposes, you should not make the -netlist layer the active layer. Usually there is no need to do this -because a separate schematic package should be used to create the -netlist. `Pcb' can automatically draw all of the rats from the netlist. -In some cases you may want to make a small change without going to the -trouble of modifying the schematic, which is why this facility is -provided. - - -File: pcb.info, Node: Line Objects, Next: Arc Objects, Prev: Layer Objects, Up: Intro - -2.5 Lines -========= - -Lines are used to draw tracks on the pc board. When in the line mode, -each _Btn1_ press establishes one end of a line. Once the second point -is defined, the line is drawn and a new line started where the first -one ended. You can abandon the new starting point in favor of another -by pressing _Ctrl-Btn1_, or _Btn3_, but don't use _Btn2_. The undo -function (_U_ key or `undo last operation' from the Edit menu) will -take you back point by point if you use it while in the line mode. - - New lines can be restricted to 45 degree angles if desired. You can -toggle this restriction on and off while creating lines by pressing the -_period_ key. If the 45 degree restriction is turned on, then the _/_ -(forward slash) key can be used to cycle through three different modes -of 45 degree line creation. One mode just creates a single line forced -to the nearest 45 degree vector. The next mode creates two lines from -the start to end points such that the first line leaves the start point -at a 90 degree vector, and the second line enters the end point on a 45 -degree vector. The last mode creates two lines such that the first line -leaves the start point on a 45 degree vector and arrives at the end -point on a 90 degree vector. You can temporarily swap between the last -two modes by holding the _Shift_ key down. - - It is simple to edit a line object by breaking it into pieces -(insert point mode), moving an end point or the whole line (_Arrow -tool_), or changing the layer it resides on (_M_ key moves the line -under the pointer to the active layer). In the case when two line -segments meet at exactly the same point you can delete the intermediate -point, otherwise the delete tool removes an entire line. Feel free to -experiment since `Pcb' will allow you to undo and redo anything that -materially affects your work. If you switch active layers in the midst -of placing lines a via will automatically be placed, when necessary, in -order to continue the connection. - - If you draw a line inside a polygon, it will either plow through the -polygon creating a clearance, or touch the polygon. This behavior is -selectable in the Settings menu for new lines. To change the behavior -of an existing line, hit the _J_ key with the cross hair over the line. -You can increase the size of the clearance by 2 mils on each edge with -the with the _K_ key. _Shift-K_ will decrease the clearance by 2 mils. -The increment may be changed from 2 mils through the application -resource file. The clearance can be also increased, decreased and set -by the _ChangeClearSize_ action. - - Lines do not need to intersect the center of a pin, pad, via, or -other line for `Pcb' to understand that they make electrical connection. -If the connection is too tenuous, running the design rule checker will -report that the connection may break if the line width shrinks slightly. - - -File: pcb.info, Node: Arc Objects, Next: Polygon Objects, Prev: Line Objects, Up: Intro - -2.6 Arcs -======== - -`Pcb' can handle arcs of any angular extent, but when you create an arc -with the Arc tool, it will be a quarter circle (this means they always -bend a right angle). Arcs are very similar to lines otherwise. They -are created on the active layer and have the same thickness that new -lines will have. The various clicks for creating lines work pretty -much the same way for creating arcs. In order to make the arc curve in -the desired direction, drag the mouse along the tangent line from the -starting position towards the end position. If the grid is too coarse, -it may not be possible to distinguish whether you've moved over then up, -or up then over, so if you can't seem to make the arc go in the -direction you want, try pressing the _Shift_ key while drawing the arc. -Decreasing the grid spacing may also help. Alternatively you can draw -the wrong arc, then rotate and move it where you want. Like the Line -tool, after an arc is drawn a new starting point is established at the -end point. - - Whenever a starting point is established by either the Line or Arc -tools it will be retained if you switch directly between the tools -(e.g. _F2_ key for Lines, _F8_ key for Arcs. Arcs can either touch or -clear polygons just like lines do. Of course connection searches, undo -and all the other features you'd expect work with arcs too. - - -File: pcb.info, Node: Polygon Objects, Next: Text Objects, Prev: Arc Objects, Up: Intro - -2.7 Polygons -============ - -Sometimes it's useful to fill large areas with solid copper. The way -to do this is with polygons. Polygons can be created in either the -polygon mode or the rectangle mode. In the polygon mode, you'll have -to define each corner of the polygon with a mouse click (_Btn1_). When -the last point is clicked exactly on top of the starting point, the -polygon is finished. Since this can be hard to do, the _Shift-P_ key -will enter the final point for you, closing the polygon. If the 45 -degree angle restriction is turned on and you try to close the polygon -when it is not possible, you'll get a warning instead. If you haven't -finished entering a polygon, but want to undo one (or more) of the -points that you've already defined, use the undo command (_U_ key). - - With the rectangle tool, defining the two diagonally opposite -corners is sufficient, but of course the resulting polygon is a -rectangle. Like lines, a polygon can by edited by deleting, inserting -and moving the points that define it. Pins and vias _always_ clear -through polygons without touching them when first positioned. You must -add a thermal with the thermal tool in order to connect pins and vias -to polygons. Thermals can be added and removed by clicking _Btn1_ with -the thermal tool over the pin or via. The thermal tool always places a -thermal to polygons on the active layer, so if the tool doesn't seem to -work, it's probably because the polygon you want to touch is not on the -active layer. You can change the style of thermal used or make a solid -connection by holding down _Shift_ while clicking _Btn1_ with the -thermal tool over the pin or via. - - `Pcb' is capable of handling complex polygons, but using a number of -simpler ones improves performance of the connection tracing code. You -also must be careful not to create polygons that touch or overlap -themselves. The fabricated board may not look the way you expect if -you violate this principle. It is always ok to have two (or more) -polygons touch or overlap each other, but not for points within the -same polygon to do so. - - The great advantage to this new polygon behavior is that simple or -complex ground and/or power planes can be easily made with polygons and -seen on the screen. If you don't want this auto-clearance behavior, or -you load a layout created by an early version of `Pcb', the old behavior -(shorts to all piercing pins and vias) is available. A `ChangeSize' -operation (_S_ key) toggles a polygon between the new and old -polygon/pin behavior. - - -File: pcb.info, Node: Text Objects, Next: Net Objects, Prev: Polygon Objects, Up: Intro - -2.8 Text -======== - -Text objects should be used to label a layout or to put additional -information on the board. Elements have their `layout-name' labels on -the silk-screen layer. If you are making a board without a silkscreen, -you can use copper text to label the elements, but you have to do this -manually. - - Text is always horizontal when first created, but the rotate mode -can align it along 0, 90, 180 and 270 degree angles. Text on the far -side of the board will automatically appear mirror-imaged. - - _Warning:_ TEXT OBJECTS ON A COPPER LAYER CREATE COPPER LINES BUT -THEY ARE NOT SCANNED FOR CONNECTIONS OR TESTED FOR CREATING SHORTS VS. -THE NETLIST. NEITHER ARE TEXT OBJECTS TESTED AGAINST ANY DESIGN RULES. - - -File: pcb.info, Node: Net Objects, Prev: Text Objects, Up: Intro - -2.9 Nets -======== - -Layout files also contain the netlist that describes how the elements -are supposed to be interconnected. This list of connections can be -loaded from a netlist file (see *note Netlist File::), or entered by -drawing rat-lines as described previously. Each net has a name and -routing style associated with it. The net contains a list of all -element _layout-name_ names and pin _numbers_ that should be connected -to the net. Loading a netlist file will replace all existing nets with -the ones from the file. The _Netlist_ window provides an easy way to -browse through the net list. You can display the rat's-nest by selecting -`optimize rats-nest' from the Connects menu. If you move or rotate -elements, the rat's-nest will automatically follow the movements, but -they won't necessarily show the shortest paths until you optimize them -again. - - -File: pcb.info, Node: Getting Started, Next: Autorouter, Prev: Intro, Up: Top - -3 Getting Started -***************** - -The goal of this chapter is to give you enough information to learn how -`Pcb' works and how to develop your layouts to make the best use of -`Pcb''s features. All event translations (_i.e._ the buttons and keys -you press) refer to the default application resource file shipped with -`Pcb'. There is probably no need to change this unless your window -manager uses some of the button events itself; however, if you _want_ -to customize the behavior of `Pcb' then changing the resource file is -usually the best way to do it. - - Get yourself a printout of this chapter and _User Commands_, if you -haven't already done so, and follow the examples. - - Start `Pcb' (the actual command will use all lower-case letters) -without any additional options. If you get the error message: - - can't find default font-symbol-file 'default_font' - then the font searchpath or filename in the application resource -file is wrong. Be sure that your `m4' program supports search paths. -If not, get `GNU m4'. For other messages, see *note problems::. -Another quick-start is provided by `pcbtest.sh' in the `src' directory. -If some features don't seem to work, try running `pcbtest.sh', if that -works, then `Pcb' hasn't been installed properly. - -* Menu: - -* Application Window:: The elements of the main window. -* Log Window:: The optional logging window -* Library Window:: The circuit selection window -* Netlist Window:: The desired connections window -* Drawing and Removing:: -* Moving and Copying:: -* Loading and Saving:: -* Printing:: Creating Gerber files or postscript files -* Exporting:: Exporting a layout. -* Arrow Tool:: Selecting/Moving objects. -* Rats Nest:: Helps you place and route tracks against a netlist. -* Design Rule Checking:: Check for manufactureability -* Trace Optimizer:: Optimization of layouts -* Searching for elements:: Searching for elements -* Measuring distances:: Measuring distances -* Vendor drill mapping:: Mapping drills to a vendor specified list -* Connection Lists:: How to get a list of all or some connections. - - -File: pcb.info, Node: Application Window, Next: Log Window, Up: Getting Started - -3.1 The Application Window -========================== - -The main window consists of five areas: the menu at the top, the layer -control in the upper left, the tool buttons located below the layer -controls, the Layout area to the right of these, and the status line at -the bottom of the window. - -* Menu: - -* Menu:: -* Status-line and Input-field:: What is the program configuration. -* Layer Controls:: Switch layers on/off; change current one. -* Tool Selectors:: Select a layout tool. -* Layout Area:: Where the layout is drawn. - - -File: pcb.info, Node: Menu, Next: Status-line and Input-field, Up: Application Window - -3.1.1 Menus ------------ - -The menus are located at the top of the Layout area. Most, but not all, -of their functions are also available from the keyboard. Similarly, some -functions are only achievable through the keyboard or command entry. -Some menu entries such as `center layout' in the Screen menu require a -certain cross hair position. In this case a prompt message will popup -at the bottom of the screen with wording similar to the following: - move pointer to the appropriate screen position and press a button - Any mouse button will do the job, whereas any key except the arrow -(cursor) keys will cancel the operation. If it seems like the menu -hasn't done what you expected, check to see if it is waiting for the -position click. For details see *note Actions::. - - Pressing _Btn3_ in the Layout area also pops up a menu with many of -the most common operations (except when you're in the midst of drawing -a line or arc). When a choice in the _Btn3_ popup menu needs a cross -hair position, it uses the position where the cross hair was when -_Btn3_ was pressed. For example, to get detailed information on an -object, place the cross hair over the object, press _Btn3_, then choose -`object report'. If you pop up the _Btn3_ menu but don't want to take -any of the actions, click on one of the headers in the menu. - -File - This menu offers a choice of loading, saving and printing data, - saving connection information to a file or quitting the - application. Most of the entries in the File menu are self - explanatory. Selecting `print layout' pops up a printer control - dialog. A selection of several device drivers is available from - the printer control dialog. Presently _PostScript_, _encapsulated - PostScript_, and _GerberX_ are supported. The _GerberX_ driver - produces all of the files necessary to have the board - professionally manufactured. The connection saving features in - the File menu produce outputs in an arcane format that is not too - useful. They do _not_ produce netlist files. - -Edit - The Edit menu provides the usual cut, copy, paste which work on - selections. To learn how to create complex selections, see *note - Arrow Tool::. The Edit menu also provides access to Undo and Redo - of the last operation. These can also be accomplished with the _U_ - key and _Shift-R_ key. Finally, the Edit menu allows you to - change the names of: the layout, the active layer, or text objects - on the layout. - -Screen - The Screen menu supports most functions related to the whole - Layout area. There are various entries to change the grid to some - popular values, the zoom factor, and which kind of element name is - displayed. You can also re-align the grid origin and turn on and - off the display of the grid. Before changing the grid alignment, - I recommend that you zoom in as close as possible so that you're - sure the grid points appear exactly where you want them. - - The Screen menu also allows you to turn on and off the visibility - of the solder-mask layer. When the solder-mask layer is made - visible it obscures most of the layout, so only turn this on when - you really want to know what the solder-mask will look like. The - solder-mask that you see belongs to the side of the board you are - viewing, which can be changed with the `view solder side' option, - also found in the Screen menu. When the solder-mask is displayed, - the pin and pad clearance adjustments (*note Line Objects::) alter - the size of mask cut-outs. - -Sizes - The Sizes menu allows you to select a group of line thickness, via - diameter, via drill size, and clearance (keepaway) (collectively - called a "routing style") to be copied to the "active" sizes. You - can also change the names given to the routing styles and adjust - their values from this menu. The "active" sizes are also - adjustable from this menu. The "active" sizes are shown in the - status-line and control the initial size of new vias, drilling - holes, lines, clearances, text-objects and also the maximum - dimensions of the board layout. - -Settings - The Settings menu controls several operating configuration - parameters. The `edit layer groups' entry brings up a dialog that - allows you to change the way layers are grouped. Layer grouping is - described in *note Layer Objects::. The `all-direction lines' - entry controls the clipping of lines to 45-degree angles. You can - also control whether moving individual objects causes the attached - lines to "rubber band" with the move or not from the Settings - menu. Another entry controls whether the starting clip angle for - the two-line mode (*note Line Objects::) alternates every other - line. You can also control whether element names must be unique - from the Settings menu. When unique element names are enforced, - copying a new element will automatically create a unique - `layout-name' name for it provided that the name originally ended - with a digit (_e.g._ U7 or R6). The Settings menu allows you to - control whether the cross hair will snap to pins and pads even - when they are off-grid. Finally you can control whether new lines - and arcs touch or clear intersecting polygons from this menu. - -Select - This menu covers most of the operations that work with selected - objects. You may either (un)select all visible objects on a - layout or only the ones which have been found by the last - connection scan see . You can delete all selected objects from - this menu. Other entries in the Select menu change the sizes of - selected objects. Note that a select action only affects those - objects that are selected _and_ have their visibility turned on in - the Layer Control panel. The Select menu also provides a means for - selecting objects by name using unix *note Regular Expressions::. - -Buffer - From the Buffer menu you may select one out of five buffers to - use, rotate or clear its contents or save the buffer contents to a - file. You can also use the `break buffer element to pieces' entry - to de-compose an element into pieces for editing. Note: only - objects with visibility turned on are pasted to the layout. If you - have something in a buffer, then change which side of the board you - are viewing, the contents of the buffer will automatically be - mirrored for pasting on the side you are viewing. It is not - necessary to clear a buffer before cutting or copying something - into it - it will automatically be cleared first. - -Connects - The entries available through the Connects menu allow you to find - connections from objects and to manipulate these. You can also - optimize or erase rat's nests from this menu. Finally, the - `auto-route all rats' entry allows you to auto-route all - connections show by the rat's nest. The auto-router will use any - visible copper layer for routing, so turn off the visibility of any - layers you don't want it to use. The auto-router will automatically - understand and avoid any traces that are already on the board, but - it is not restricted to the grid. Finally, the auto-router routes - using the active sizes (except for nets that have a route-style - defined). `Pcb' always knows which tracks were routed by the - auto-router, and you can selectively remove them without fear of - changing tracks that you have manually routed with the `rip-up all - auto-routed tracks' entry in the Connects menu. The `design rule - checker' entry runs a check for copper areas that are too close - together, or connections that touch too tenuously for reliable - production. The DRC stops when the first problem is encountered so - after fixing a problem be sure to run it again until no problems - are found. - _Warning:_ COPPER TEXT IS IGNORED BY THE DRC CHECKER. - -Info - The `generate object report' entry from the Info menu provides a - way to get detailed information about an object, such as its - coordinates, dimensions, etc. You can also get a report - summarizing all of the drills used on the board with `generate - drill summary'. Lastly, you can get a list of all pins, pads and - vias that were found during a connection search. - -Window - The Window menu provides a way to bring each of `Pcb's' windows to - the front. The _Library_ window is used to bring elements from the - library into the paste-buffer. The _Message Log_ window holds the - various messages that `Pcb' sends to the user. The _Netlist_ - window shows the list of connections desired. - - - Now that you're familiar with the various menus, it's time to try -some things out. From the File menu choose `load layout', navigate to -the tutorial folder, then load the file `tut1.pcb'. - - -File: pcb.info, Node: Status-line and Input-field, Next: Layer Controls, Prev: Menu, Up: Application Window - -3.1.2 The Status-line and Input-field -------------------------------------- - -The status-line is located at the bottom edge of the main window. -During normal operation the status information is visible there. When -a selected menu operation requires an additional button click, the -status-line is replaced by a message telling you to position the cursor -and click. When a text input is required, the status-line is replaced -by the Input-field which has a prompt for typing the input. - - The status-line shows, from left to right, the side of the board -that you are viewing (_Tab_ key changes this), the current grid values, -if new lines are restricted to 45 degrees, which type of 45 degree line -mode is active, whether rubberband move and rotate mode is on (R), and -the zoom factor. This information is followed by the active -line-width, via-size and drilling hole, keepaway spacing, and text -scaling. Last is the active buffer number and the name of the layout. -An asterisk appearing at the far left indicates that the layout has -been modified since the last save. Note that the name of the layout is -not the same thing as the filename of the layout. Change the grid -factor to 1.0 mm from the Screen menu. Observe how the status line -shows the new grid setting. Except for the case of the metric grid, all -dimensions in the status line are in units of 0.001 inch (1 mil). - - The input-field pops up (temporarily replacing the status-line) -whenever user input is required. Two keys are bound to the input field: -the _Escape_ key aborts the input, _Return_ accepts it. Let's change -the name of a component on the board to see how the input-field works. -Position the cross hair over R5, and press the _N_ key. The input field -pops-up showing the name for you to edit. Go ahead and change the name, -then hit return. Notice the name of the element changed. Now undo the -change by pressing the _U_ key. You can position the cross hair over -the name, or the element before pressing the _N_ key. - - Now select `realign grid' from the Screen menu. Notice that the -status line has been replaced with an instruction to position the cursor -where you want a grid point to fall. In this case, since the cross hair -can only fall on a grid point, you must move the tip of the finger -cursor to the place where you want a grid point to appear. Do not worry -that the cross hair is not coincident with the cursor. Click _Btn1_ at -your chosen location. See how the grid has shifted, and the status line -has returned. - - The present cross hair position is displayed in the upper right -corner of the window. Normally this position is an absolute -coordinate, but you can anchor a marker at the cross hair location by -pressing _Ctrl-M_ (try it now) and then the display will read both the -absolute cross hair position as well as the difference between it and -the marker. The numbers enclosed in < > are the X and Y distances -between the cross hair and the mark, while the numbers enclosed in -parenthesis are the distance and angle from the mark to the cross hair. -The values displayed are always in units of 0.001 inch (1 mil). -Pressing _Ctrl-M_ again turns the marker off. - - -File: pcb.info, Node: Layer Controls, Next: Tool Selectors, Prev: Status-line and Input-field, Up: Application Window - -3.1.3 The Layer Controls ------------------------- - -The layer control panel, located in the upper left, is used to turn on -and off the display of layer groups and to select the active drawing -layer. If a layer hasn't been named, the label "_(unknown)_" is used -as the default. If this happens, it probably means the application -resources are not installed properly. - - The upper buttons are used to switch layers on and off. Click -__ on one or more of them. Each click toggles the setting. If -you turn off the currently active layer, another one that is visible -will become active. If there are no others visible, you will not be -able to turn off the active layer. When the layers are grouped, -clicking on these buttons will toggle the visibility of all layers in -the same group. This is a good idea because layers in the same group -reside on the same physical layer of the actual board. Notice that this -example has 2 groups each having 3 layers, plus two other layers named -`unused'. Use the `Edit layer groups' option in the `Settings' menu to -change the layer groupings in the lesstif GUI or the `Preferences' -dialog from the `File' menu in the GTK+ GUI. Note that changing the -groupings can radically alter the connectivity on the board. Grouping -layers is only useful for helping you to color-code signals in your -layout. Note that grouping layers actually reduces the number of -different physical layers available for your board, so to make an eight -layer board, you cannot group any layers. - - The _far side_ button turns on and off the visibility of elements -(including SMD pads) on the opposite (to the side you're viewing) board -side, as well as silk screening on that side. It does not hide the -x-ray view of the other copper layers, these must be turned off -separately if desired. Use the _tab_ key to view the entire board from -the other side. To see a view of what the back side of the board will -actually look like, make the solder layer the active layer then press -_tab_ until the status line says "solder" on the right, then turn off -the visibility of all layers except solder, pins/pads, vias, and silk. -Now turn them all back on. - - The lowest button, named _active_, is used to change the active -drawing layer. Pressing __ on it pops up a menu to select which -layer should be active. Each entry is labeled with the layer's name -and drawn in its color. The active layer is automatically made -visible. The active layer is always drawn on top of the other layers, -so the ordering of layers on the screen does not generally reflect the -ordering of the manufactured board. Only the solder, component, -silkscreen, and solder-mask layers are always drawn in their physical -order. Bringing the active layer to the top makes it easier to select -and change objects on the active layer. Try changing the active -layer's name to _ABC_ by selecting `edit name of active layer' from the -`Edit' menu. Changing the active layer can also be done by pressing -keys _1..MAX_LAYER_. - - Turn off the visibility of the component layer. Now make the -component layer the active layer. Notice that it automatically became -visible. Try setting a few other layers as the active layer. You should -also experiment with turning on and off each of the layers to see what -happens. - - The netlist layer is a special layer for adding connections to the -netlist by drawing rat lines. This is not the recommended way to add to -the netlist, but occasionally may be convenient. To learn how to use -the netlist layer see *note Net Objects::. - - -File: pcb.info, Node: Tool Selectors, Next: Layout Area, Prev: Layer Controls, Up: Application Window - -3.1.4 The Tool Selectors ------------------------- - -The tool selector buttons reside below the layer controls. They are -used to select which layout tool to use in the drawing area. Each tool -performs its function when _Btn1_ is pressed. Every tool gives the -cursor a unique shape that identifies it. The tool selector buttons -themselves are icons that illustrate their function. Each layout tool -can also be selected from the keyboard: - _F1_ key Via tool - _F2_ key Line tool - _F3_ key Arc tool - _F4_ key Text tool - _F5_ key Rectangle tool - _F6_ key Polygon tool - _F7_ key Buffer tool - _F8_ key Delete tool - _F9_ key Rotate tool - _Insert_ key Insert-point tool - _F10_ key Thermal tool - _F11_ key Arrow tool - _F12_ key Lock tool - - Some of the tools are very simple, such as the Via tool. Clicking -_Btn1_ with the Via tool creates a via at the cross hair position. The -via will have the diameter and drill sizes that are active, as shown in -the status line. The Buffer tool is similar. With it, __ copies -the contents of the active buffer to the layout, but only those parts -that reside on visible layers are copied. The Rotate tool allows you -to rotate elements, arcs, and text objects 90 degrees counter-clockwise -with each click. Holding the _Shift_ key down changes the Rotate tool -to clockwise operation. Anything including groups of objects can be -rotated inside a buffer using the rotate buffer menu option. - - The Line tool is explained in detail in *note Line Objects::. Go read -that section if you haven't already. Activate the Line tool. Set the -active layer to the solder layer. Try drawing some lines. Use the _U_ -key to undo some of the lines you just created. Zoom in a bit closer -with the _Z_ key. Draw some more lines. Be sure to draw some separate -lines by starting a new anchor point with _Ctrl-Btn1_. Change the -`crosshair snaps to pin/pads' behavior in the Settings menu. Now draw a -line. Notice that the new line points must now always be on a grid -point. It might not be able to reach some pins or pads with this -setting. Increase the active line thickness by pressing the _L_ key. -Note that the status line updates to reflect the new active line -thickness. Now draw another line. Before completing the next line, make -the component layer active by pressing the _4_ key. Now finish the -line. Notice that a via was automatically placed where you switched -layers. `Pcb' does not do any checks to make sure that the via could -safely be placed there. Neither does it interfere with your desire to -place lines haphazardly. It is up to you to place things properly when -doing manual routing with the Line tool. - - The Arc tool is explained in detail in *note Arc Objects::. Its use -is very similar to the Line tool. - - The Rectangle tool, Polygon tool and Thermal tool are explained in -detail in *note Polygon Objects::. Go read that section. Remember that -the Thermal tool will only create and destroy thermals to polygons on -the active layer. Use the Rectangle tool to make a small copper plane -on the component layer. Now place a via in the middle of the plane. -Notice that it does not touch the plane, and they are not electrically -connected. Use the Thermal tool to make the via connect to the plane. -Thermals allow the via or pin to be heated by a soldering iron without -having to heat the entire plane. If solid connections were made to the -plane, it could be nearly impossible to solder. Shift-click on the via -with the Thermal tool to change the style of thermal used or to make -the connection solid. Click on the via again with the Thermal tool to -remove the connection to the plane. - - The Insert-point tool is an editing tool that allows you to add -points into lines and polygons. The Insert-point tool enforces the 45 -degree line rule. You can force only the shorter line segment to 45 -degrees by holding the _Shift_ key down while inserting the point. Try -adding a point into one of the lines you created. Since line clipping -is turned on, you may need to move the cross hair quite far from the -point where you first clicked on the line. Turn off the line clipping -by selecting `all-direction lines' from the Settings menu (or hit the -_Period_ key). Now you can place an inserted point anywhere. Try -adding a point to the rectangle you made earlier. Start by clicking -somewhere along an edge of the rectangle, then move the pointer to a -new location and click again. - - The delete-mode deletes the object beneath the cursor with each -_Btn1_ click. If you click at an end-point that two lines have in -common, it will replace the two lines with a single line spanning the -two remaining points. This can be used to delete an "inserted" point -in a line, restoring the previous line. Now delete one of the original -corner points of the polygon you were just playing with. To do this, -place the cross hair over the corner and click on it with the Delete -tool. You could also use the _Backspace_ key if some other tool is -active. Try deleting some of the lines and intermediate points that you -created earlier. Use undo repeatedly to undo all the changes that -you've made. Use redo a few times to see what happens. Now add a new -line. Notice that you can no longer use redo since the layout has -changed since the last undo happened. The undo/redo tree is always -pruned in this way (_i.e._ it has a root, but no branches). - - The Arrow tool is so important, it has its own section: *note Arrow -Tool::. Go read it now. - - The Lock tool allows you to lock objects on the layout. When an -object is locked, it can't be selected, moved, rotated, or resized. -This is useful for very large objects like ground planes, or -board-outlines that are defined as an element. With such large objects, -nearly anywhere you click with the Arrow tool will be on the large -object, so it could be hard to draw box selections. If you lock an -object, the Arrow tool will behave as if it didn't exist. You cannot -unlock an object with undo. You must click on it again with the Lock -tool. If an object is locked, previous changes to it cannot be undone -either. When you lock an object, a report message about it is popped up -and will always tell you what object it is, and that it is locked if -you just locked it. Other than noticing your inability to manipulate -something, the only way to tell an object is locked is with a report -from the Info menu. Use the Lock tool sparingly. - - -File: pcb.info, Node: Layout Area, Prev: Tool Selectors, Up: Application Window - -3.1.5 Layout Area ------------------ - -The layout area is where you see the layout. The cursor shape depends -on the active tool when the pointer is moved into the layout area. A -cross hair follows the mouse pointer with respect to the grid setting. -Select a new grid from the _Screen_ menu. The new value is updated in -the status line. A different way to change the grid is _Shiftg_ -to decrease or _g_ to increase it, but this only works for English -(integer mil) grids. The grid setting is saved along with the data -when you save a pcb layout. For homemade layouts a value around 50 is -a good setting. The cursor can also be moved in the layout area with -the cursor (arrow) keys or, for larger distances, by pressing the -_Shift_ modifier together with a cursor key. - - -File: pcb.info, Node: Log Window, Next: Library Window, Prev: Application Window, Up: Getting Started - -3.2 Log Window -============== - -This optional window is used to display all kind of messages including -the ones written to _stderr_ by external commands. The main advantage -of using it is that its contents are saved in a scrolling list until the -program exits. Disabling this feature by setting the resource -_useLogWindow_ to _false_ will generate popup windows to display -messages. The _stderr_ of external commands will appear on `Pcb's -_stderr_ which normally is the parent shell. I suggest you iconify the -log window after startup for example by setting _*log.iconic_ to _true_ -in the resource file. If _raiseLogWindow_ is set _true_, the window -will deiconify and raise itself whenever new messages are to be -displayed. - - -File: pcb.info, Node: Library Window, Next: Netlist Window, Prev: Log Window, Up: Getting Started - -3.3 Library Window -================== - -The library window makes loading elements (or even partial layouts) -easy. Just click the appropriate library from the list on the left. A -list of its elements then appears on the right. Select an element from -the list by clicking on its description. Selecting an element from the -library will also automatically copy the element into the active -buffer, then invoke the _Buffer_ tool so you can paste it to the -layout. Elements in the old library should be taken with a grain of -salt (_i.e._ check them carefully before using). The old library names -all begin with ~ so you can easily distinguish between the old and new -libraries. All of the elements in the new library should be -thoroughly vetted, so you can use them with confidence. The new -libraries are stored simply as directories full of element files, so -making additions to the new library is easy since there is no need to -learn `m4'. For details on the old libraries, check-out *note Library -File:: and *note Library Contents File::. For details on the format of -an element file used for the new libraries, see *note Element File::. - - -File: pcb.info, Node: Netlist Window, Next: Drawing and Removing, Prev: Library Window, Up: Getting Started - -3.4 Netlist Window -================== - -The netlist window is very similar to the library window. On the left -is a list of all of the nets, on the right is the list of connections -belonging to the chosen net. The chosen net is highlighted in the list -and also shown on the second line of the window in red. If the net name -has a star to the left of it then it is "disabled". A disabled net is -treated as if it were not in the net list. This is useful, for example, -if you plan to use a ground plane and don't want the ground net showing -up in the rat's nest. You can enable/disable individual nets by -double-clicking the net name. If you want to enable or disable all nets -at once, there are two buttons at the top of the netlist window for -this purpose. - - The button labeled `Sel Net On Layout' can be used to select (on the -layout) everything that is connected (or is supposed to be connected) -to the net. If you click on a connection in the connection list, it -will select/deselect the corresponding pin or pad in the layout and -also center the layout window where it is located. If you "Find" -(`lookup connection to object' in the Connects menu [also _F_ key]), a -pin or pad it will also choose the net and connection in the netlist -window if it exists in the netlist. - - If no netlist exists for the layout, then the netlist window does not -appear. You can load a netlist from a file from the File menu. The -format for netlist files is described in *note Netlist File::. - - -File: pcb.info, Node: Drawing and Removing, Next: Moving and Copying, Prev: Netlist Window, Up: Getting Started - -3.5 Drawing and Removing Basic Objects -====================================== - -hace begging gutting here, and do a real-world tutorial example. - - There are several ways of creating new objects: you can draw them -yourself, you can copy an existing object (or selection), or you can -load an element from a file or from the Library window. Each type of -object has a particular tool for creating it. - - The active tool can be selected from the tool selectors in the bottom -left corner or by one of the function keys listed earlier in this -chapter. Each __ press with the tool tells the application to -create or change the appropriate object or at least take the first step -to do so. Each tools causes the cursor to take on a unique shape and -also causes the corresponding tool selector button to be highlighted. -You can use either cue to see which tool is active. - - Insert mode provides the capability of inserting new points into -existing polygons or lines. The 45 degree line clipping is now enforced -when selected. Press and hold the shift key while positioning the new -point to only clip the line segment to the nearer of the two existing -points to 45 degrees. You can also toggle the 45-degree clipping in -the middle of a point insertion by pressing the _._ If the shift -key is not depressed and the 45 degree line clipping mode is on, both -new line segments must be on 45 degree angles - greatly restricting -where the new point may be placed. In some cases this can cause -confusion as to whether an insertion has been started since the two new -lines may be forced to lie parallel on top of the original line until -the pointer is moved far from the end points. - - Removing objects, changing their size or moving them only applies to -objects that are visible when the command is executed. - -* Menu: - -* Common:: Keystrokes common to some objects. -* Lines:: -* Arcs:: -* Polygons:: Drawing polygons and rectangles. -* Text:: -* Vias:: -* Elements:: -* Pastebuffer:: A multi-purpose buffer. - - -File: pcb.info, Node: Common, Next: Lines, Up: Drawing and Removing - -3.5.1 Common Drawing and Removing Methods ------------------------------------------ - -There are several keystrokes and button events referring to an _object_ -without identifying its type. Here's a list of them: - - __ creates (or deletes) an object depending on the current -mode. - - _BackSpace_ or _Delete_ removes the visible object at the -cursor location. When more than one object exists at the location, the -order of removal is: via, line, text, polygon and element. The drawn -layer order also affects the search - whatever is top - most (except -elements) is affected before lower items. Basically all this means -that what is removed is probably just what you expect. If for some -reason it isn't, undo and try again. Only one object is removed for -each keystroke. If two or more of the same type match, the newest one -is removed. - - Use _s_ and _Shifts_ to change the size (width) of lines, -arcs, text objects, pins, pads and vias, or to toggle the style of -polygons (whether pins and vias automatically have clearances). - - _n_ changes the name of pins, pads, vias, the string of a text -object, or the currently displayed label of an element. - - _m_ moves the line, arc, or polygon under the cross hair to the -active layer if it wasn't on that layer already. - - _u_ (undo) recovers from an unlimited number of operations such -as creating, removing, moving, copying, selecting etc. It works like -you'd expect even if you're in the midst of creating something. - - _Shiftr_ restores the last undone operation provided no other -changes have been made since the undo was performed. - - _tab_ changes the board side you are viewing. - - For a complete list of keystrokes and button events see *note -Translations::. - - -File: pcb.info, Node: Lines, Next: Arcs, Prev: Common, Up: Drawing and Removing - -3.5.2 Lines ------------ - -To draw new lines you have to be in _line-mode_. Get there either by -selecting it from the _Tool palette_ or by pressing _F2_. Each -successive _notify_ event creates a new line. The adjustment to 45 -degree lines is done automatically if it is selected from the _Display_ -menu. You can toggle the 45 degree mode setting by pressing the -_._ (That is the period key). When 45 degree enforcement is turned -on there are three distinct modes of line creation: a single line on -the closest 45 degree vector towards the cross hair (but not necessarily -actually ending at the cross hair), two lines created such that the -first leaves the start point on a 90 degree vector and the second -arrives at the cross hair on a 45 degree vector, and finally two lines -created such that the first leaves the start point on a 45 degree -vector and the second arrives at the cross hair on a 90 degree vector. -These last two modes always connect all the way from the start and end -points, and all lines have angles in 45 degree multiples. The _/_ -cycles through the three modes. The status line shows a text icon to -indicate which of the modes is active and the lines following the cross -hair motion show the outline of the line(s) that will actually be -created. Press _Escape_ to leave line-mode. - - _l_, _Shiftl_ and the entries in the _Sizes_ menu change -the initial width of new lines. This width is also displayed in the -status line. - - -File: pcb.info, Node: Arcs, Next: Polygons, Prev: Lines, Up: Drawing and Removing - -3.5.3 Arcs ----------- - -An Arc is drawn with the _arc-tool_. Get there either by selecting it -from the _Tool palette_ or by pressing _F8_. Press _Btn1_ to -define the starting point for the arc. Drag the mouse towards the -desired end point along the path you want the arc to follow. The -outline of the arc that will be created is shown on the screen as you -move the mouse. Arcs are always forced to be 90 degrees and have -symmetrical length and width ( i.e. they are a quarter circle). The -next _Btn1_ click creates the arc. It will have the same width as new -lines (displayed in the status line) and appear on the active layer. -The arc leaves the starting point towards the cross hair along the axis -whose distance from the cross hair is largest. Normally this means that -if you drag along the path you want the arc to follow, you'll get what -you want. If the grid is set to the arc radius, then the two distances -will be equal and you won't be able to get all of the possible -directions. If this is thwarting your desires, reduce the grid spacing -(_!ShiftG_) and try again. - - -File: pcb.info, Node: Polygons, Next: Text, Prev: Arcs, Up: Drawing and Removing - -3.5.4 Polygons and Rectangles ------------------------------ - -A polygon is drawn by defining all of its segments as a series of -consecutive line segments. If the first point matches a new one and if -the number of points is greater than two, then the polygon is closed. -Since matching up with the first point may be difficult, you may use -_Shiftp_ to close the polygon. The _Shiftp_ won't work if -clipping to 45 degree lines is selected and the final segment cannot -match this condition. I suggest you create simple convex polygons in -order to avoid a strong negative impact on the performance of the -connection scanning routines. The _rectangle-mode_ is just an easy way -to generate rectangular polygons. _Polygon-mode_ also is selected by -_F6_ whereas _rectangle-mode_ uses _F4_. Pressing a __ -at two locations creates a rectangle by defining two of its corners. -_Insert_ brings you to _insert-point-mode_ which lets you add -additional points to an already existing polygon. Single points may be -removed by moving the cross hair to them and selecting one of the -delete actions _(remove-mode, BackSpace, or Delete_. This only works if -the remaining polygon will still have three or more corners. Pressing -_u_ or _p_ while entering a new polygon brings you back to -the previous corner. Removing a point does not force clipping to 45 -degree angles (because it's not generally possible). Newly created -polygons will not connect to pins or vias that pierce it unless you -create a thermal (using the thermal mode) to make the connection. If -the edge of a polygon gets too close to a pin or via that lies outside -of it, a warning will be issued and the pin will be given a special -color. Increasing the distance between them will remove the warning -color. - - -File: pcb.info, Node: Text, Next: Vias, Prev: Polygons, Up: Drawing and Removing - -3.5.5 Text ----------- - -Pressing _F5_ or clicking one of the text selector buttons changes -to _text-mode_. Each successive notify event (__) pops up the -input line at the bottom and queries for a string. Enter it and press -_Return_ to confirm or _Escape_ to abort. The text object is -created with its upper left corner at the current pointer location. -The initial scaling is changed by _t_ and _Shiftt_ or from -the _Sizes_ menu. - - Now switch to _rotate-mode_ and press __ at the text-objects -location. Text objects on the solder side of the layout are -automatically mirrored and flipped so that they are seen correctly when -viewing the solder-side. - - Use _n_ to edit the string. - - TEXT OBJECTS ON COPPER LAYERS CREATE COPPER LINES BUT THEY ARE NOT -SCANNED FOR CONNECTIONS. If they are moved to the silkscreen layer, they -no longer create copper. - - -File: pcb.info, Node: Vias, Next: Elements, Prev: Text, Up: Drawing and Removing - -3.5.6 Vias ----------- - -The initial size of new vias may be changed by _v_ and -_Shiftv_ or by selecting the appropriate entry from the _Sizes_ -menu. _Mod1v_ and _Mod1 Shiftv_ do the same for the drilling -hole of the via. The statusline is updated with the new values. -Creating a via is similar to the other objects. Switch to _via-mode_ by -using either the selector button or _F1_ then press _]_ or -__ to create one. _n_ changes the name of a via. If you -want to create a mounting hole for your board, then you can place a via -where you want the hole to be then convert the via into a hole. The -conversion is done by pressing _!Ctrlh_ with the cross hair over -the via. Conceptually it is still a via, but it has no copper annulus. -If you create such a hole in the middle of two polygons on different -layers, it will short the layers. Theoretically you could arrange for -such a hole not to be plated, but a metal screw inserted in the hole -would still risk shorting the layers. A good rule is to realize that -holes in the board really are vias between the layers and so place them -where they won't interfere with connectivity. You can convert a hole -back into a normal via with the same keystroke used to convert it in -the first place. - - -File: pcb.info, Node: Elements, Next: Pastebuffer, Prev: Vias, Up: Drawing and Removing - -3.5.7 Elements --------------- - -Some of the functions related to elements only work if both the package -layer and the pin layer are switched on. - - Now that you're familiar with many of the basic commands, it is time -to put the first element on the layout. First of all, you have to load -data into the paste buffer. There are four ways to do this: - 1) load the data from a library - 2) load the data from a file - 3) copy data from an already existing element - 4) convert objects in the buffer into an element - We don't have any elements on the screen yet nor anything in the -buffer, so we use number one. - - Select _lsi_ from the menu in the library window press __ -twice at the appropriate text-line to get the MC68030 CPU. The data is -loaded and the mode is switched to _pastebuffer-mode_. Each notify -event now creates one of these beasts. Leave the mode by selecting a -different one or by _Escape_ which resets all modes.. The cross -hair is located at the _mark_ position as defined by the data file. -Rotating the buffer contents is done by selecting the _rotate_ entry of -the _Buffer_ menu or by pressing _ShiftF3_. The contents of the -buffer are valid until new data is loaded into it either by a -cut-to-buffer operation, copy-to-buffer operation or by loading a new -data file. There are 5 buffers available (possibly more or less if -changed at compile time with the `MAX_BUFFER' variable in -`globalconfig.h'). Switching between them is done by selecting a menu -entry or by _Shift1..MAX_BUFFER_. Each of the two board sides has -its own buffers. - - The release includes all data files for the circuits that are used -by the demo layout. The elements in the LED example are not found in -the library, but you can lift them from the example itself if you want. -If you have problems with the color of the cross hair, change the -resource _cross hairColor_ setting to a different one. - - Now load a second circuit, the MC68882 FPU for example. Create the -circuit as explained above. You now have two different unnamed -elements. Unnamed means that the layout-name of the element hasn't been -set yet. Selecting _description_ from the _Display_ menu displays the -description string of the two circuits which are CPU and FPU. The -values of the circuits are set to MC68030 and MC68882. Each of the -names of an element may be changed by _n_ at the elements location -and editing the old name in the bottom input line. Naming pins and vias -is similar to elements. You can hide the element name so that it won't -appear on the board silkscreen by pressing _h_ with the cursor -over the element. Doing so again un-hides the element name. - - Entering `:le' and selecting an element data file is the second way -to load circuits. - - The third way to create a new element is to copy an existing one. -Please refer to *note Moving and Copying::. - - The fourth way to create a new element is to convert a buffer's -contents into an element. Here's how it's done: Select the Via-tool -from the _Tool pallet_. Set the grid spacing to something appropriate -for the element pin spacing. Now create a series of vias where the pins -go. Create them in pin number order. It is often handy to place a -reference point (_!Ctrlm_) in the center of the first pin in order -to measure the location of the other pins. Next make a solder-side -layer the active layer from the _active-layer_ popup menu. Now draw -the outline of the element using lines and arcs. When you're done, -select everything that makes up the element with a box selection -(_ drag, _). Now select "cut selection to buffer" -from the _Buffer_ menu. Position the cursor over the center of pin 1 -and press the left button to load the data into the buffer. Finally -select "convert buffer to element" from the _Buffer_ menu. You'll only -want to create elements this way if they aren't already in the library. -It's also probably a good idea to do this before starting any of the -other aspects of a layout, but it isn't necessary. - - To display the pinout of a circuit move to it and press _Shiftd_ -or select _show pinout_ from the _Objects_ menu. A new window pops up -and displays the complete pinout of the element. This display can be -difficult to read if the component has been rotated 90 degrees :-( -therefore, the new window will show an un-rotated view so the pin names -are readable. _d_ displays the name of one or all pins/pads -inside the Layout area, this is only for display on-screen, it has no -effect on any printing of the layout. - - You also may want to change a pin's or pad's current size by pressing -_s_ to increase or _Shifts_ to decrease it. While this is -possible, it is not recommended since care was probably taken to define -the element structure in the first place. You can also change the -thickness of the element's silkscreen outline with the same keys. You -can change whether a pin or SMD pad is rounded or square with the -_q_. SMD pads should usually have squared ends. Finally, you can -change whether the non-square pins are round or octagonal with the -_!Ctrlo_. - - SMD elements and silkscreen objects are drawn in the "invisible -object" color if they are located on the opposite side of the board. - - For information on element connections refer to *note Connection -Lists::. - - -File: pcb.info, Node: Pastebuffer, Prev: Elements, Up: Drawing and Removing - -3.5.8 Pastebuffer ------------------ - -The line-stack and element-buffer of former releases have been replaced -by 5 (possibly more or less if changed at compile time with the -`MAX_BUFFER' variable in `globalconfig.h') multi-purpose buffers that -are selected by _Shift1..MAX_BUFFER_. The status line shows which -buffer is the active one. You may load data from a file or layout into -them. Cut-and-paste works too. If you followed the instructions -earlier in this chapter you should now have several objects on the -screen. Move the cross hair to one of them and press __ to -toggle its selection flag. (If you drag the mouse while the button is -down, a box selection will be attempted instead of toggling the -selection.) The object is redrawn in a different color. You also may -want to try moving the pointer while holding the third button down and -release it on a different location. This selects all objects inside the -rectangle and unselects everything else. If you want to add a box -selection to an existing selection, drag with _Mod1_ instead. -Dragging _Shift Mod1_ unselects objects in a box. Now change -to _pastebuffer-mode_ and select some operations from the _Buffer_ -menu. Copying objects to the buffer is available as _Mod1c_ while -cutting them uses _Mod1x_ as shortcut. Both clear the buffer -before new data is added. If you use the menu entries, you have to -supply a cross hair position by pressing a mouse button. The objects -are attached to the pastebuffer relative to that cross hair location. -Element data or PCB data may be merged into an existing layout by -loading the datafiles into the pastebuffer. Both operations are -available from the _File_ menu or as user commands. - - -File: pcb.info, Node: Moving and Copying, Next: Loading and Saving, Prev: Drawing and Removing, Up: Getting Started - -3.6 Moving and Copying -====================== - -All objects can be moved including element-names, by __, -dragging the pointer while holding the button down and releasing it at -the new location of the object. If you use _Mod1_ instead, -the object is copied. Copying does not work for element-names of -course. You can move all selected objects with _Shift _. This -uses the Pastebuffer, so it will remove whatever was previously in the -Pastebuffer. Please refer to *note Pastebuffer::. If you want to give -a small nudge to an object, but you don't think that the mouse will -give you the fine level of control that you want, you can position the -cursor over the object, press _[_, move it with the arrow keys, -then press _]_ when it's at the desired position. Remember that -all movements are forced onto grid coordinates, so you may want to -change the grid spacing first. - - To move a trace or group of traces to a different layer, first select -the tracks to be moved. It's easiest to do this if you shut off -everything but that layer first (i.e. silk, pins, other layers, etc). -Now set the current layer to be the new layer. Press Shift-M to move -all the selected tracks to the current layer. See the -_MoveToCurrentLayer_ action for more details. - - -File: pcb.info, Node: Loading and Saving, Next: Printing, Prev: Moving and Copying, Up: Getting Started - -3.7 Loading and Saving -====================== - -After your first experience with `Pcb' you will probably want to save -your work. `:s name' passes the data to an external program which is -responsible for saving it. For details see _saveCommand_ in *note -Resources::. Saving also is available from the _File_ menu, either -with or without supplying a filename. `Pcb' reuses the last filename if -you do not pass a new one to the save routine. - - To load an existing layout either select _load layout data_ from the -_File_ menu or use `:l filename'. A file select box pops up if you -don't specify a filename. Merging existing layouts into the new one is -supported either by the _File_ menu or by `:m filename'. - - `Pcb' saves a backup of the current layout at a user specified -interval. The backup filename is created by appending a dash, "-", to -the `.pcb' filename. For example, if you are editing the layout in -`projects/board.pcb' then the backup file name will be -`projects/board.pcb-'. If the layout is new and has not been saved -yet, then the backup file name is `PCB.####.backup' where the "####" -will be replaced by the process ID of the currenting running copy of -`Pcb'. This default backup file name may be changed at compilation -time via the `BACKUP_NAME' variable in `globalconfig.h'). During -critical sections of the program or when data would be lost it is saved -as `PCB.%i.save'. This file name may be changed at compile time with -the `SAVE_NAME' variable in `globalconfig.h'. - - -File: pcb.info, Node: Printing, Next: Exporting, Prev: Loading and Saving, Up: Getting Started - -3.8 Printing -============ - -`Pcb' now has support for device drivers, `PostScript', _encapsulated -PostScript_, and _Gerber RS-274X_ drivers are available so far. The -_Gerber RS-274X_ driver additionally generates a numerical control (NC) -drill file for automated drilling, a bill of materials file to assist -in materials procurement and inventory control, and a centroid (X-Y) -file which includes the centroid data needed by automatic assembly -(pick and place) machines. I recommend the use of `GhostScript' if you -don't have a `PostScript' printer for handling the PostScript output. -Printing always generates a complete set of files for a specified -driver. See the page about the _Print()_ action for additional -information about the filenames. The control panel offers a number of -options. Most of them are not available for Gerber output because it -wouldn't make sense, for example, to scale the gerber output (you'd -get an incorrectly made board!) The options are: - -`device' - The top menu button selects from the available device drivers. - -`rotate' - Rotate layout 90 degrees counter-clockwise before printing - (default). - -`mirror' - Mirror layout before printing. Use this option depending on your - production line. - -`color' - Created colored output. All colors will be converted to black if - this option is inactive. - -`outline' - Add a board outline to the output file. The size is determined by - the maximum board size changeable from the _sizes_ menu. The - outline appears on the top and bottom sides of the board, but not - on the internal layers. An outline can be useful for determining - where to shear the board from the panel, but be aware that it - creates a copper line. Thus it has the potential to cause short - circuits if you don't leave enough room from your wiring to the - board edge. Use a viewer to see what the output outline looks like - if you want to know what it looks like. - -`alignment' - Additional alignment targets are added to the output. The - distances between the board outline is set by the resource - _alignmentDistance_. Alignment targets should only be used if you - know for certain that YOU WILL BE USING THEM YOURSELF. It is - extremely unlikely that you will want to have alignment targets if - you send gerber files to a commercial pcb manufacture to be made. - -`scaling' - It's quite useful to enlarge your printout for checking the layout. - Use the scrollbar to adjust the scaling factor to your needs. - -`media' - Select the size of the output media from this menu. The user - defined size may be set by the resource _media_ either from one of - the well known paper sizes or by a `X11' geometry specification. - This entry is only available if you use `X11R5' or later. For - earlier releases the user defined size or, if not available, _A4_ - is used. Well known size are: - A3 - A4 - A5 - letter - tabloid - ledger - legal - executive - -`offset' - Adjust the offsets of the printout by using the panner at the - right side of the dialog box. This entry is only available if you - use `X11R5' or later. A zero offset is used for earlier releases. - -`8.3 filenames' - Select this button to generate DOS compatible filenames for the - output files. The _command_ input area will disappear if selected. - -`commandline' - Use this line to enter a command (starts with `|') or a filename. - A %f is replaced by the current filename. The default is set by - the resource _printCommand_. - - - The created file includes some labels which are guaranteed to stay -unchanged -`PCBMIN' - identifies the lowest x and y coordinates in mil. - -`PCBMAX' - identifies the highest x and y coordinates in mil. - -`PCBOFFSET' - is set to the x and y offset in mil. - -`PCBSCALE' - is a floating point value which identifies the scaling factor. - -`PCBSTARTDATA' -`PCBENDDATA' - all layout data is included between these two marks. You may use - them with an `awk' script to produce several printouts on one - piece of paper by duplicating the code and putting some - `translate' commands in front. Note, the normal `PostScript' - units are 1/72 inch. - - -File: pcb.info, Node: Exporting, Next: Arrow Tool, Prev: Printing, Up: Getting Started - -3.9 Exporting a layout -====================== - -To export a layout choose _Export layout_ from the _File_ menu, then -select the desired exporter. - -* Menu: - -* bom:: Bill of materials. -* gcode:: G-code. -* gerber:: Gerber. -* nelma:: Nelma. -* png:: Image. -* ps:: Postscript. -* eps:: Eps. - - -File: pcb.info, Node: bom, Next: gcode, Up: Exporting - -3.9.1 Bill of materials (bom) ------------------------------ - -Produces a bill of materials (BOM) file and a centroid (XY) file. - - -File: pcb.info, Node: gcode, Next: gerber, Prev: bom, Up: Exporting - -3.9.2 G-code (gcode) --------------------- - -The gcode exporter can generate RS274/NGC G-CODE files to be used with -a CNC mill to produce pcb's by mechanically removing copper from the -perimeter of all elements. - - The elements are enlarged in order to compensate for the cutting -tool size so that the remaining copper corresponds to the original -size; however all polygons are left unchanged and will end up being a -little smaller; this is not a problem because the electrical connection -is done with traces, which are correctly enlarged. - - A .cnc file is generated for every copper layer, with the bottom -layer mirrored so that the milling is done right; of course it's not -possible to produce directly multi-layer (more than 2) pcb's with this -method, but the cnc files for intermediate layers are generated anyways. - - A drill file is also generated, and it contains all drills -regardless of the hole size; the drilling sequence is optimized in -order to require the least amount of movement. - - The export function generates an intermediate raster image before -extracting the contour of copper elements, and this image is saved as -well (in .png format) for inspection. - - When the spacing between two elements is less than the tool diameter -they will merge and no isolation will be cut between them; the control -image should be checked for this behaviour. - - Possible workarounds are: increasing spacing, decreasing the tool -size, increasing the intermediate image resolution. - - To maximize the chance of producing correct pcb's it would be better -to increase the DRC clearance to at least the tool diameter and use -traces as thick as possible; the rule is: use the largest element that -will not prevent the isolation cut. - - The exporter parameters are: - -basename - base name for generated files - -dpi - intermediate image resolution; affects precision when extracting - contours - -mill depth - should be the copper depth - -safe z - Z value when moving between polygons - -tool radius - copper elements are enlarged by this amount - -drill depth - depth of drills - -measurement unit - for all parameters above, can be mm,um,inch,mil; g-code is always - mm or inch - - All .cnc files specify Z values as parameters, so that it's easy to -change them without the need to run the exporter again. - - Operation was verified with the EMC2 g-code interpreter. - - Following is a sample layout that is converted with default settings: [image src="gcode.png" alt="Sample Layout"] - -The control image shows that the spacing is sufficient: [image src="gcode_control_img.png" alt="Control Image"] - -The final tool path follows the perimeter of all elements: [image src="gcode_tool_path.png" alt="Resulting Tool Path"] - - -File: pcb.info, Node: gerber, Next: nelma, Prev: gcode, Up: Exporting - -3.9.3 Gerber (gerber) ---------------------- - -Produces RS274-X (a.k.a. gerber) photo plot files and Excellon drill -files. - - -File: pcb.info, Node: nelma, Next: png, Prev: gerber, Up: Exporting - -3.9.4 Nelma (nelma) -------------------- - -Numerical analysis package export. - - -File: pcb.info, Node: png, Next: ps, Prev: nelma, Up: Exporting - -3.9.5 Image (png) ------------------ - -Produces GIF/JPEG/PNG image files. - - -File: pcb.info, Node: ps, Next: eps, Prev: png, Up: Exporting - -3.9.6 Postscript (ps) ---------------------- - -Export as postscript. Can be later converted to pdf. - - -File: pcb.info, Node: eps, Prev: ps, Up: Exporting - -3.9.7 Encapsulated Postscript (eps) ------------------------------------ - -Export as eps (encapsulated postscript) for inclusion in other -documents. Can be later converted to pdf. - - -File: pcb.info, Node: Connection Lists, Prev: Vendor drill mapping, Up: Getting Started - -3.10 Connection Lists -===================== - -After completing parts of your layout you may want to check if all drawn -connections match the ones you have in mind. This is probably best done -in conjunction with a net-list file: see *note Rats Nest::. The -following examples give more rudimentary ways to examine the -connections. - 1) create at least two elements and name them - 2) create some connections between their pins - 3) optionally add some vias and connections to them - - Now select _lookup connection_ from the _Connections_ menu, move the -cursor to a pin or via and press any mouse button. `Pcb' will look for -all other pins and/or vias connected to the one you have selected and -display the objects in a different color. Now try some of the reset -options available from the same menu. - - There also is a way to scan all connections of one element. Select -_a single element_ from the menu and press any button at the element's -location. All connections of this element will be saved to the -specified file. Either the layout name of the element or its canonical -name is used to identify pins depending on the one which is displayed -on the screen (may be changed by _Display_ menu). - - An automatic scan of all elements is initiated by choosing _all -elements_. It behaves in a similar fashion to scanning a single element -except the resource _resetAfterElement_ is used to determine if -connections should be reset before a new element is scanned. Doing so -will produce very long lists because the power lines are rescanned for -every element. By default the resource is set to _false_ for this -reason. - - To scan for unconnected pins select _unused pins_ from the same menu. - - -File: pcb.info, Node: Arrow Tool, Next: Rats Nest, Prev: Exporting, Up: Getting Started - -3.11 Arrow Tool -=============== - -Some commands mentioned earlier in this chapter also are able to -operate on all selected and visible objects. The Arrow tool is used to -select/deselect objects and also to move objects or selections. If you -click and release on an object with the Arrow tool, it will unselect -everything else and select the object. Selected objects change color to -reflect that they are selected. If you _Shift_ click, it will add the -object to (or remove) the object from the existing selection. If you -drag with the mouse button down with the Arrow tool, one of several -things could happen: if you first pressed the button on a selected -object, you will be moving the selection to where you release the -button. If you first pressed the button on an unselected object, you -will be moving that object. If you first pressed the button over empty -space, you will be drawing a box to select everything inside the box. -The _Shift_ key works the same way with box selections as it does with -single objects. - - Moving a single un-selected object is different from moving a -selection. First of all, you can move the end of line, or a point in a -polygon this way which is impossible by moving selections. Secondly, if -rubber banding is turned on, moving a single object will rubber-band -the attached lines. Finally, it is faster to move a single object this -way since there is no need to select it first. - - You can select any visible object unless it is locked. If you select -an object, then turn off its visibility with the Layer controls, it -won't be moved if you move the remaining visible selection. - - If you have not configured to use strokes in the `Pcb' user -interface, then the middle mouse button is automatically bound to the -arrow tool, regardless of the active tool (which is bound to the first -mouse button). So using the middle button any time is just like using -the first mouse button with the Arrow tool active. - - The entries of the _Selection_ menu are hopefully self-explanatory. -Many of the _Action Commands_ can take various key words that make them -function on all or some of the selected items. - - -File: pcb.info, Node: Rats Nest, Next: Design Rule Checking, Prev: Arrow Tool, Up: Getting Started - -3.12 Rats Nest -============== - -If you have a netlist that corresponds to the layout you are working -on, you can use the rats-nest feature to add rat-lines to the layout. -First you will need to load a netlist file (see _:rn_, *note User -Commands::). _w_ adds rat-lines on the active layer using the -current line thickness shown in the status line (usually you'll want -them to be thin lines). Only those rat-lines that fill in missing -connectivity (since you have probably routed some connections already) -are added. If the layout is already completely wired, nothing will be -added, and you will get a message that the wiring is complete. - - Rat-lines are lines having the special property that they only -connect to pins and pads at their end points. Rat-lines may be drawn -differently to other lines to make them easier to identify since they -have special behavior and cannot remain in a completed layout. -Rat-lines are added in the minimum length straight-line tree pattern -(always ending on pins or pads) that satisfies the missing connectivity -in the circuit. Used in connection with moves and rotates of the -elements, they are extremely useful for deciding where to place -elements on the board. The rat-lines will always automatically -rubberband to the elements whether or not the rubberband mode is on. -The only way for you to move them is by moving the parts they connect -to. This is because it is never desirable to have the rat-lines -disconnected from their element pins. Rat-lines will normally -criss-cross all over which gives rise to the name "rats nest" -describing a layout connected with them. If a SMD pad is unreachable -on the active layer, a warning will be issued about it and the rat-line -to that pad will not be generated. - - A common way to use rats nests is to place some elements on the -board, add the rat-lines, and then use a series of moves/rotates of the -elements until the rats nest appears to have minimum tangling. You may -want to iterate this step several times. Don't worry if the layout -looks messy - as long as you can get a sense for whether the -criss-crossing is better or worse as you move things, you're fine. -After moving some elements around, you may want to optimize the rats -nest _o_ so that the lines are drawn between the closest points -(this can change once you've moved components). Adding rat-lines only -to selected pads/pins (_Shiftw_) is often useful to layout a -circuit a little bit at a time. Sometimes you'll want to delete all -the rat-lines (_e_) or selected rat-lines (_Shifte_) in order -to reduce confusion. With a little practice you'll be able to achieve -a near optimal component placement with the use of a rats nest. - - Rat-lines are not only used for assisting your element placement, -they can also help you to route traces on the board. Use the _m_ -to convert a rat-line under the cursor into a normal line on the active -layer. Inserting a point into a rat-line will also cause the two new -lines to be normal lines on the board. Another way that you can use -rat-lines is to use the _f_ with the cursor over a pad or pin. -All of the pins and pads and rat-lines belonging to that net will be -highlighted. This is a helpful way to distinguish one net from the rest -of the rats nest. You can then route those tracks, turn off the -highlighting (_Shiftf_) and repeat the process. This will work even -if the layer that the rat-lines reside on is made invisible - so only -the pins and pads are highlighted. Be sure to erase the rat-lines -(_e_ erases them all) once you've duplicated their connectivity by -adding your own lines. When in doubt, the _o_ will delete only -those rat-lines that are no longer needed. - - If connections exist on the board that are not listed in the netlist -when _w_ is pressed, warning messages are issued and the affected -pins and pads are drawn in a special _warnColor_ until the next -_Notify()_ event. If the entire layout agrees completely with the -netlist, a message informs you that the layout is complete and no -rat-lines will be added (since none are needed). If the layout is -complete, but still has rat-lines then you will be warned that -rat-lines remain. If you get no message at all it's probably because -some elements listed in the net list can't be found and where reported -in an earlier message. There shouldn't be any rat-lines left in a -completed layout, only normal lines. - - The _Shiftw_ is used to add rat-lines to only those missing -connections among the selected pins and pads. This can be used to add -rat-lines in an incremental manner, or to force a rat-line to route -between two points that are not the closest points within the net. -Often it is best to add the rats nest in an incremental fashion, laying -out a sub-section of the board before going further. This is easy to -accomplish since new rat-lines are never added where routed -connectivity already makes the necessary connections. - - -File: pcb.info, Node: Design Rule Checking, Next: Trace Optimizer, Prev: Rats Nest, Up: Getting Started - -3.13 Design Rule Checking -========================= - -After you've finished laying out a board, you may want to check to be -certain that none of your interconnections are too closely spaced or -too tenuously touching to be reliably fabricated. The design rule -checking (DRC) function does this for you. Use the command ":DRC()" -(without the quotes of course) to invoke the checker. If there are no -problem areas, you'll get a message to that effect. If any problem is -encountered, you will get a message about it and the affected traces -will be highlighted. One part of the tracks of concern will be -selected, while the other parts of concern will have the -"FindConnection" highlighting. The screen will automatically be -centered in the middle of the object having the "FindConnection" -(Green) highlighting. The middle of the object is also the coordinates -reported to be "near" the problem. The actual trouble region will be -somewhere on the boundary of this object. If the two parts are from -different nets then there is some place where they approach each other -closer than the minimum rule. If the parts are from the same net, then -there is place where they are only barely connected. Find that place -and connect them better. - - After a DRC error is found and corrected you must run the DRC again -because the search for errors is halted as soon as the first problem is -found. Unless you've been extremely careless there should be no more -than a few design rule errors in your layout. The DRC checker does not -check for minimum spacing rules to copper text, so always be very -careful when adding copper text to a layout. The rules for the DRC are -specified in the application resource file. The minimum spacing value -(in mils) is given by the _Settings.Bloat_ value. The default is 7 -mils. The minimum touching overlap (in mils) is given by the -_Settings.Shrink_ value. This value defaults to 5 mils. Check with your -fabrication process people to determine the values that are right for -you. - - If you want to turn off the highlighting produced by the DRC, -perform an undo (assuming no other changes have been made). To restore -the highlighting, use redo. The redo will restore the highlighting -quickly without re-running the DRC checker. - - -File: pcb.info, Node: Trace Optimizer, Next: Searching for elements, Prev: Design Rule Checking, Up: Getting Started - -3.14 Trace Optimizer -==================== - -PCB includes a flexible trace optimizer. The trace optimizer can be run -after auto routing or hand routing to clean up the traces. - -Auto-Optimize - Performs debumpify, unjaggy, orthopull, vianudge, and viatrim, in - that order, repeating until no further optimizations are performed. - -Debumpify - Looks for U shaped traces that can be shortened or eliminated. - -Unjaggy - Looks for corners which could be flipped to eliminate one or more - corners (i.e. jaggy lines become simpler). - -Vianudge - Looks for vias where all traces leave in the same direction. Tries - to move via in that direction to eliminate one of the traces (and - thus a corner). - -Viatrim - Looks for traces that go from via to via, where moving that trace - to a different layer eliminates one or both vias. - -Orthopull - Looks for chains of traces all going in one direction, with more - traces orthogonal on one side than on the other. Moves the chain - in that direction, causing a net reduction in trace length, - possibly eliminating traces and/or corners. - -SimpleOpts - Removing unneeded vias, replacing two or more trace segments in a - row with a single segment. This is usually performed automatically - after other optimizations. - -Miter - Replaces 90 degree corners with a pair of 45 degree corners, to - reduce RF losses and trace length. - - - -File: pcb.info, Node: Searching for elements, Next: Measuring distances, Prev: Trace Optimizer, Up: Getting Started - -3.15 Searching for elements -=========================== - -To locate text or a specific element or grouping of similar elements -choose `Select by name' from the Select menu, then choose the -appropriate subsection. At the bottom of the screen the prompt -_pattern:_ appears. Enter the text or *note Regular Expressions:: of -the text to be found. Found text will be highlighted. - - -File: pcb.info, Node: Measuring distances, Next: Vendor drill mapping, Prev: Searching for elements, Up: Getting Started - -3.16 Measuring distances -======================== - -To measure distances, for example the pin-to-pin pitch of a part to -validate a footprint, place the cursor at the starting measurement -point, then press _!Ctrlm_. This marks the current location with -a _X_. The _X_ mark is now the zero point origin for the relative -cursor position display. The cursor display shows both absolute -position and position relative to the mark as the mouse is moved away -from the mark. If a mark is already present, the mark is removed and -the cursor display stops displaying relative cursor coordinates. - - -File: pcb.info, Node: Vendor drill mapping, Next: Connection Lists, Prev: Measuring distances, Up: Getting Started - -3.17 Vendor Drill Mapping -========================= - -`Pcb' includes support for mapping drill holes to a specified set of -sizes used by a particular vendor. Many PCB manufacturers have a -prefered set of drill sizes and charge extra when others are used. The -mapping can be performed on an existing design and can also be enabled -to automatically map drill holes as vias and elements are instantiated. - - The first step in using the vendor drill mapping feature is to create -a resource file describing the capabilities of your vendor. The file -format is the resource file format described in *note Resource Syntax::. -A complete example is given below. - - # Optional name of the vendor - vendor = "Vendor Name" - - # units for dimensions in this file. - # Allowed values: mil/inch/mm - units = mil - - # drill table - drillmap = { - # When mapping drill sizes, select the nearest size - # or always round up. Allowed values: up/nearest - round = up - - # The list of vendor drill sizes. Units are as specified - # above. - 20 - 28 - 35 - 38 - 42 - 52 - 59.5 - 86 - 125 - 152 - - # optional section for skipping mapping of certain elements - # based on reference designator, value, or description - # this is useful for critical parts where you may not - # want to change the drill size. Note that the strings - # are regular expressions. - skips = { - {refdes "^J3$"} # Skip J3. - {refdes "J3"} # Skip anything with J3 as part of the refdes. - {refdes "^U[1-3]$" "^X.*"} # Skip U1, U2, U3, and anything starting with X. - {value "^JOHNSTECH_.*"} # Skip all Johnstech footprints based on the value of a part. - {descr "^AMP_MICTOR_767054_1$"} # Skip based on the description. - } - } - - # If specified, this section will change the current DRC - # settings for the design. Units are as specified above. - drc = { - copper_space = 7 - copper_width = 7 - silk_width = 10 - copper_overlap = 4 - } - - The vendor resource is loaded using the _LoadVendor_ action. This -is invoked by entering: - :LoadVendor(vendorfile) - from within `Pcb'. Substitute the file name of your vendor resource -file for `vendorfile'. This action will load the vendor resource and -modify all the drill holes in the design as well as the default via -hole size for the various routing styles. - - Once a vendor drill map has been loaded, new vias and elements will -automatically have their drill hole sizes mapped to the vendor drill -table. Automatic drill mapping may be disabled under the "Settings" -menu. To re-apply an already loaded vendor drill table to a design, -choose "Apply vendor drill mapping" from the "Connects" menu. - - See *note Actions:: for a complete description of the actions -associated with vendor drill mapping. - - Note that the expressions used in the `skips' section are regular -expressions. See *note Regular Expressions:: for an introduction to -regular expressions. - - -File: pcb.info, Node: Autorouter, Next: User Commands, Prev: Getting Started, Up: Top - -4 Autorouter -************ - -`Pcb' includes an autorouter which can greatly speed up the layout of a -circuit board. The autorouter is a rectangle-expansion type of -autorouter based on "A Method for Gridless Routing of Printed Circuit -Boards" by A. C. Finch, K. J. Mackenzie, G. J. Balsdon, and G. Symonds -in the 1985 Proceedings of the 22nd ACM/IEEE Design Automation -Conference. This reference is available from the ACM Digital Library at -`http://www.acm.org/dl' for those with institutional or personal access -to it. It's also available from your local engineering library. The -reference paper is not needed for using the autorouter. - - Before using the autorouter, all elements need to be loaded into the -layout and placed and the connectivity netlist must be loaded. Once -the elements have been placed and the netlist loaded, the following -steps will autoroute your design. - - 1. Turn off visibility of any layers that you don't want the router - to use. - - 2. Turn of via visibility if you don't want the router to use any new - vias. - - 3. Use only plain rectangles for power/ground planes that you want - the router to use [use the rectangle tool!] - - 4. Make at least one connection from any plane you want the router to - use to the net you want it to connect to. - - 5. Draw continuous lines (on all routing layers) to outline keep-out - zones if desired. - - 6. Use routing styles in the netlist to have per-net routing styles. - Note that the routing style will be used for an entire net. This - means if you have a wide metal setting for a power net you will - need to manually route breakouts from any fine pitch parts on - their power pins because the router will not be able to change - to a narrow trace to connect to the part. - - 7. Set the current routing style to whatever you'd like the router to - use for any nets not having a defined route style in the netlist. - - 8. Disable any nets that you don't want the autorouter to route - (double-click them in the netlist window to add/remove the *) - - NOTE: If you will be manually routing these later not using - planes, it is usually better to let the autorouter route them then - rip them up yourself afterwards. If you plan to use a - ground/power plane manually, consider making it from one or - more pure rectangles and letting the autorouter have a go at it. - - 9. Create a fresh rat's nest. ('E' the 'W') - - 10. Select "show autorouter trials" in the settings menu if you want - to watch what's happening - - 11. Choose "autoroute all rats" in the connection menu. - - 12. If you really want to muck with the router because you have a - special design, e.g. all through-hole components you can mess with - layer directional costs by editing the autoroute.c source file - and changing the directional costs in lines 929-940. and try - again. Even more mucking about with costs is possible in lines - 4540-4569, but it's probably not such a good idea unless you - really just want to experiment. - - - After the design has been autorouted, you may want to run the trace -optimizer. See section *note Trace Optimizer:: for more information on -the trace optimizer. - - -File: pcb.info, Node: User Commands, Next: Command-Line Options, Prev: Autorouter, Up: Top - -5 User Commands -*************** - -The entering of user-commands is initiated by the action routine -_Command()_ (normally bound to the `(":")' character) which replaces -the bottom statusline with an input area or opens a separate command -window. It is finished by either _Return_ or _Escape_ to -confirm or to abort. These two key-bindings cannot be changed from the -resource file. The triggering event, normally a key press, is ignored. - - Commands can be entered in one of two styles, command entry syntax: -"_Command arg1 arg2_" or action script syntax "_Action1(arg1, arg2); -Action2(arg1, arg2);_". Quoting arguments works similar to bash -quoting: - - * A backslash (\) is the escape character. It preserves the literal - value of the next character that follows. To get a literal '\' use - "\\". - - * Enclosing characters in single quotes preserves the literal value - of each character within the quotes. A single quote may not occur - between single quotes, even when preceded by a blackslash. - - * Enclosing characters in double quotes preserves the literal value - of all characters within the quotes, with the exception of '\' - which maintains its special meaning as an escape character. - - There are simple _usage_ dialogs for each command and one for the -complete set of commands. - -`l [filename]' - Loads a new datafile (layout) and, if confirmed, overwrites any - existing unsaved data. The filename and the searchpath - (_filePath_) are passed to the command defined by _fileCommand_. - If no filename is specified a file select box will popup. - -`le [filename]' - Loads an element description into the paste buffer. The filename - and the searchpath (_elementPath_) are passed to the command - defined by _elementCommand_. If no filename is specified a file - select box will popup. - -`m [filename]' - Loads an layout file into the paste buffer. The filename and the - searchpath (_filePath_) are passed to the command defined by - _fileCommand_. If no filename is specified a file select box will - popup. - -`q[!]' - Quits the program without saving any data (after confirmation). - q! doesn't ask for confirmation, it just quits. - -`s [filename]' - Data and the filename are passed to the command defined by the - resource _saveCommand_. It must read the layout data from _stdin_. - If no filename is entered, either the last one is used again or, - if it is not available, a file select box will pop up. - -`rn [filename]' - Reads in a netlist file. If no filename is given a file select - box will pop up. The file is read via the command defined by the - _RatCommand_ resource. The command must send its output to - _stdout_. - - Netlists are used for generating rat's nests (see *note Rats - Nest::) and for verifying the board layout (which is also - accomplished by the _Ratsnest_ command). - -`w[q] [filename]' - These commands have been added for the convenience of `vi' users - and have the same functionality as _s_ combined with _q_. - -`actionCommand' - Causes the actionCommand to be executed. This allows you to - initiate actions for which no bindings exist in the resource file. - It can be used to initiate any action with whatever arguments you - enter. This makes it possible to do things that otherwise would - be extremely tedious. For example, to change the drilling hole - diameter of all vias in the layout to 32 mils, you could select - everything using the selection menu, then type - "_:ChangeDrillSize(SelectedVias, 32)_". (This will only work - provided the via's diameter is sufficiently large to accommodate a - 32 mil hole). Another example might be to set the grid to 1 mil - by typing "_:SetValue(Grid, 1)_". Note that some actions use the - current cursor location, so be sure to place the cursor where you - want before entering the command. This is one of my favorite new - features in 1.5 and can be a powerful tool. Study the *note - Actions:: section to see what actions are available. - - - -File: pcb.info, Node: Command-Line Options, Next: X11 Interface, Prev: User Commands, Up: Top - -6 Command-Line Options -********************** - -The synopsis of the pcb command is: - - `pcb [OPTION ...] [LAYOUT-FILE.pcb]' to start the application in GUI -mode, - -or - - `pcb [-h | -V | --copyright]' for a list of options, version, and -copyright, - -or - - `pcb -p [OPTION ...] [LAYOUT-FILE.pcb]' to print a layout, - -or - - `pcb -x HID [OPTION ...] [LAYOUT-FILE.pcb]' to export. - -Possible values for the parameter `HID' are: -`bom' - Export a bill of materials - -`gcode' - Export to G-Code - -`gerber' - Export RS-274X (Gerber) - -`nelma' - Numerical analysis package export - -`png' - export GIF/JPEG/PNG - -`ps' - export postscript - -`eps' - export encapsulated postscript - -There are several resources which may be set or reset in addition to the -standard toolkit command-line options. For a complete list refer to -*note Resources::. - -* Menu: - -* General Options:: -* General GUI Options:: -* GTK+ GUI Options:: -* lesstif GUI Options:: -* Colors:: -* Layer Names:: -* Paths:: -* Sizes:: -* Commands:: -* DRC Options:: -* BOM Creation:: -* Gerber Export:: -* Postscript Export:: -* Encapsulated Postscript Export:: -* PNG Options:: -* lpr Printing Options:: -* nelma Options:: - - -File: pcb.info, Node: General Options, Next: General GUI Options, Up: Command-Line Options - -6.1 General Options -=================== - -`--help' - Show help on command line options. - -`--version' - Show version. - -`--verbose' - Be verbose on stdout. - -`--copyright' - Show copyright. - -`--show-defaults' - Show option defaults. - -`--show-actions' - Show available actions and exit. - -`--dump-actions' - Dump actions (for documentation). - -`--grid-units-mm ' - Set default grid units. Can be mm or mil. Defaults to mil. - -`--backup-interval' - Time between automatic backups in seconds. Set to `0' to disable. - The default value is `60'. - -`--groups ' - Layer group string. Defaults to `"1,c:2:3:4:5:6,s:7:8"'. - -`--route-styles ' - A string that defines the route styles. Defaults to - `"Signal,1000,3600,2000,1000:Power,2500,6000,3500,1000 - :Fat,4000,6000,3500,1000:Skinny,600,2402,1181,600"' - -`--element-path ' - A colon separated list of directories or commands (starts with - '|'). The path is passed to the program specified in - `--element-command'. - -`--action-script ' - If set, this file is executed at startup. - -`--action-string ' - If set, this string of actions is executed at startup. - -`--fab-author ' - Name of author to be put in the Gerber files. - -`--layer-stack ' - Initial layer stackup, for setting up an export. A comma separated - list of layer names, layer numbers and layer groups. - -`--save-last-command' - If set, the last user command is saved. - -`--save-in-tmp' - If set, all data which would otherwise be lost are saved in a - temporary file `/tmp/PCB.%i.save' . Sequence `%i' is replaced by - the process ID. - -`--reset-after-element' - If set, all found connections are reset before a new component is - scanned. - -`--ring-bell-finished' - Execute the bell command when all rats are routed. - - -File: pcb.info, Node: General GUI Options, Next: GTK+ GUI Options, Prev: General Options, Up: Command-Line Options - -6.2 General GUI Options -======================= - -`--pinout-offset-x ' - Horizontal offset of the pin number display. Defaults to `100mil'. - -`--pinout-offset-y ' - Vertical offset of the pin number display. Defaults to `100mil'. - -`--pinout-text-offset-x ' - Horizontal offset of the pin name display. Defaults to `800mil'. - -`--pinout-text-offset-y ' - Vertical offset of the pin name display. Defaults to `-100mil'. - -`--draw-grid' - If set, draw the grid at start-up. - -`--clear-line' - If set, new lines clear polygons. - -`--full-poly' - If set, new polygons are full ones. - -`--unique-names' - If set, you will not be permitted to change the name of an - component to match that of another component. - -`--snap-pin' - If set, pin centers and pad end points are treated as additional - grid points that the cursor can snap to. - -`--all-direction-lines' - Allow all directions, when drawing new lines. - -`--show-number' - Pinout shows number. - - -File: pcb.info, Node: GTK+ GUI Options, Next: lesstif GUI Options, Prev: General GUI Options, Up: Command-Line Options - -6.3 GTK+ GUI Options -==================== - -`--listen' - Listen for actions on stdin. - -`--bg-image ' - File name of an image to put into the background of the GUI - canvas. The image must be a color PPM image, in binary (not ASCII) - format. It can be any size, and will be automatically scaled to - fit the canvas. - -`--pcb-menu ' - Location of the `gpcb-menu.res' file which defines the menu for - the GTK+ GUI. - - -File: pcb.info, Node: lesstif GUI Options, Next: Colors, Prev: GTK+ GUI Options, Up: Command-Line Options - -6.4 lesstif GUI Options -======================= - -`--listen' - Listen for actions on stdin. - -`--bg-image ' - File name of an image to put into the background of the GUI - canvas. The image must be a color PPM image, in binary (not ASCII) - format. It can be any size, and will be automatically scaled to - fit the canvas. - -`--pcb-menu ' - Location of the `pcb-menu.res' file which defines the menu for the - lesstif GUI. - - -File: pcb.info, Node: Colors, Next: Layer Names, Prev: lesstif GUI Options, Up: Command-Line Options - -6.5 Colors -========== - -`--black-color ' - Color value for black. Default: `#000000' - -`--black-color ' - Color value for white. Default: `#ffffff' - -`--background-color ' - Background color of the canvas. Default: `#e5e5e5' - -`--crosshair-color ' - Color of the crosshair. Default: `#ff0000' - -`--cross-color ' - Color of the cross. Default: `#cdcd00' - -`--via-color ' - Color of vias. Default: `#7f7f7f' - -`--via-selected-color ' - Color of selected vias. Default: `#00ffff' - -`--pin-color ' - Color of pins. Default: `#4d4d4d' - -`--pin-selected-color ' - Color of selected pins. Default: `#00ffff' - -`--pin-name-color ' - Color of pin names and pin numbers. Default: `#ff0000' - -`--element-color ' - Color of components. Default: `#000000' - -`--rat-color ' - Color of ratlines. Default: `#b8860b' - -`--invisible-objects-color ' - Color of invisible objects. Default: `#cccccc' - -`--invisible-mark-color ' - Color of invisible marks. Default: `#cccccc' - -`--element-selected-color ' - Color of selected components. Default: `#00ffff' - -`--rat-selected-color ' - Color of selected rats. Default: `#00ffff' - -`--connected-color ' - Color to indicate connections. Default: `#00ff00' - -`--off-limit-color ' - Color of off-canvas area. Default: `#cccccc' - -`--grid-color ' - Color of the grid. Default: `#ff0000' - -`--layer-color- ' - Color of layer `', where `' is an integer from 1 to 16. - -`--layer-selected-color- ' - Color of layer `', when selected. `' is an integer from 1 to - 16. - -`--warn-color ' - Color of offending objects during DRC. Default value is `"#ff8000"' - -`--mask-color ' - Color of the mask layer. Default value is `"#ff0000"' - - -File: pcb.info, Node: Layer Names, Next: Paths, Prev: Colors, Up: Command-Line Options - -6.6 Layer Names -=============== - -`--layer-name-1 ' - Name of the 1st Layer. Default is `"top"'. - -`--layer-name-2 ' - Name of the 2nd Layer. Default is `"ground"'. - -`--layer-name-3 ' - Name of the 3nd Layer. Default is `"signal2"'. - -`--layer-name-4 ' - Name of the 4rd Layer. Default is `"signal3"'. - -`--layer-name-5 ' - Name of the 5rd Layer. Default is `"power"'. - -`--layer-name-6 ' - Name of the 6rd Layer. Default is `"bottom"'. - -`--layer-name-7 ' - Name of the 7rd Layer. Default is `"outline"'. - -`--layer-name-8 ' - Name of the 8rd Layer. Default is `"spare"'. - - -File: pcb.info, Node: Paths, Next: Sizes, Prev: Layer Names, Up: Command-Line Options - -6.7 Paths -========= - -`--lib-newlib ' - Top level directory for the newlib style library. - -`--lib-name ' - The default filename for the library. - -`--default-font ' - The name of the default font. - -`--file-path ' - A colon separated list of directories or commands (starts with - '|'). The path is passed to the program specified in - `--file-command' together with the selected filename. - -`--font-path ' - A colon separated list of directories to search the default font. - Defaults to the default library path. - -`--lib-path ' - A colon separated list of directories that will be passed to the - commands specified by `--element-command' and - `--element-contents-command'. - - -File: pcb.info, Node: Sizes, Next: Commands, Prev: Paths, Up: Command-Line Options - -6.8 Sizes -========= - -All parameters should be given with an unit. If no unit is given, 1/100 -mil (cmil) will be used. Write units without space to the number like -`3mm', not `3 mm'. Valid Units are: -`km' - Kilometer - -`m' - Meter - -`cm' - Centimeter - -`mm' - Millimeter - -`um' - Micrometer - -`nm' - Nanometer - -`in' - Inch (1in = 0.0254m) - -`mil' - Mil (1000mil = 1in) - -`cmil' - Centimil (1/100 mil) - -`--via-thickness ' - Default diameter of vias. Default value is `60mil'. - -`--via-drilling-hole ' - Default diameter of holes. Default value is `28mil'. - -`--line-thickness ' - Default thickness of new lines. Default value is `10mil'. - -`--rat-thickness ' - Thickness of rats. Values from 1 to 19 are fixed width in screen - pixels. Anything larger means PCB units (i.e. 100 means "1 mil"). - Default value is `10mil'. - -`--keepaway ' - Default minimum distance between a track and adjacent copper. - Default value is `10mil'. - -`--default-PCB-width ' - Default width of the canvas. Default value is `6000mil'. - -`--default-PCB-height ' - Default height of the canvas. Default value is `5000mil'. - -`--text-scale ' - Default text scale. This value is in percent. Default value is - `100'. - -`--alignment-distance ' - Specifies the distance between the board outline and alignment - targets. Default value is `2mil'. - -`--grid ' - Initial grid size. Default value is `10mil'. - -`--minimum polygon area ' - Minimum polygon area. - - -File: pcb.info, Node: Commands, Next: DRC Options, Prev: Sizes, Up: Command-Line Options - -6.9 Commands -============ - -pcb uses external commands for input output operations. These commands -can be configured at start-up to meet local requirements. The command -string may include special sequences `%f', `%p' or `%a'. These are -replaced when the command is called. The sequence `%f' is replaced by -the file name, `%p' gets the path and `%a' indicates a package name. -`--font-command ' - Command to load a font. - -`--file-command ' - Command to read a file. - -`--element-command ' - Command to read a footprint. - Defaults to `"M4PATH='%p';export M4PATH;echo 'include(%f)' | m4"' - -`--print-file ' - Command to print to a file. - -`--lib-command-dir ' - Path to the command that queries the library. - -`--lib-command ' - Command to query the library. - Defaults to `"QueryLibrary.sh '%p' '%f' %a"' - -`--lib-contents-command ' - Command to query the contents of the library. - Defaults to `"ListLibraryContents.sh %p %f"' or, on Windows - builds, an empty string (to disable this feature). - -`--save-command ' - Command to save to a file. - -`--rat-command ' - Command for reading a netlist. Sequence `%f' is replaced by the - netlist filename. - - -File: pcb.info, Node: DRC Options, Next: BOM Creation, Prev: Commands, Up: Command-Line Options - -6.10 DRC Options -================ - -All parameters should be given with an unit. If no unit is given, 1/100 -mil (cmil) will be used for backward compability. Valid units are given -in section *note Sizes::. -`--bloat ' - Minimum spacing. Default value is `10mil'. - -`--shrink ' - Minimum touching overlap. Default value is `10mil'. - -`--min-width ' - Minimum width of copper. Default value is `10mil'. - -`--min-silk ' - Minimum width of lines in silk. Default value is `10mil'. - -`--min-drill ' - Minimum diameter of holes. Default value is `15mil'. - -`--min-ring ' - Minimum width of annular ring. Default value is `10mil'. - - -File: pcb.info, Node: BOM Creation, Next: Gerber Export, Prev: DRC Options, Up: Command-Line Options - -6.11 BOM Creation -================= - -`--bomfile ' - Name of the BOM output file. - -`--xyfile ' - Name of the XY output file. - -`--xy-unit ' - Unit of XY dimensions. Defaults to mil. - - -File: pcb.info, Node: Gerber Export, Next: Postscript Export, Prev: BOM Creation, Up: Command-Line Options - -6.12 Gerber Export -================== - -`--gerberfile ' - Gerber output file prefix. Can include a path. - -`--all-layers' - Output contains all layers, even empty ones. - -`--verbose' - Print file names and aperture counts on stdout. - - -File: pcb.info, Node: Postscript Export, Next: Encapsulated Postscript Export, Prev: Gerber Export, Up: Command-Line Options - -6.13 Postscript Export -====================== - -`--psfile ' - Name of the postscript output file. Can contain a path. - -`--drill-helper' - Print a centering target in large drill holes. - -`--align-marks' - Print alignment marks on each sheet. This is meant to ease - alignment during exposure. - -`--outline' - Print the contents of the outline layer on each sheet. - -`--mirror' - Print mirror image. - -`--fill-page' - Scale output to make the board fit the page. - -`--auto-mirror' - Print mirror image of appropriate layers. - -`--ps-color' - Postscript output in color. - -`--ps-bloat ' - Amount to add to trace/pad/pin edges. - -`--ps-invert' - Draw objects as white-on-black. - -`--media ' - Size of the media, the postscript is fitted to. The parameter - `' can be any of the standard names for paper size: - `A0' to `A10', `B0' to `B10', `Letter', `11x17', `Ledger', - `Legal', `Executive', `A-Size', `B-size', `C-Size', `D-size', - `E-size', `US-Business_Card', `Intl-Business_Card'. - -`--psfade ' - Fade amount for assembly drawings (0.0=missing, 1.0=solid). - -`--scale ' - Scale value to compensate for printer sizing errors (1.0 = full - scale). - -`--multi-file' - Produce multiple files, one per page, instead of a single multi - page file. - -`--xcalib ' - Paper width. Used for x-Axis calibration. - -`--ycalib ' - Paper height. Used for y-Axis calibration. - -`--drill-copper' - Draw drill holes in pins / vias, instead of leaving solid copper. - -`--show-legend' - Print file name and scale on printout. - - -File: pcb.info, Node: Encapsulated Postscript Export, Next: PNG Options, Prev: Postscript Export, Up: Command-Line Options - -6.14 Encapsulated Postscript Export -=================================== - -`--eps-file ' - Name of the encapsulated postscript output file. Can contain a - path. - -`--eps-scale ' - Scale EPS output by the parameter `num'. - -`--as-shown' - Export layers as shown on screen. - -`--monochrome' - Convert output to monochrome. - -`--only-visible' - Limit the bounds of the EPS file to the visible items. - - -File: pcb.info, Node: PNG Options, Next: lpr Printing Options, Prev: Encapsulated Postscript Export, Up: Command-Line Options - -6.15 PNG Options -================ - -`--outfile ' - Name of the file to be exported to. Can contain a path. - -`--dpi' - Scale factor in pixels/inch. Set to 0 to scale to size specified - in the layout. - -`--x-max' - Width of the png image in pixels. No constraint, when set to 0. - -`--y-max' - Height of the png output in pixels. No constraint, when set to 0. - -`--xy-max' - Maximum width and height of the PNG output in pixels. No - constraint, when set to 0. - -`--as-shown' - Export layers as shown on screen. - -`--monochrome' - Convert output to monochrome. - -`--only-vivible' - Limit the bounds of the exported PNG image to the visible items. - -`--use-alpha' - Make the background and any holes transparent. - -`--format ' - File format to be exported. Parameter `' can be `PNG', - `GIF', or `JPEG'. - -`--png-bloat ' - Amount of extra thickness to add to traces, pads, or pin edges. - The parameter `' is a number, appended by a dimension - `mm', `mil', or `pix'. If no dimension is given, the default - dimension is 1/100 mil. - -`--photo-mode' - Export a photo realistic image of the layout. - -`--photo-flip-x' - In photo-realistic mode, export the reverse side of the layout. - Left-right flip. - -`--photo-flip-y' - In photo-realistic mode, export the reverse side of the layout. - Up-down flip. - - -File: pcb.info, Node: lpr Printing Options, Next: nelma Options, Prev: PNG Options, Up: Command-Line Options - -6.16 lpr Printing Options -========================= - -`--lprcommand ' - Command to use for printing. Defaults to `lpr'. This can be used - to produce PDF output with a virtual PDF printer. Example: - `--lprcommand "lp -d CUPS-PDF-Printer"'. -In addition, all *note Postscript Export:: options are valid. - - -File: pcb.info, Node: nelma Options, Prev: lpr Printing Options, Up: Command-Line Options - -6.17 nelma Options -================== - -`-- basename ' - File name prefix. - -`--dpi ' - Horizontal scale factor (grid points/inch). - -`--copper-height ' - Copper layer height (um). - -`--substrate-height ' - Substrate layer height (um). - -`--substrate-epsilon ' - Substrate relative epsilon. - - -File: pcb.info, Node: X11 Interface, Next: File Formats, Prev: Command-Line Options, Up: Top - -7 X11 Interface -*************** - -This chapter gives an overview about the additional `X11' resources -which are defined by `Pcb' as well as the defined action routines. - -* Menu: - -* Resources:: Non-standard `X11' application resources. -* Actions:: A list of available action routines. -* Translations:: A list of the default key translations (as shipped). - - -File: pcb.info, Node: Resources, Next: Actions, Up: X11 Interface - -7.1 Non-Standard X11 Application Resources -========================================== - -In addition to the toolkit resources, `Pcb' defines the following -resources: - -`absoluteGrid (boolean)' - Selects if either the grid is relative to the position where it - has changed last or absolute, the default, to the origin (0,0). - -`alignmentDistance (dimension)' - Specifies the distance between the boards outline to the alignment - targets. - -`allDirectionLines (boolean)' - Enables (default) or disables clipping of new lines to 45 degree - angles. - -`backgroundImage (string)' - If specified, this image will be drawn as the background for the - board. The purpose of this option is to allow you to use a scan - of an existing layout as a prototype for your new layout. To do - this, there are some limitations as to what this image must be. - The image must be a PPM binary image (magic number `P6'). It must - have a maximum pixel value of 255 or less (i.e. no 16-bit images). - It must represent the entire board, as it will be scaled to fit - the board dimensions exactly. Note that it may be scaled unevenly - if the image doesn't have the same aspect ratio of your board. - You must ensure that the image does not use more colors than are - available on your system (mostly this is for pseudo-color - displays, like old 8-bit displays). For best results, I suggest - the following procedure using The Gimp: Load your image (any - type). Image->Scale if needed. Image->Colors->Curves and for - each of Red, Green, and Blue channel move the lower left point up - to about the 3/4 line (value 192). This will make your image pale - so it doesn't interfere with the traces you'll be adding. - Image->Mode->Indexed and select, say, 32 colors with Normal F-S - dithering. File->Save As, file type by extension, use `.ppm' as - the extension. Select Raw formatting. - -`backupInterval (int)' - `Pcb' has an automatic backup feature which saves the current data - every n seconds. The default is _300_ seconds. A value of zero - disables the feature. The backup file is named - `/tmp/PCB.%i.backup' by default (this may have been changed at - compilation time via the `BACKUP_NAME' variable in - `globalconfig.h'). _%i_ is replaced by the process ID. See also, - the command-line option _-backup-interval_. - -`Bloat (dimension)' - Specifies the minimum spacing design rule in mils. - -`connectedColor (color)' - All pins, vias, lines and rectangles which are selected during a - connection search are drawn with this color. The default value is - determined by _XtDefaultForeground_. - -`cross hairColor (color)' - This color is used to draw the cross hair cursor. The color is a - result of a _XOR_ operation with the contents of the Layout area. - The result also depends on the default colormap of the `X11' - server because only the colormap index is used in the boolean - operation and `Pcb' doesn't create its own colormap. The default - setting is _XtDefaultForeground_. - -`elementColor (color)' -`elementSelectedColor (color)' - The elements package part is drawn in these colors, for normal and - selected mode, respectively, which both default to - _XtDefaultForeground_. - -`elementCommand (string)' - `Pcb' uses a user defined command to read element files. This - resources is used to set the command which is executed by the - users default shell. Two escape sequences are defined to pass the - selected filename (%f) and the current search path (%p). The - command must write the element data to its standard output. The - default value is - M4PATH="%p";export M4PATH;echo 'include(%f)' | m4 - Using the GNU version of `m4' is highly recommended. See also, - the command-line option _-element-command_. - -`elementPath (string)' - A colon separated list of directories or commands (starts with - '|'). The path is passed to the program specified in - _elementCommand_ together with the selected element name. A - specified command will be executed in order to create entries for - the fileselect box. It must write its results to _stdout_ one - entry per line. See also, the user-command _le[!]_. - -`fileCommand (string)' - The command is executed by the user's default shell whenever - existing layout files are loaded. Data is read from the command's - standard output. Two escape sequences may be specified to pass - the selected filename (%f) and the current search path (%p). The - default value is: - cat %f - See also, the command-line option _-file-command_. - -`filePath (string)' - A colon separated list of directories or commands (starts with - '|'). The path is passed to the program specified in - _fileCommand_ together with the selected filename. A specified - command will be executed in order to create entries for the - fileselect box. It must write its results to _stdout_ one entry - per line. See also, the user-command _l[!]_. - -`fontCommand (string)' - Loading new symbol sets also is handled by an external command. - You again may pass the selected filename and the current search - path by passing %f and %p in the command string. Data is read from - the commands standard output. This command defaults to - cat %f - See also, the command-line option _-font-command_. - -`fontFile (string)' - The default font for new layouts is read from this file which is - searched in the directories as defined by the resource _fontPath_. - Searching is only performed if the filename does not contain a - directory component. The default filename is `default_font'. - -`fontPath (string)' - This resource, a colon separated list of directories, defines the - searchpath for font files. See also, the resource _fontFile_. - -`grid (int)' - This resources defines the initial value of one cursor step. It - defaults to _100 mil_ and any changes are saved together with the - layout data. - -`gridColor (color)' - This color is used to draw the grid. The color is a result of a - _INVERT_ operation with the contents of the Layout area. The result - also depends on the default colormap of the `X11' server because - only the colormap index is used in the boolean operation and `Pcb' - doesn't create its own colormap. The default setting is - _XtDefaultForeground_. - -`invisibleObjectsColor (color)' - Elements located on the opposite side of the board are drawn in - this color. The default is _XtDefaultForeground_. - -`layerColor1..MAX_LAYER (color)' -`layerSelectedColor1..MAX_LAYER (color)' - These resources define the drawing colors of the different layers - in normal and selected state. All values are preset to - _XtDefaultForeground_. - -`layerGroups (string)' - The argument to this resource is a colon separated list of comma - separated layer numbers (1..MAX_LAYER). All layers within one - group are switched on/off together. The default setting is - _1:2:3:...:MAX_LAYER_ which means all layers are handled - separately. Grouping layers one to three looks like - _1,2,3:4:...:MAX_LAYER_ - -`layerName1..MAX_LAYER (string)' - The default name of the layers in a new layout are determined by - these resources. The defaults are empty strings. - -`libraryCommand (string)' - `Pcb' uses a command to read element data from libraries. The - resources is used to set the command which is executed by the users - default shell. Three escape sequences are defined to pass the - selected filename (%f), the current search path (%p) as well (%a) - as the three parameters _template_, _value_ and _package_ to the - command. It must write the element data to its standard output. - The default value is - NONE/share/pcb/oldlib/QueryLibrary.sh %p %f %a - -`libraryContentsCommand (string)' - Similar to _libraryCommand_, `Pcb' uses the command specified by - this resource to list the contents of a library. - NONE/share/pcb/oldlib/ListLibraryContents.sh %p %f - is the default. - -`libraryFilename (string)' - The resource specifies the name of the library. The default value - is _pcblib_ unless changed at compile time with the - `LIBRARYFILENAME' variable in `globalconfig.h'. - -`libraryPath (string)' - A colon separated list of directories that will be passed to the - commands specified by _elementCommand_ and - _elementContentsCommand_. - -`lineThickness (dimension)' - The value, in the range [1..250] (the range may be changed at - compile time with the `MIN_LINESIZE' and `MAX_LINESIZE' variables - in `globalconfig.h'), defines the initial thickness of new lines. - The value is preset to _ten mil_. - -`media ( | x+-+-)' - The default (user defined) media of the `PostScript' device. - Predefined values are _a3_, _a4_, _a5_, _letter_, _tabloit_, - _ledger_, _legal_, and _executive_. The second way is to specify - the medias width, height and margins in mil. The resource - defaults to _a4_ size unless changed at compile time with the - `DEFAULT_MEDIASIZE' variable in `globalconfig.h'. - -`offLimitColor (color)' - The area outside the current maximum settings for width and height - is drawn with this color. The default value is determined by - _XtDefaultBackground_. - -`pinColor (color)' -`pinSelectedColor(color)' - This resource defines the drawing color of pins and pads in both - states. The values are preset to _XtDefaultForeground_. - -`pinoutFont (string)' - This fonts are used to display pin names. There is one font for - each zoom value. The values are preset to _XtdefaultFont_. - -`pinoutNameLength (int)' - This resource limits the number of characters which are displayed - for pin names in the pinout window. By default the string length - is limited to _eight_ characters per name. - -`pinoutOffsetX (int)' -`pinoutOffsetY (int)' - These resources determine the offset in _mil_ of the circuit from - the upper left corner of the window when displaying pinout - information. Both default to _100 mil_. - -`pinoutTextOffsetX (int)' -`pinoutTextOffsetY (int)' - The resources determine the distance in mil between the drilling - hole of a pin to the location where its name is displayed in the - pinout window. They default to _X:50_ and _Y:0_. - -`pinoutZoom (int)' - Sets the zoom factor for the pinout window according to the - formula: scale = 1:(2 power value). Its default value is _two_ - which results in a _1:4_ scale. - -`printCommand (string)' - Default file for printouts. If the name starts with a '|' the - output is piped through the command. A %f is replaced by the - current filename. There is no default file or command. - -`raiseLogWindow (boolean)' - The log window will be raised when new messages arrive if this - resource is set _true_, the default. - -`ratCommand (string)' - Default command for reading a netlist. A %f is replaced by the - netlist filename. Its default value is "_cat %f_". - -`ratPath (string)' - Default path to look for netlist files. It's default value is "." - -`resetAfterElement (boolean)' - If set to _true_, all found connections will be reset before a new - element is scanned. This will produce long lists when scanning the - whole layout for connections. The resource is set to _false_ by - default. The feature is only used while looking up connections of - all elements. - -`ringBellWhenFinished (boolean)' - Whether to ring the bell (the default) when a possibly lengthy - operation has finished or not. See also, the command-line option - _-ring-bell-finished_. - -`routeStyle (string)' - Default values for the menu of routing styles (seen in the sizes - menu). The string is a comma separated list of name, line - thickness, via diameter, and via drill size. e.g. - "Fat,50,100,40:Skinny,8,35,20:75Ohm,110,110,20" See also, the - command-line option _-route-styles_ and _Sizes Menu_ - -`rubberBandMode (boolean)' - Whether rubberband move and rotate (attached lines stretch like - rubberbands) is enabled (the default). - -`saveCommand (string)' - This command is used to save data to a layout file. The filename - may be indicated by placing `%f' in the string. It must read the - data from its standard input. The default command is: - cat - > %f - See also, the command-line option _-save-command_. - -`saveInTMP (boolean)' - Enabling this resource will save all data which would otherwise be - lost in a temporary file `/tmp/PCB.%i.save'. The file name may be - changed at compile time with the `EMERGENCY_NAME' variable in - `globalconfig.h'. . _%i_ is replaced by the process ID. As an - example, loading a new layout when the old one hasn't been saved - would use this resource. See also, the command-line option - _-save-in-tmp_. - -`saveLastCommand (boolean)' - Enables the saving of the last entered user command. The option is - _disabled_ by default. See also, the command-line option - _-save-last-command_. - -`Shrink (dimension)' - Specifies the minimum overlap (touching) design rule in mils. - -`size (x)' - Defines the width and height of a new layout. The default is - _7000x5000_ unless changed at compile time with the `DEFAULT_SIZE' - variable in `globalconfig.h'. - -`stipllePolygons (boolean)' - Determines whether to display polygons on the screen with a - stippled pattern. Stippling can create some amount of - transparency so that you can still (to some extent) see layers - beneath polygons. It defaults to False. - -`textScale (dimension)' - The font scaling in percent is defined by this resource. The - default is _100_ percent. - -`useLogWindow (boolean)' - Several subroutines send messages to the user if an error occurs. - This resource determines if they appear inside the log window or - as a separate dialog box. See also, the resource _raiseLogWindow_ - and the command line option _-loggeometry_. The default value is - _true_. - -`viaColor (color)' - -`viaSelectedColor (color)' - This resource defines the drawing color of vias in both states. - The values are preset to _XtDefaultForeground_. - -`viaThickness (dimension)' -`viaDrillingHole (dimension)' - The initial thickness and drilling hole of new vias. The values - must be in the range [30..400] (the range may be changed at compile - time with the `MIN_PINORVIASIZE' and `MAX_PINEORVIASIZE' variables - in `globalconfig.h'), with at least 20 mil of copper. The default - thickness is _40 mil_ and the default drilling hole is _20 mil_. - -`volume (int)' - The value is passed to `XBell()' which sets the volume of the `X' - speaker. The value lies in the range -100..100 and it defaults to - the maximum volume of _100_. - -`warnColor (color)' - This resources defines the color to be used for drawing pins and - pads when a warning has been issued about them. - -`zoom (int)' - The initial value for output scaling is set according to the - following formula: scale = 1:(2 power value). It defaults to - _three_ which results in an output scale of _1:8_. - - - Refer also to *note Command-Line Options::. - - -File: pcb.info, Node: Actions, Next: Translations, Prev: Resources, Up: X11 Interface - -7.2 Actions -=========== - -All user accessible commands may be bound to almost any `X' event. -Almost no default binding for commands is done in the binaries, so it -is vital for the application that at least a system-wide application -resource file exists. This file normally resides in the `share/pcb' -directory and is called `Pcb'. The bindings to which the manual refers -to are the ones as defined by the shipped resource file. Besides -binding an action to an X11 event, you can also execute any action -command using a ":" command (see *note User Commands::). - - Take special care about translations related to the functions keys -and the pointer buttons because most of the window managers use them -too. Change the file according to your hardware/software environment. -You may have to replace all occurances of _baseTranslations_ to -_translations_ if you use a `X11R4' server. - - Passing _Object_ as an argument to an action routine causes the -object at the cursor location to be changed, removed or whatever. If -more than one object is located at the cross hair position the smallest -type is used. If there are two of the same type the newer one is taken. -_SelectedObjects_ will handle all selected and visible objects. - -`AddRats(AllRats|SelectedRats)' - Adds rat-lines to the layout using the loaded netlist file (see - the _:rn_, *note User Commands::.). Rat lines are added on the - active layer using the current line thickness shown in the status - line. Only missing connectivity is added by the AddRats command - so if, for example, the layout is complete nothing will be added. - Rat lines may be drawn different to other lines on the screen to - make them easier to identify since they cannot appear in a - completed layout. The rat-lines are added in the minimum length - straight-line tree pattern (always ending on pins or pads) that - satisfies the missing connectivity in the circuit. If a SMD pad - is unreachable on the active layer, a warning will be issued about - it and the rat-line to that pad will not be generated. If - connections exist on the board which are not listed in the netlist - while AllRats are being added, warning messages will be issued and - the affected pins and pads will be drawn in a special _warnColor_ - until the next _Notify()_ event. If the entire layout agrees - completely with the net-list a message informs you that the layout - is complete and no rat-lines are added (since none are needed). - If _SelectedRats_ is passed as the argument, only those missing - connections that might connect among the selected pins and pads - are drawn. Default: - Nonew: AddRats(AllRats) - !Shiftw: AddRats(SelectedRats) - Noneo: DeleteRats(AllRats) AddRats(AllRats) - !Shifto: DeleteRats(SelectedRats) AddRats(SelectedRats) - -`ApplyVendor()' - Applies an already loaded vendor drill map to the design. - ApplyVendor() - -`Atomic(Save|Restore|Block|Close)' - Controls the undo grouping of sequences of actions. Before the - first action in a group, Atomic(Save) should be issued. After - each action that might be undoable, Atomic(Restore) should be - issued. Atomic(Block) concludes and save the undo grouping if - there was anything in the group to undo. Atomic(Close) concludes - and save the undo grouping even if nothing was actually done. - Thus it might produce an "empty" undo. This can be useful when - you want to use undo in a group of actions. - -`Bell([-100..100])' - Rings the bell of your display. If no value is passed the setting - of the resource _volume_ will be used. - -`ChangeClearSize(Object, value[, unit])' -`ChangeClearSize(SelectedPins|SelectedVias, value[, unit])' - The effect of this action depends on if the soldermask display is - presently turned on or off. If soldermask is displayed, then the - soldermask relief size will be changed. If soldermask display is - turned off, then the clearance to polygons will be changed. - _unit_ is "mil" or "mm". If not specified the units will default - to the internal unit of 0.01 mil. - !Mod1k: ChangeClearSize(Object, +2, mil) - !Mod1 Shiftk: ChangeClearSize(Object, -2, mil) - -`ChangeDrillSize(Object, value[, unit])' -`ChangeDrillSize(SelectedPins|SelectedVias, value[, unit])' - This action routine changes the drilling hole of pins and vias. - If _value_ starts with + or -, then it adds (or subtracts) _value_ - from the current hole diameter, otherwise it sets the diameter to - the value. _unit_ is "mil" or "mm". If not specified the units - will default to the internal unit of 0.01 mil. Default: - !Mod1s: Change2ndSize(Object, +5, mil) - !Mod1 Shifts: Change2ndSize(Object, -5, mil) - -`ChangeFlag(Object|SelectElements|SelectedPins|SelectedVias|Selected,thermal|octagon|square,0|1)' - Sets/clears the indicated flag. This adds/removes thermals, - adds/removes the flag which indicates a pin/pad should be square, - or adds/removes the flag which indicates a pin/pad should be - octagonal. - :ChangeFlag(SelectedVias,thermal,1) - :ChangeFlag(SelectedPads,square,0) - -`ChangeHole(Object|SelectedVias)' - This action routine converts a via to and from a hole. A hole is - a via that has no copper annulus. The drill size for the via - determines the hole diameter. - !Ctrlh: ChangeHole(Object) - -`ChangeName(Object)' -`ChangeName(Layer|Layout)' - Changes the name of the visible object at the cursor location. A - text object doesn't have a name therefore the text string itself - is changed. The element name currently used for display is always - the one changed with this command. See - _Display(Description|NameOnPCB|Value)_ for details. Passing - _Layer_ changes the current layers name. Default: - Nonen: ChangeName(Object) - -`ChangeOctagon(Object|SelectElements|SelectedPins|SelectedVias|Selected)' - Toggles what shape the affected pin(s) or via(s) will be drawn - when they are not square. The shape will either be round or - octagonal. Default: - !Ctrlo: ChangeOctagon(Object) - -`ChangePinName(ElementName, PinNumber, PinName)' - Changes the name for a specified pin or pad number on a specified - element. This action is typically used to forward annotate - pin/pad names from a schematic to the layout. - ChangePinName(U1, 14, VDD) - -`ChangeSize(Object, value[, unit])' -`ChangeSize(SelectedLines|SelectedPins|SelectedVias, value[, unit])' -`ChangeSize(SelectedPads|SelectedTexts|SelectedNames, value[, unit])' -`ChangeSize(SelectedElements, value[, unit])' - To change the size of an object you have to bind these action to - some `X' event (or use :ChangeSize(...)). If _value_ begins with - a + or - then the value will be added (or subtracted) from the - current size, otherwise the size is set equal to _value_. Range - checking is done to insure that none of the maximum/minimums of - any size are violated. If _Object_ is passed then a single object - at the cursor location is changed. If any of the _Selected_ - arguments are passed then all selected and visible objects of that - type are changed. If the type being modified is an element, then - the thickness of the silkscreen lines defining the element is - changed. _unit_ is "mil" or "mm". If not specified the units - will default to the internal unit of 0.01 mil. Default: - Nones: ChangeSize(Object, +5) - !Shifts: ChangeSize(Object, -5) - -`ChangeSquare(Object|SelectedElements|SelectedPins)' - Toggles the setting of the square flag. The flag is used to - identify a certain pin, normally the first one, of circuits. It is - also used to make SMD pads have square ends. - Noneq: ChangeSquare(Object) - -`ClrFlag(Object|SelectElements|SelectedPins|SelectedVias|Selected,thermal|octagon|square)' - Clears the indicated flag. This removes thermals, removes the flag - which indicates a pin/pad should be square, or removes the flag - which indicates a pin/pad should be octagonal. - :ClrFlag(SelectedVias,thermal) - -`Command()' - Calling _Command()_ pops up an input line at the bottom of the - window which allows you to enter commands. Including all action - commands! The dialog ends when _NoneReturn_ to confirm or - _NoneEscape_ to abort is entered. Default: - colon: Command() - -`Connection(Find)' -`Connection(ResetFoundLinesAndRectangles|ResetPinsViasAndPads|Reset)' - The _Connection()_ action is used to mark all connections from one - pin, line or via to others. The _ResetFoundLinesAndRectangles, - ResetFoundPinsAndVias_ and _Reset_ arguments may be used to reset - all marked lines and rectangles, vias and pins or all of them. The - search starts with the pin or via at the cursor position. All - found objects are drawn with the color defined by the resource - _connectedColor_. See also, - _Display(Description|NameOnPCB|Value)_. Default: - !Shiftc: Connection(Reset) - Nonef: Connection(Find) - !Shiftf: Connection(Reset) - -`DeleteRats(AllRats|SelectedRats)' - This routine deletes either all rat-lines in the layout, or only - the selected and visible ones. Non-rat-lines and other layout - objects are unaffected. Default: - Nonee: DeleteRats(AllRats) - !Shifte: DeleteRats(SelectedRats) - -`DisableVendor()' - Disables automatic drill size mapping to the loaded vendor drill - table. - DisableVendor() - -`DisperseElements(All|Selected)' - Disperses either all elements or only the selected elements in the - layout. This action should be used at the start of a design to - spread out all footprints before any placement or routing is done. - DisperseElements(All) - -`Display(Description|NameOnPCB|Value)' -`Display(Toggle45Degree|CycleClip)' -`Display(Grid|ToggleGrid)' -`Display(ToggleRubberBandMode)' -`Display(Center|ClearAndRedraw|Redraw)' -`Display(Pinout|PinOrPadName)' - This action routines handles some output related settings. It is - used to center the display around the cursor location and to - redraw the output area optionally after clearing the window. - Centering is done with respect to the _grid_ setting. Displaying - the grid itself may be switched on and off by _Grid_ but only if - the distance between two pixels exceeds 4 pixels. `Pcb' is able - to handle several labels of an element. One of them is a - description of the functionality (eg resistor), the second should - be a unique identifier (R1) whereas the last one is a value (100k). - The _Display()_ action selects which of the names is displayed. - It also controls which name will be affected by the _ChangeName_ - command. If _ToggleGrid_ is passed, `Pcb' changes between relative - ('rel' in the statusline) and absolute grid (an 'abs' in the - statusline). Relative grid means the pointer position when the - command is issued is used as the grid origin; while (0,0) is used - in the absolute grid case. Passing _Pinout_ displays the pinout - of the element at the current cursor location whereas - _PinOrPadName_ toggles displaying of the pins or pads name under - the cursor. If none of them matches but the cursor is inside of an - element, the flags is toggled for all of its pins and pads. For - details about rubberbands see also the details about _Mode_. - Default: - Nonec: Display(Center) - Noned: Display(PinOrPadName) - !Shiftd: Display(Pinout) - Noner: Display(ClearAndRedraw) - None.: Display(Toggle45Degree) - None/: Display(CycleClip) - -`DRC()' - Initiates design rule checking of the entire layout. Must be - repeated until no errors are found. - -`ExecuteFile(filename)' - Executes the PCB actions contained in the specified file. This - can be used to automate a complex sequence of operations. - :ExecuteFile(custom.cmd) - The command file contains a list of PCB actions. Blank lines are - ignored and lines starting with a # are treated as comment lines. - For example - # This is a comment line - Display(Grid) - SetValue(Zoom,2) - DRC() - -`EditLayerGroups()' - Pops up a dialog box to edit the layergroup setting. The function - is also available from the _Objects_ menu. There are no defaults. - -`EnableVendor()' - Enables automatic drill size mapping to the loaded vendor drill - table. - EnableVendor() - -`Load(ElementToBuffer|Layout|LayoutToBuffer|Nelist)' - This routine pops up a fileselect box to load layout, element data, - or netlist. The passed filename for layout data is saved and may - be reused. _ElementToBuffer_ and _LayoutToBuffer_ load the data - into the current buffer. There are no defaults. - -`LoadVendor(vendorfile)' - Loads the specified vendor resource file. - LoadVendor(myvendor.res) - -`MarkCrosshair()' - This routine marks the current cursor location with an X, and then - the cursor display shows both absolute position and position - relative to the mark. If a mark is already present, this routine - removes it and stops displaying relative cursor coordinates. - Defaults: - !Ctrlm: MarkCrosshair() - -`Mode(Copy|InsertPoint|Line|Move|None|PasteBuffer|Polygon|Thermal)' -`Mode(Remove|Rectangle|RubberbandMove|Text|Via)' -`Mode(Cycle)' -`Mode(Notify)' -`Mode(Save|Restore)' - Switches to a new mode of operation. The active mode is displayed - by a thick line around the matching mode selector button. Most of - the functionality of `Pcb' is implemented by selecting a mode and - calling _Mode(Notify)_. The arguments _Line_, _Polygon_, - _Rectangle_, _Text_ and _Via_ are used to create the appropriate - object whenever _Mode(Notify)_ is called. Some of them, such as - _Polygon_, need more than one call for one object to be created. - _InsertPoint_ adds points to existing polygons or lines. _Save_ - and _Restore_ are used to temporarily save the mode, switch to - another one, call _Mode(Notify)_ and restore the saved one. Have a - look at the application resource file for examples. _Copy_ and - _Move_ modes are used to change an object's location and, - optionally, to create a new one. The first call of _Mode(Notify)_ - attaches the object at the pointer location to the cross hair - whereas the second one drops it to the layout. The _rubberband_ - version of move performs the move while overriding the current - rubberband mode. Passing _PasteBuffer_ attaches the contents of - the currently selected buffer to the cross hair. Each call to - _Mode(Notify)_ pastes this contents to the layout. _Mode(Cycle)_ - cycles through the modes available in the mode-button pallet. - _Mode(None)_ switches all modes off. Default: - Escape: Mode(None) - space: Mode(Cycle) - NoneBackSpace: Mode(Save) Mode(Remove) Mode(Notify) Mode(Restore) - NoneDelete: Mode(Save) Mode(Remove) Mode(Notify) Mode(Restore) - NoneF1: Mode(Via) - NoneF2: Mode(Line) - NoneF3: Mode(PasteBuffer) - NoneF4: Mode(Rectangle) - NoneF5: Mode(Text) - NoneF6: Mode(Polygon) - NoneF7: Mode(Thermal) - NoneF8: Mode(Arc) - NoneInsert: Mode(InsertPoint) - None[: Mode(Save) Mode(Move) Mode(Notify) - None]: Mode(Notify) Mode(Restore) - None: Mode(Notify) - !Shift Ctrl: Mode(Save) Mode(Remove) Mode(Notify) Mode(Restore) - None: Mode(Save) Mode(Move) Mode(Notify) - None: Mode(Notify) Mode(Restore) - !Mod1: Mode(Save) Mode(Copy) Mode(Notify) - !Mod1: Mode(Notify) Mode(Restore) - Shift BTNMOD: Mode(Save) Mode(RubberbandMove) Mode(Notify) - -`MovePointer(delta_x, delta_y)' - With this function it is possible to move the cross hair cursor by - using the cursor keys. The `X' server's pointer follows because - the necessary events are generated by `Pcb'. All movements are - performed with respect to the currently set grid value. Default: - NoneUp: MovePointer(0, -1) - !ShiftUp: MovePointer(0, -10) - NoneDown: MovePointer(0, 1) - !ShiftDown: MovePointer(0, 10) - NoneRight: MovePointer(1, 0) - !ShiftRight: MovePointer(10, 0) - NoneLeft: MovePointer(-1, 0) - !ShiftLeft: MovePointer(-10, 0) - -`MoveToCurrentLayer(Object|SelectedObjects)' - The function moves a single object at the cross hair location or - all selected objects to the current layer. Elements are not - movable by this function. They have to be deleted and replaced on - the other side. If a line segment is moved and the movement would - result in a loss of connectivity to another segment then via(s) - are automatically added to maintain the connectivity. - Nonem: MoveToCurrentLayer(Object) - !Shiftm: MoveToCurrentLayer(SelectedObjects) - -`New()' - Clear the current layout and starts a new one after entering its - name. Refer to the resource _backup_ for more information. No - defaults. - -`PasteBuffer(AddSelected|Clear|1..5)' -`PasteBuffer(Rotate, 1..3)' -`PasteBuffer(Convert)' - This action routine controls and selects the pastebuffer as well - as all cut-and-paste operations. Passing a buffer number selects - one in of the range 1..5. The statusline is updated with the new - number. _Rotate_ performs a number of 90 degree counter clockwise - rotations of the buffer contents. _AddSelected_ as first argument - copies all selected and visible objects into the buffer. Passing - _Clear_ removes all objects from the currently selected buffer. - _Convert_ causes the contents of the buffer (lines, arc, vias) to - be converted into an element definition. Refer to *note - Pastebuffer:: for examples. Default: - !Ctrlx: PasteBuffer(Clear) PasteBuffer(AddSelected) - Mode(PasteBuffer) - !Shift Ctrlx: PasteBuffer(Clear) PasteBuffer(AddSelected) - RemoveSelected() Mode(PasteBuffer) - !Mod1c: PasteBuffer(Clear) PasteBuffer(AddSelected) - !Mod1x: PasteBuffer(Clear) PasteBuffer(AddSelected) - RemoveSelected() - !Shift1: PasteBuffer(1) - !Shift2: PasteBuffer(2) - !Shift3: PasteBuffer(3) - !Shift4: PasteBuffer(4) - !Shift5: PasteBuffer(5) - NoneF3: Mode(PasteBuffer) - -`Polygon((Close|PreviousPoint)' - Polygons need a special action routine to make life easier. Calling - _Polygon(PreviousPoint)_ resets the newly entered corner to the - previous one. The Undo action will call Polygon(PreviousPoint) - when appropriate to do so. _Close_ creates the final segment of - the polygon. This may fail if clipping to 45 degree lines is - switched on, in which case a warning is issued. Default: - Nonep: Polygon(Close) - !Shiftp: Polygon(Close) - -`Print()' - Pops up a print control box that lets you select the output - device, scaling and many more options. Each run creates all files - that are supported by the selected device. These are mask files as - well as drilling files, silk screens and so on. The table shows - the filenames for all possible files: - POSIX (extension) 8.3 filename - --------------------------------------------- - *_componentmask.* cmsk.* - *_componentsilk.* cslk.* - *_soldermask.* smsk.* - *_soldersilk.* sslk.* - *_drill.* dril.* - *_groundplane.* gpl.* - *_group[1..8].* [..8].* - The output may be sent to a post-processor by starting the - filename with the _pipe_ `("|")' character. Any `"%f"' in a - command is replaced with the current filename. The function is - available from the _file_ menu. There are no defaults. - -`Quit()' - Quits the application after confirming the operation. Default: - WM_PROTOCOLS: Quit() - -`Redo()' - This routine allows you to recover from the last undo command. - You might want to do this if you thought that undo was going to - revert something other than what it actually did (in case you are - confused about which operations are un-doable), or if you have - been backing up through a long undo list and over-shoot your - stopping point. Any change that is made since the undo in - question will trim the redo list. For example if you add ten - lines, then undo three of them you could use redo to put them - back, but if you move a line on the board before performing the - redo, you will lose the ability to "redo" the three "undone" lines. - Default: - !Shiftr: Redo() - -`RemoveSelected()' - This routine removes all visible and selected objects. There are - no defaults. - -`Report(Object|DrillReport)' - This routine pops up a dialog box describing the various - characteristics of an object (or piece of an object such as a pad - or pin) in the layout at the cursor position, or a report about - all of the drill holes in the layout. There are no defaults. - -`RouteStyle(1|2|3|4)' - This routine copies the sizes corresponding to the numbered route - style into the active line thickens, via diameter, and via drill - size. Defaults: - !Ctrl1: RouteStyle(1) - ... - !CtrlNUM_STYLES: RouteStyle(NUM_STYLES) - The variable `NUM_STYLES' is set at compile time in - `globalconfig.h'. - -`Save(Layout|LayoutAs)' -`Save(AllConnections|AllUnusedPins|ElementConnections)' - Passing _Layout_ saves the layout using the file from which it was - loaded or, if it is a new layout, calls _Save(LayoutAs)_ which - queries the user for a filename. The values: _AllConnections_, - _AllUnusedPins_ and _ElementConnections_ start a connection scan - and save all connections, all unused pins or the connections of a - single element to a file. There are no defaults. - -`Select(All|Block|Connection|ToggleObject)' -`Select(ElementByName|ObjectByName|PadByName|PinByName)' -`Select(TextByName|ViaByName)' - Toggles either the selection flag of the object at the cross hair - position (_ToggleObject_) or selects all visible objects, all - inside a rectangle or all objects which have been found during the - last connection scan. The _ByName_ functions use a *note Regular - Expressions:: search, always case insensitive, to select the - objects. Default: - None: Select(ToggleObject) - None,None: See resource file - this is complex - -`SetFlag(Object|SelectElements|SelectedPins|SelectedVias|Selected,thermal|octagon|square)' - Sets the indicated flag. This adds thermals, sets the flag which - indicates a pin/pad should be square, or sets the flag which - indicates a pin/pad should be octagonal. - :SetFlag(Selected,thermal) - -`SetValue(Grid|LineSize|TextScale|ViaDrillingHole|ViaSize|Zoom, value)' - Some internal values may be changed online by this function. The - first parameter specifies which data has to be changed. The other - one determines if the resource is set to the passed value, if - _value_ is specified without sign, or increments/decrements if it - is specified with a plus or minus sign. The function doesn't - change any existing object only the initial values of new objects. - Use the _ChangeSize()_ and _ChangeDrillSize()_ to change existing - objects. Default: - Noneg: SetValue(Grid, +5) - !Shiftg: SetValue(Grid, -5) - Nonel: SetValue(LineSize, +5) - !Shiftl: SetValue(LineSize, -5) - Nonet: SetValue(TextScale, +10) - !Shiftt: SetValue(TextScale, -10) - Nonev: SetValue(ViaSize, +5) - !Shiftv: SetValue(ViaSize, -5) - !Mod1v: SetValue(ViaDrillingHole, +5) - !Mod1 Shiftv: SetValue(ViaDrillingHole, -5) - Nonez: SetValue(Zoom, -1) - !Shiftz: SetValue(Zoom, +1) - -`SwapSides()' - This routine changes the board side you are viewing. Default: - NoneTab: SwapSides() - -`SwitchDrawingLayer(value)' - Makes layer number 1..MAX_LAYER the current one. Default: - None1: SwitchDrawingLayer(1) - ... - NoneMAX_LAYER: SwitchDrawingLayer(MAX_LAYER) - -`ToggleHideName(Object|SelectedElements)' - Toggles whether the element's name is displayed or hidden. If it - is hidden you won't see it on the screen and it will not appear on - the silk layer when you print the layout. - Noneh: ToggleHideName(Object) - !Shifth: ToggleHideName(SelectedElements) - -`ToggleVendor()' - Toggles automatic drill size mapping to the loaded vendor drill - table. - ToggleVendor() - -`ToggleVisibility(Layer)' - Toggles the visibility of the layer. - Mod11: ToggleVisibility(1) - Mod12: ToggleVisibility(2) - Mod13: ToggleVisibility(3) - Mod14: ToggleVisibility(4) - -`Undo()' -`Undo(ClearList)' - The unlimited undo feature of `Pcb' allows you to recover from - most operations that materially affect you work. Calling _Undo()_ - without any parameter recovers from the last (non-undo) operation. - _ClearList_ is used to release the allocated memory. _ClearList_ - is called whenever a new layout is started or loaded. See also - _Redo_. Default: - Noneu: Undo() - !Shift Ctrlu: Undo(ClearList) - -`UnloadVendor()' - Unloads the loaded vendor drill table. - UnloadVendor() - -`Unselect(All|Block|Connection)' - Unselects all visible objects, all inside a rectangle or all - objects which have been found during the last connection scan. - Default: - !Shift : Mode(Save) Mode(None) Unselect(Block) - !Shift : Unselect(Block) Mode(Restore) - - - -File: pcb.info, Node: Translations, Prev: Actions, Up: X11 Interface - -7.3 Default Translations -======================== - -This section covers some default translations of key and button events -as defined in the shipped default application resource file. Most of -them have already been listed in *note Actions::. `Pcb' makes use of a -nice `X11' feature; calling several action routines for one event. - -`NoneBackSpace:' - -`NoneDelete:' -`!ShiftBackSpace:' -`!Shift Ctrl:' - The object at the cursor location is removed by - _NoneBackSpace_ or _Shift Ctrl_ whereas - _ShiftBackSpace_ also removes all other objects that are - fully-connected to the one at the cursor location. - -`!Mod1 CtrlLeft:' -`!Mod1 CtrlRight:' -`!Mod1 CtrlUp:' -`!Mod1 CtrlDown:' - Scroll one page in one of the four directions. - -`NoneLeft:, !ShiftLeft:' -`NoneRight:, !ShiftRight:' -`NoneUp:, !ShiftUp:' -`NoneDown:, !ShiftDown:' - Move cross hair either one or ten points in grid. - -`NoneReturn:' - Finished user input, selects the 'default' button of dialogs. - -`NoneEscape:' - _Mode(Reset)_, aborts user input, selects the 'abort' button of - dialogs or resets all modes. - -`None, Btn2, None:' -`!Mod1, Btn2, !Mod1:' - The first sequence moves the object or element name at the cursor - location. The second one copies the objects. Copying isn't - available for element names. - - - -File: pcb.info, Node: File Formats, Next: Library Creation, Prev: X11 Interface, Up: Top - -8 File Formats -************** - -All files used by `Pcb' are read from the standard output of a command -or written to the standard input of one as plain seven bit `ASCII'. This -makes it possible to use any editor to change the contents of a layout -file. It is the only way for element or font description files to be -created. To do so you'll need to study the example files `example/*' -and `default_font' which are shipped with `Pcb'. For an overview refer -to *note Intro::. - - The following sections provide the necessary information about the -syntax of the files. Netlist files are not created by `Pcb', but it -does use them. For information on the format of a netlist file see the -_:rn_, *note User Commands::. The commands described allow you to add -almost any additional functionality you may need. Examples are -compressed read and write access as well as archives. The commands -themselves are defined by the resources _elementCommand_, -_fileCommand_, _fontCommand_, _libraryCommand_, -_libraryContentsCommand_ and _saveCommand_. Note that the commands are -not saved along with the data. It is considered an advantage to have -the layout file contain all necessary information, independent of any -other files. - - One thing common to all files is they may include comments, newlines, -and carriage returns at any place except within quoted strings. - -* Menu: - -* Pad and Line Representation:: -* Layout File:: -* Element File:: -* Font File:: -* Netlist File:: -* Library Contents File:: -* Library File:: -* File Syntax:: -* Object Flags:: -* PCBFlags:: - - -File: pcb.info, Node: Pad and Line Representation, Next: Layout File, Up: File Formats - -8.1 Pad and Line Representation -=============================== - -Pads and lines (copper traces, silk screen lines, etc) are represented -by the line end points and the aperture used to draw the line. It is -important to understand this when creating the pads for a new -footprint. The following figure illustrates a pad or line which is -drawn using a square aperture. The end points (X0,Y0), (X1,Y1) specify -the center of the aperture. The size parameter specifies the size of -the aperture. - - [image src="pad.png" alt="Pad Layout"] - -Pads and lines are represented in this way because this is how lines are -specified in RS-274X (Gerber) files which are used for creating the -masks used in board manufacturing. In fact, older mask making -equipment created lines in precisely this fashion. A physical aperture -was used to pass light through onto a photosensitive film. - - -File: pcb.info, Node: Layout File, Next: Element File, Prev: Pad and Line Representation, Up: File Formats - -8.2 Layout File Format -====================== - -The layout file describes a complete layout including symbols, vias, -elements and layers with lines, rectangles and text. This is the most -complex file of all. As `Pcb' has evolved, the file format has changed -several times to accommodate new features. `Pcb' has always been able -to read all older versions of the `.pcb' file. This allows the -migration of older designs to newer versions of the program. Obviously -older versions of `Pcb' will not be able to properly read layout files -stored in newer versions of the file format. - - In practice it is very common for footprint libraries to contain -elements which have been defined in various versions of the `Pcb' file -format. When faced with trying to understand an element file or layout -file which includes syntax not defined here, the best approach is to -examine the file `src/parse_y.y' which is the definitive definition of -the file format. - - The PCB layout file contains the following contents, in this order -(individual items are defined in *note File Syntax::: - -`PCB' - This names the board and sets its size - -`Grid' - Optional. - -`Cursor' - Optional. - -`Flags' - Optional. - -`Groups' - Optional. - -`Styles' - Optional. - -`Symbols' - Optional. - -`Vias, Rats, Layers, and Elements' - These may occur in any order, at this point in the file. - -`Netlists' - Optional. - - - -File: pcb.info, Node: Element File, Next: Font File, Prev: Layout File, Up: File Formats - -8.3 Element File Format -======================= - -Element files are used to describe one component which then may be used -several times within one or more layouts. You will normally split the -file into two parts, one for the pinout and one for the package -description. Using `m4' allows you to define pin names as macros in -one file and include a package description file which evaluates the -macros. See the resource _elementCommand_ for more information. The -pins (and pads) must appear in sequential order in the element file -(new in 1.5) so that pin 1 must be the first PIN(...) in the file. - - Doing things this way makes it possible to use one package file for -several different circuits. See the sample files `dil*'. - - The lowest x and y coordinates of all sub-objects of an element are -used as an attachment point for the cross hair cursor of the main -window, unless the element has a mark, in which case that's the -attachment point. - - -File: pcb.info, Node: Font File, Next: Netlist File, Prev: Element File, Up: File Formats - -8.4 Font File Format -==================== - -A number of user defined Symbols are called a font. There is only one -per layout. All symbols are made of lines. See the file `default_font' -as an example. - - The lowest x and y coordinates of all lines of a font are -transformed to (0,0). - - -File: pcb.info, Node: Netlist File, Next: Library Contents File, Prev: Font File, Up: File Formats - -8.5 Netlist File Format -======================= - -Netlists read by `Pcb' must have this simple text form: - - netname [style] NAME-PINNUM NAME2-PINNUM2 NAME3-PINNUM3 ... [\] - -for each net on the layout. where "netname" is the name of the net -which must be unique for each net, [style] is an optional route-style -name, NAME is the layout-name name given to an element, and PINNUM is -the (usually numeric) pin number of the element that connects to the net -(for details on pin numbering see *note Element Objects::). Spaces or -tabs separate the fields. If the line ends with a "\" the net -continues on the next line and the "\" is treated exactly as if it were -a space. If a NAME ends with a lower-case letter, all lower-case -letters are stripped from the end of the NAME to determine the matching -layout-name name. For example: - - Data U1-3 U2abc-4 FLOP1a-7 Uabc3-A9 - - specifies that the net called "Data" should have pin 3 of U1 -connected to pin 4 of U2, to pin 7 of FLOP1 and to pin A9 of Uabc3. -Note that element name and pin number strings are case-sensitive. It -is up to you to name the elements so that their layout-name names -agrees with the netlist. - - -File: pcb.info, Node: Library Contents File, Next: Library File, Prev: Netlist File, Up: File Formats - -8.6 Library Contents File Format -================================ - -There is nothing like a special library format. The ones that have been -introduced in 1.4.1 just use some nice (and time consuming) features of -GNU `m4'. The only predefined format is the one of the contents file -which is read during startup. It is made up of two basic line types: - - menu entry = "TYPE="name - contents line = template":"package":"value":"description - name = String - template = String - package = String - value = String - description = String - String = - - No leading white spaces or comments are allowed in this file. If you -need either one, define a command that removes them before loading. -Have a look to the _libraryContentsCommand_ resource. - - The menu entry will appear in the selection menu at the top and of -the library window. - - -File: pcb.info, Node: Library File, Next: File Syntax, Prev: Library Contents File, Up: File Formats - -8.7 Library File Format -======================= - -This section provides an overview about the existing `m4' definitions -of the elements. There are basically two different types of files. One -to define element specific data like the pinout, package and so on, the -other to define the values. For example the static RAM circuits 43256 -and 62256 are very similar. They therefore share a common definition in -the macro file but are defined with two different value labels. - - The macro file entry: - define(`Description_43256_dil', `SRAM 32Kx8') - define(`Param1_43256_dil', 28) - define(`Param2_43256_dil', 600) - define(`PinList_43256_dil', ``pin1', `pin2', ...') - - And the list file: - 43256_dil:N:43256:62256 - - The macro must define a description, the pin list and up to two -additional parameters that are passed to the package definitions. The -first one is the number of pins whereas the second one defines for -example the width of a package. - - It is very important to select a unique identifier for each macro. In -the example this would be _43256_dil_ which is also the templates name. -It is required by some low-level macros that _Description_, Param1_, -Param2__ and _PinList__ are perpended. - - The list file uses a syntax: - template:package:value[:more values] - - This means that the shown example will create two element entries -with the same package and pinout but with different names. - - A number of packages are defined in `common.m4'. Included are: - - DIL packages with suffix D, DW, J, JD, JG, N, NT, P - PLCC - TO3 - generic connectors - DIN 41.612 connectors - zick-zack (SD suffix) - 15 pin multiwatt - - If you are going to start your own library please take care about -`m4' functions. Be aware of quoting and so on and, most important check -your additional entry by calling the macro: - - CreateObject(`template', `value', `package suffix') - - If quoting is incorrect an endless loop may occur (broken by a -out-of-memory message). - - The scripts in the `lib' directory handle the creation of libraries -as well as of their contents files. Querying is also supported. - - I know quite well that this description of the library -implementation is not what some out there expect. But in my opinion -it's much more useful to look at the comments and follow the macros -step by step. - - -File: pcb.info, Node: File Syntax, Next: Object Flags, Prev: Library File, Up: File Formats - -8.8 File Syntax -=============== - -A special note about units: Older versions of `pcb' used mils (1/1000 -inch) as the base unit; a value of 500 in the file meant half an inch. -Newer versions uses a "high resolution" syntax, where the base unit is -1/100 of a mil (0.000010 inch); a value of 500 in the file means 5 -mils. As a general rule, the variants of each entry listed below which -use square brackets are the high resolution formats and use the 1/100 -mil units, and the ones with parentheses are the older variants and use -1 mil units. Note that when multiple variants are listed, the most -recent (and most preferred) format is the first listed. - - Symbolic and numeric flags (SFlags and NFlags) are described in -*note Object Flags::. - -* Menu: - -* Arc syntax:: -* Attribute syntax:: -* Connect syntax:: -* Cursor syntax:: -* DRC syntax:: -* Element syntax:: -* ElementArc syntax:: -* ElementLine syntax:: -* FileVersion syntax:: -* Flags syntax:: -* Grid syntax:: -* Groups syntax:: -* Layer syntax:: -* Line syntax:: -* Mark syntax:: -* Net syntax:: -* Netlist syntax:: -* Pad syntax:: -* PCB syntax:: -* Pin syntax:: -* PolyArea syntax:: -* Polygon syntax:: -* Rat syntax:: -* Styles syntax:: -* Symbol syntax:: -* SymbolLine syntax:: -* Text syntax:: -* Thermal syntax:: -* Via syntax:: - - -File: pcb.info, Node: Arc syntax, Next: Attribute syntax, Up: File Syntax - -8.8.1 Arc ---------- - -Arc [X Y Width Height Thickness Clearance StartAngle DeltaAngle SFlags] -Arc (X Y Width Height Thickness Clearance StartAngle DeltaAngle NFlags) -Arc (X Y Width Height Thickness StartAngle DeltaAngle NFlags) - -X Y - Coordinates of the center of the arc. - -WIDTH HEIGHT - The width and height, from the center to the edge. The bounds of - the circle of which this arc is a segment, is thus 2*Width by - 2*Height. - -THICKNESS - The width of the copper trace which forms the arc. - -CLEARANCE - The amount of space cleared around the arc when the line passes - through a polygon. The clearance is added to the thickness to get - the thickness of the clear; thus the space between the arc and the - polygon is Clearance/2 wide. - -STARTANGLE - The angle of one end of the arc, in degrees. In PCB, an angle of - zero points left (negative X direction), and 90 degrees points down - (positive Y direction). - -DELTAANGLE - The sweep of the arc. This may be negative. Positive angles sweep - counterclockwise. - -SFLAGS - Symbolic or numeric flags. - -NFLAGS - Numeric flags. - - -File: pcb.info, Node: Attribute syntax, Next: Connect syntax, Prev: Arc syntax, Up: File Syntax - -8.8.2 Attribute ---------------- - -Attribute ("Name" "Value") - -Attributes allow boards and elements to have arbitrary data attached to -them, which is not directly used by PCB itself but may be of use by -other programs or users. - -NAME - The name of the attribute - -VALUE - The value of the attribute. Values are always stored as strings, - even if the value is interpreted as, for example, a number. - - - -File: pcb.info, Node: Connect syntax, Next: Cursor syntax, Prev: Attribute syntax, Up: File Syntax - -8.8.3 Connect -------------- - -Connect ("PinPad") - -PINPAD - The name of a pin or pad which is included in this net. Pin and - Pad names are named by the refdes and pin name, like `"U14-7"' for - pin 7 of U14, or `"T4-E"' for pin E of T4. - - -File: pcb.info, Node: Cursor syntax, Next: DRC syntax, Prev: Connect syntax, Up: File Syntax - -8.8.4 Cursor ------------- - -Cursor [X Y Zoom] -Cursor (X Y Zoom) - -X Y - Location of the cursor when the board was saved. - -ZOOM - The current zoom factor. Note that a zoom factor of "0" means 1 - mil per screen pixel, N means 2^N mils per screen pixel, etc. The - first variant accepts floating point numbers. The special value - "1000" means "zoom to fit" - - -File: pcb.info, Node: DRC syntax, Next: Element syntax, Prev: Cursor syntax, Up: File Syntax - -8.8.5 DRC ---------- - -DRC [Bloat Shrink Line Silk Drill Ring] -DRC [Bloat Shrink Line Silk] -DRC [Bloat Shrink Line] - -BLOAT - Minimum spacing between copper. - -SHRINK - Minimum copper overlap to guarantee connectivity. - -LINE - Minimum line thickness. - -SILK - Minimum silk thickness. - -DRILL - Minimum drill size. - -RING - Minimum width of the annular ring around pins and vias. - - -File: pcb.info, Node: Element syntax, Next: ElementArc syntax, Prev: DRC syntax, Up: File Syntax - -8.8.6 Element -------------- - -Element [SFlags "Desc" "Name" "Value" MX MY TX TY TDir TScale TSFlags] ( -Element (NFlags "Desc" "Name" "Value" MX MY TX TY TDir TScale TNFlags) ( -Element (NFlags "Desc" "Name" "Value" TX TY TDir TScale TNFlags) ( -Element (NFlags "Desc" "Name" TX TY TDir TScale TNFlags) ( -Element ("Desc" "Name" TX TY TDir TScale TNFlags) ( - ... contents ... -) - -SFLAGS - Symbolic or numeric flags, for the element as a whole. - -NFLAGS - Numeric flags, for the element as a whole. - -DESC - The description of the element. This is one of the three strings - which can be displayed on the screen. - -NAME - The name of the element, usually the reference designator. - -VALUE - The value of the element. - -MX MY - The location of the element's mark. This is the reference point - for placing the element and its pins and pads. - -TX TY - The upper left corner of the text (one of the three strings). - -TDIR - The relative direction of the text. 0 means left to right for an - unrotated element, 1 means up, 2 left, 3 down. - -TSCALE - Size of the text, as a percentage of the "default" size of of the - font (the default font is about 40 mils high). Default is 100 (40 - mils). - -TSFLAGS - Symbolic or numeric flags, for the text. - -TNFLAGS - Numeric flags, for the text. - - Elements may contain pins, pads, element lines, element arcs, -attributes, and (for older elements) an optional mark. Note that -element definitions that have the mark coordinates in the element line, -only support pins and pads which use relative coordinates. The pin and -pad coordinates are relative to the mark. Element definitions which do -not include the mark coordinates in the element line, may have a Mark -definition in their contents, and only use pin and pad definitions -which use absolute coordinates. - - -File: pcb.info, Node: ElementArc syntax, Next: ElementLine syntax, Prev: Element syntax, Up: File Syntax - -8.8.7 ElementArc ----------------- - -ElementArc [X Y Width Height StartAngle DeltaAngle Thickness] -ElementArc (X Y Width Height StartAngle DeltaAngle Thickness) - -X Y - Coordinates of the center of the arc. These are relative to the - Element's mark point for new element formats, or absolute for older - formats. - -WIDTH HEIGHT - The width and height, from the center to the edge. The bounds of - the circle of which this arc is a segment, is thus 2*Width by - 2*Height. - -STARTANGLE - The angle of one end of the arc, in degrees. In PCB, an angle of - zero points left (negative X direction), and 90 degrees points down - (positive Y direction). - -DELTAANGLE - The sweep of the arc. This may be negative. Positive angles sweep - counterclockwise. - -THICKNESS - The width of the silk line which forms the arc. - - -File: pcb.info, Node: ElementLine syntax, Next: FileVersion syntax, Prev: ElementArc syntax, Up: File Syntax - -8.8.8 ElementLine ------------------ - -ElementLine [X1 Y1 X2 Y2 Thickness] -ElementLine (X1 Y1 X2 Y2 Thickness) - -X1 Y1 X2 Y2 - Coordinates of the endpoints of the line. These are relative to - the Element's mark point for new element formats, or absolute for - older formats. - -THICKNESS - The width of the silk for this line. - - -File: pcb.info, Node: FileVersion syntax, Next: Flags syntax, Prev: ElementLine syntax, Up: File Syntax - -8.8.9 FileVersion ------------------ - -FileVersion[Version] - -VERSION - File format version. This version number represents the date when - the pcb file format was last changed. - - Any version of pcb build from sources equal to or newer than this -number should be able to read the file. If this line is not present in -the input file then file format compatibility is not checked. - - -File: pcb.info, Node: Flags syntax, Next: Grid syntax, Prev: FileVersion syntax, Up: File Syntax - -8.8.10 Flags ------------- - -Flags(Number) - -NUMBER - A number, whose value is normally given in hex, individual bits of - which represent pcb-wide flags as defined in *note PCBFlags::. - - - -File: pcb.info, Node: Grid syntax, Next: Groups syntax, Prev: Flags syntax, Up: File Syntax - -8.8.11 Grid ------------ - -Grid [Step OffsetX OffsetY Visible] -Grid (Step OffsetX OffsetY Visible) -Grid (Step OffsetX OffsetY) - -STEP - Distance from one grid point to adjacent points. This value may - be a floating point number for the first two variants. - -OFFSETX OFFSETY - The "origin" of the grid. Normally zero. - -VISIBLE - If non-zero, the grid will be visible on the screen. - - -File: pcb.info, Node: Groups syntax, Next: Layer syntax, Prev: Grid syntax, Up: File Syntax - -8.8.12 Groups -------------- - -Groups("String") - -STRING - Encodes the layer grouping information. Each group is separated - by a colon, each member of each group is separated by a comma. - Group members are either numbers from `1'..N for each layer, and - the letters `c' or `s' representing the component side and solder - side of the board. Including `c' or `s' marks that group as being - the top or bottom side of the board. - - Groups("1,2,c:3:4:5,6,s:7,8") - - - -File: pcb.info, Node: Layer syntax, Next: Line syntax, Prev: Groups syntax, Up: File Syntax - -8.8.13 Layer ------------- - -Layer (LayerNum "Name") ( - ... contents ... -) - -LAYERNUM - The layer number. Layers are numbered sequentially, starting with - 1. The last two layers (9 and 10 by default) are solder-side silk - and component-side silk, in that order. - -NAME - The layer name. - -CONTENTS - The contents of the layer, which may include attributes, lines, - arcs, rectangles, text, and polygons. - - -File: pcb.info, Node: Line syntax, Next: Mark syntax, Prev: Layer syntax, Up: File Syntax - -8.8.14 Line ------------ - -Line [X1 Y1 X2 Y2 Thickness Clearance SFlags] -Line (X1 Y1 X2 Y2 Thickness Clearance NFlags) -Line (X1 Y1 X2 Y2 Thickness NFlags) - -X1 Y1 X2 Y2 - The end points of the line - -THICKNESS - The width of the line - -CLEARANCE - The amount of space cleared around the line when the line passes - through a polygon. The clearance is added to the thickness to get - the thickness of the clear; thus the space between the line and the - polygon is Clearance/2 wide. - -SFLAGS - Symbolic or numeric flags - -NFLAGS - Numeric flags. - - -File: pcb.info, Node: Mark syntax, Next: Net syntax, Prev: Line syntax, Up: File Syntax - -8.8.15 Mark ------------ - -Mark [X Y] -Mark (X Y) - -X Y - Coordinates of the Mark, for older element formats that don't have - the mark as part of the Element line. - - -File: pcb.info, Node: Net syntax, Next: Netlist syntax, Prev: Mark syntax, Up: File Syntax - -8.8.16 Net ----------- - -Net ("Name" "Style") ( - ... connects ... -) - -NAME - The name of this net. - -STYLE - The routing style that should be used when autorouting this net. - - -File: pcb.info, Node: Netlist syntax, Next: Pad syntax, Prev: Net syntax, Up: File Syntax - -8.8.17 Netlist --------------- - -Netlist ( ) ( - ... nets ... -) - - -File: pcb.info, Node: Pad syntax, Next: PCB syntax, Prev: Netlist syntax, Up: File Syntax - -8.8.18 Pad ----------- - -Pad [rX1 rY1 rX2 rY2 Thickness Clearance Mask "Name" "Number" SFlags] -Pad (rX1 rY1 rX2 rY2 Thickness Clearance Mask "Name" "Number" NFlags) -Pad (aX1 aY1 aX2 aY2 Thickness "Name" "Number" NFlags) -Pad (aX1 aY1 aX2 aY2 Thickness "Name" NFlags) - -RX1 RY1 RX2 RY2 - Coordinates of the endpoints of the pad, relative to the element's - mark. Note that the copper extends beyond these coordinates by - half the thickness. To make a square or round pad, specify the - same coordinate twice. - -AX1 AY1 AX2 AY2 - Same, but absolute coordinates of the endpoints of the pad. - -THICKNESS - width of the pad. - -CLEARANCE - add to thickness to get clearance width. - -MASK - width of solder mask opening. - -NAME - name of pin - -NUMBER - number of pin - -SFLAGS - symbolic or numerical flags - -NFLAGS - numerical flags only - - -File: pcb.info, Node: PCB syntax, Next: Pin syntax, Prev: Pad syntax, Up: File Syntax - -8.8.19 PCB ----------- - -PCB ["Name" Width Height] -PCB ("Name" Width Height] -PCB ("Name") - -NAME - Name of the PCB project - -WIDTH HEIGHT - Size of the board - - If you don't specify the size of the board, a very large default is -chosen. - - -File: pcb.info, Node: Pin syntax, Next: PolyArea syntax, Prev: PCB syntax, Up: File Syntax - -8.8.20 Pin ----------- - -Pin [rX rY Thickness Clearance Mask Drill "Name" "Number" SFlags] -Pin (rX rY Thickness Clearance Mask Drill "Name" "Number" NFlags) -Pin (aX aY Thickness Drill "Name" "Number" NFlags) -Pin (aX aY Thickness Drill "Name" NFlags) -Pin (aX aY Thickness "Name" NFlags) - -RX RY - coordinates of center, relative to the element's mark - -AX AY - absolute coordinates of center. - -THICKNESS - outer diameter of copper annulus - -CLEARANCE - add to thickness to get clearance diameter - -MASK - diameter of solder mask opening - -DRILL - diameter of drill - -NAME - name of pin - -NUMBER - number of pin - -SFLAGS - symbolic or numerical flags - -NFLAGS - numerical flags only - - -File: pcb.info, Node: PolyArea syntax, Next: Polygon syntax, Prev: Pin syntax, Up: File Syntax - -8.8.21 PolyArea ---------------- - -PolyArea [Area] - -AREA - Minimum area of polygon island to retain. If a polygon has - clearances that cause an isolated island to be created, then will - only be retained if the area exceeds this minimum area. - - -File: pcb.info, Node: Polygon syntax, Next: Rat syntax, Prev: PolyArea syntax, Up: File Syntax - -8.8.22 Polygon --------------- - -Polygon (SFlags) ( - ... (X Y) ... - ... [X Y] ... - Hole ( - ... (X Y) ... - ... [X Y] ... - ) - ... -) - -SFLAGS - Symbolic or numeric flags. - -X Y - Coordinates of each vertex. You must list at least three - coordinates. - -HOLE (...) - Defines a hole within the polygon's outer contour. There may be - zero or more such sections. - - -File: pcb.info, Node: Rat syntax, Next: Styles syntax, Prev: Polygon syntax, Up: File Syntax - -8.8.23 Rat ----------- - -Rat [X1 Y1 Group1 X2 Y2 Group2 SFlags] -Rat (X1 Y1 Group1 X2 Y2 Group2 NFlags) - -X1 Y1 X2 Y2 - The endpoints of the rat line. - -GROUP1 GROUP2 - The layer group each end is connected on. - -SFLAGS - Symbolic or numeric flags. - -NFLAGS - Numeric flags. - - -File: pcb.info, Node: Styles syntax, Next: Symbol syntax, Prev: Rat syntax, Up: File Syntax - -8.8.24 Styles -------------- - -Styles("String") - -STRING - Encodes the four routing styles `pcb' knows about. The four styles - are separated by colons. Each style consists of five parameters - as follows: - - NAME - The name of the style. - - THICKNESS - Width of lines and arcs. - - DIAMETER - Copper diameter of pins and vias. - - DRILL - Drill diameter of pins and vias. - - KEEPAWAY - Minimum spacing to other nets. If omitted, 10 mils is the - default. - - - - Styles("Signal,10,40,20:Power,25,60,35:Fat,40,60,35:Skinny,8,36,20") - Styles["Logic,1000,3600,2000,1000:Power,2500,6000,3500,1000: - Line,4000,6000,3500,1000:Breakout,600,2402,1181,600"] - -Note that strings in actual files cannot span lines; the above example -is split across lines only to make it readable. - - -File: pcb.info, Node: Symbol syntax, Next: SymbolLine syntax, Prev: Styles syntax, Up: File Syntax - -8.8.25 Symbol -------------- - -Symbol [Char Delta] ( -Symbol (Char Delta) ( - ... symbol lines ... -) - -CHAR - The character or numerical character value this symbol represents. - Characters must be in single quotes. - -DELTA - Additional space to allow after this character. - - -File: pcb.info, Node: SymbolLine syntax, Next: Text syntax, Prev: Symbol syntax, Up: File Syntax - -8.8.26 SymbolLine ------------------ - -SymbolLine [X1 Y1 X2 Y1 Thickness] -SymbolLine (X1 Y1 X2 Y1 Thickness) - -X1 Y1 X2 Y2 - The endpoints of this line. - -THICKNESS - The width of this line. - - -File: pcb.info, Node: Text syntax, Next: Thermal syntax, Prev: SymbolLine syntax, Up: File Syntax - -8.8.27 Text ------------ - -Text [X Y Direction Scale "String" SFlags] -Text (X Y Direction Scale "String" NFlags) -Text (X Y Direction "String" NFlags) - -X Y - The location of the upper left corner of the text. - -DIRECTION - 0 means text is drawn left to right, 1 means up, 2 means right to - left (i.e. upside down), and 3 means down. - -SCALE - Size of the text, as a percentage of the "default" size of of the - font (the default font is about 40 mils high). Default is 100 (40 - mils). - -STRING - The string to draw. - -SFLAGS - Symbolic or numeric flags. - -NFLAGS - Numeric flags. - - -File: pcb.info, Node: Thermal syntax, Next: Via syntax, Prev: Text syntax, Up: File Syntax - -8.8.28 Thermal --------------- - -Thermal [Scale] - -SCALE - Relative size of thermal fingers. A value of 1.0 makes the finger - width twice the clearance gap width (measured across the gap, not - diameter). The normal value is 0.5, which results in a finger - width the same as the clearance gap width. - - -File: pcb.info, Node: Via syntax, Prev: Thermal syntax, Up: File Syntax - -8.8.29 Via ----------- - -Via [X Y Thickness Clearance Mask Drill "Name" SFlags] -Via (X Y Thickness Clearance Mask Drill "Name" NFlags) -Via (X Y Thickness Clearance Drill "Name" NFlags) -Via (X Y Thickness Drill "Name" NFlags) -Via (X Y Thickness "Name" NFlags) - -X Y - coordinates of center - -THICKNESS - outer diameter of copper annulus - -CLEARANCE - add to thickness to get clearance diameter - -MASK - diameter of solder mask opening - -DRILL - diameter of drill - -NAME - string, name of via (vias have names?) - -SFLAGS - symbolic or numerical flags - -NFLAGS - numerical flags only - - -File: pcb.info, Node: Object Flags, Next: PCBFlags, Prev: File Syntax, Up: File Formats - -8.9 Object Flags -================ - -Note that object flags can be given numerically (like `0x0147') or -symbolically (like `"found,showname,square"'. Some numeric values are -reused for different object types. The table below lists the numeric -value followed by the symbolic name. - -`0x0001 pin' - If set, this object is a pin. This flag is for internal use only. - -`0x0002 via' - Likewise, for vias. - -`0x0004 found' - If set, this object has been found by `FindConnection()'. - -`0x0008 hole' - For pins and vias, this flag means that the pin or via is a hole - without a copper annulus. - -`0x0010 rat' - If set for a line, indicates that this line is a rat line instead - of a copper trace. - -`0x0010 pininpoly' - For pins and pads, this flag is used internally to indicate that - the pin or pad overlaps a polygon on some layer. - -`0x0010 clearpoly' - For polygons, this flag means that pins and vias will normally - clear these polygons (thus, thermals are required for electrical - connection). When clear, polygons will solidly connect to pins and - vias. - -`0x0010 hidename' - For elements, when set the name of the element is hidden. - -`0x0020 showname' - For elements, when set the names of pins are shown. - -`0x0020 clearline' - For lines and arcs, the line/arc will clear polygons instead of - connecting to them. - -`0x0020 fullpoly' - For polygons, the full polygon is drawn (i.e. all parts instead of - only the biggest one). - -`0x0040 selected' - Set when the object is selected. - -`0x0080 onsolder' - For elements and pads, indicates that they are on the solder side. - -`0x0080 auto' - For lines and vias, indicates that these were created by the - autorouter. - -`0x0100 square' - For pins and pads, indicates a square (vs round) pin/pad. - -`0x0200 rubberend' - For lines, used internally for rubber band moves. - -`0x0200 warn' - For pins, vias, and pads, set to indicate a warning. - -`0x0400 usetherm' - Obsolete, indicates that pins/vias should be drawn with thermal - fingers. - -`0x0400' - Obsolete, old files used this to indicate lines drawn on silk. - -`0x0800 octagon' - Draw pins and vias as octagons. - -`0x1000 drc' - Set for objects that fail DRC. - -`0x2000 lock' - Set for locked objects. - -`0x4000 edge2' - For pads, indicates that the second point is closer to the edge. - For pins, indicates that the pin is closer to a horizontal edge - and thus pinout text should be vertical. - -`0x8000 marker' - Marker used internally to avoid revisiting an object. - -`0x10000 nopaste' - For pads, set to prevent a solderpaste stencil opening for the - pad. Primarily used for pads used as fiducials. - - -File: pcb.info, Node: PCBFlags, Prev: Object Flags, Up: File Formats - -8.10 PCBFlags -============= - -`0x00001' - Pinout displays pin numbers instead of pin names. - -`0x00002' - Use local reference for moves, by setting the mark at the - beginning of each move. - -`0x00004' - When set, only polygons and their clearances are drawn, to see if - polygons have isolated regions. - -`0x00008' - Display DRC region on crosshair. - -`0x00010' - Do all move, mirror, rotate with rubberband connections. - -`0x00020' - Display descriptions of elements, instead of refdes. - -`0x00040' - Display names of elements, instead of refdes. - -`0x00080' - Auto-DRC flag. When set, PCB doesn't let you place copper that - violates DRC. - -`0x00100' - Enable 'all-direction' lines. - -`0x00200' - Switch starting angle after each click. - -`0x00400' - Force unique names on board. - -`0x00800' - New lines/arc clear polygons. - -`0x01000' - Crosshair snaps to pins and pads. - -`0x02000' - Show the solder mask layer. - -`0x04000' - Draw with thin lines. - -`0x08000' - Move items orthogonally. - -`0x10000' - Draw autoroute paths real-time. - -`0x20000' - New polygons are full ones. - -`0x40000' - Names are locked, the mouse cannot select them. - -`0x80000' - Everything but names are locked, the mouse cannot select anything - else. - -`0x100000' - New polygons are full polygons. - -`0x200000' - When set, element names are not drawn. - - -File: pcb.info, Node: Library Creation, Next: Schematic Frontends, Prev: File Formats, Up: Top - -9 Library Creation -****************** - -This chapter provides a detailed look at how footprint libraries are -created and used. The chapter is split into two section, the first -section covers the "old" style libraries which use the `m4' macro -processor and the second section covers the "new" style libraries. - - Despite the names "old" and "new", both styles of libraries are -useful and the "old" style should not be discounted because of its -name. The advantage of the old style libraries is that one can define -a family of footprints, say a DIP package, and then quickly produce all -the members of that family. Because the individual packages make use -of a base definition, corrections made to the base definition propagate -to all the members of a family. The primary drawback to using this -library approach is that the effort to create a single footprint is -more than a graphical interface and may take even longer if the user -has not used the `m4' macro language previously. - - The new style of footprint libraries stores each footprint in its own -file. The footprints are created graphically by placing pads and then -converting a group of pads to a component. This library method has the -advantage of being quick to learn and it is easily to build single -footprints quickly. If you are building a family of parts, however, the -additional effort in creating each one individually makes this approach -undesirable. In addition, creating a part with a large pin count can -be quite tedious when done by hand. - -9.1 Old Style (m4) Libraries -============================ - -The old style libraries for pcb use the `m4' macro processor to allow -the definition of a family of parts. There are several files -associated with the old style library. The file `common.m4' is the top -level file associated with the library. `common.m4' defines a few -utility macros which are used by other portions of the library, and -then includes a predefined set of library files (the lines like -`include(geda.inc)'). - -9.1.1 Overview of Oldlib Operation ----------------------------------- - -The big picture view of the old style library system is that the library -is simply a collection of macro definitions. The macros are written in -the `m4' macro language. An example of a macro and what it expands to -is the following. One of the predefined footprints in the library -which comes with PCB is the `PKG_SO8' macro. Note that all the -footprint macros begin with `PKG_'. For this particular example, -`PKG_SO8' is a macro for an 8-pin small outline surface mount package. -All of the footprint macros take 3 arguments. The first is the -canonical name of the footprint on the board. In this case "SO8" is an -appropriate name. The second argument is the reference designator on -the board such as "U1" or "U23". The third and final argument is the -value. For an integrated circuit this is usually the part number such -as "MAX4107" or "78L05" and for a component such as a resistor or -capacitor it is the resistance or capacitance. The complete call to the -macro in our example is `PKG_SO8(SO8, U1, MAX4107)'. When processed by -`m4' using the macros defined in the PCB library, this macro expands to - Element(0x00 "SO8" "U1" "MAX4107" 146 50 3 100 0x00) - ( - Pad(10 25 38 25 20 "1" 0x00) - Pad(10 75 38 75 20 "2" 0x100) - Pad(10 125 38 125 20 "3" 0x100) - Pad(10 175 38 175 20 "4" 0x100) - Pad(214 175 242 175 20 "5" 0x100) - Pad(214 125 242 125 20 "6" 0x100) - Pad(214 75 242 75 20 "7" 0x100) - Pad(214 25 242 25 20 "8" 0x100) - ElementLine(0 0 151 0 10) - ElementArc(126 0 25 25 0 180 10) - ElementLine(101 0 252 0 10) - ElementLine(252 0 252 200 10) - ElementLine(252 200 0 200 10) - ElementLine(0 200 0 0 10) - Mark(29 25) - ) - which is the actual definition of the footprint that the PCB program -works with. As a user of PCB the only time you will need or want to run -`m4' directly is when you are debugging a new library addition. In -normal operation, the calls to `m4' are made by helper scripts that -come with PCB. - - Tools such as `gsch2pcb' (used to interface the gEDA schematic -capture program to PCB layout) will call `m4' to produce an initial PCB -layout that includes all the components on a schematic. In addition, -when manually instantiating parts from within PCB, `m4' will be called -by PCB's helper scripts to produce the footprints. - -9.1.2 The Library Scripts -------------------------- - -There are several scripts that are used for processing the m4 -libraries. This section briefly describes these scripts and details how -they are used by PCB. - -9.1.2.1 Scripts Used During Compilation -....................................... - -The scripts described in this section are used during compilation of -PCB. They are run automatically by the build system, but are described -here to help document the complete library processing that occurs. -During the build of PCB, the following actions are taken. The -`CreateLibrary.sh' script is run to produce an M4 "frozen file". This -frozen file is simply a partially processed M4 input file which can be -loaded by M4 more quickly than the original input file. - - A typical call to `CreateLibrary.sh' used during the compilation of -PCB is: - ./CreateLibrary.sh -I . pcblib ./common.m4 TTL_74xx_DIL.m4 - connector.m4 crystal.m4 generic.m4 genericsmt.m4 gtag.m4 - jerry.m4 linear.m4 logic.m4 lsi.m4 memory.m4 optical.m4 pci.m4 - resistor_0.25W.m4 resistor_adjust.m4 resistor_array.m4 - texas_inst_amplifier.m4 texas_inst_voltage_reg.m4 - transistor.m4 geda.m4 - The `-I .' says to search in the current directory for the `.m4' -files. The output frozen file is `pcblib'. The main `common.m4' file -is listed as well as all of the `*.m4' files which define the -components in the library. - - In addition, a library contents file is created during the build with -the `CreateLibraryContents.sh' script. A typical call to -`CreateLibrary.sh' used during the compilation of PCB is: - ./CreateLibraryContents.sh -I . ./common.m4 TTL_74xx_DIL.list - connector.list crystal.list generic.list genericsmt.list gtag.list - jerry.list linear.list logic.list lsi.list memory.list optical.list - pci.list resistor_0.25W.list resistor_adjust.list resistor_array.list - texas_inst_amplifier.list texas_inst_voltage_reg.list transistor.list - geda.list > pcblib.contents - - The `pcblib.contents' file is used by the PCB program to define the -libraries and components which will be displayed when you bring up the -library window from within PCB. An example of part of the -`pcblib.contents' file is: - TYPE=~TTL 74xx DIL - 7400_dil:N:7400:4 dual-NAND - 7401_dil:N:7401:4 dual-NAND OC - 7402_dil:N:7402:4 dual-NOR - TYPE=~geda - geda_DIP6:DIP6:DIP6:Dual in-line package, narrow (300 mil) - geda_DIP8:DIP8:DIP8:Dual in-line package, narrow (300 mil) - geda_DIP14:DIP14:DIP14:Dual in-line package, narrow (300 mil) - geda_ACY300:ACY300:ACY300:Axial non-polar component, - The `TYPE=' lines define the library name that will show up in the -library window in PCB. The other lines define the actual components in -the library. - -9.1.2.2 Scripts Used by PCB at Runtime -...................................... - -When PCB is first executed, it makes a call to the -`ListLibraryContents.sh' script. This script provides the PCB program -with the contents of the library contents file created when PCB was -compiled. A typical call to `ListLibraryContents.sh' is - ../lib/ListLibraryContents.sh .:/tmp/pcb-20030903/src/../lib pcblib - This command says to search the path -`.:/tmp/pcb-20030903/src/../lib' for a file called `pcblib.contents' -(the `.contents' part is added automatically) and display the contents -of the file. PCB parses this output and generates the library window -entries. - - When you pick a library component from the library window, PCB calls -the `QueryLibrary.sh' script to actually pull the footprint into the -layout. For example, when the ACY300 component is selected from the -`~geda' library, the generated call may be: - - /tmp/pcb-20030903/src/../lib/QueryLibrary.sh - .:/tmp/pcb-20030903/src/../lib pcblib geda_ACY300 ACY300 - ACY300 - If you were to run this command by hand you would see the PCB code -for the element: - Element(0x00 "Axial non-polar component," "" "ACY300" 245 70 0 100 0x00) - ( - Pin(0 25 50 20 "1" 0x101) - Pin(300 25 50 20 "2" 0x01) - - ElementLine(0 25 75 25 10) - ElementLine(225 25 300 25 10) - - ElementLine(75 0 225 0 10) - ElementLine(225 0 225 50 10) - ElementLine(225 50 75 50 10) - ElementLine(75 50 75 0 10) - - # ElementArc(X1 Y 50 50 270 180 10) - # ElementArc(X2 Y 50 50 90 180 10) - - Mark(75 25) - ) - -9.1.3 Creating an Oldlib Footprint ----------------------------------- - -This section provides a complete example of defining a family of -footprints using the M4 style library. As a vehicle for this example, a -family of footprints for surface mount resistors and capacitors will be -developed. The file `example.inc' should have been installed on your -system as `$prefix/share/examples/oldlib/example.inc' where `$prefix' -is often times `/usr/local'. - - The `example.inc' file defines a macro called `COMMON_PKG_RCSMT' -which is a generic definition for a surface mount footprint with two -identical, rectangular pads. This macro will be called with different -parameters to fill out the family of parts. The arguments to the -`COMMON_PKG_RCSMT' are: - # ------------------------------------------------------------------- - # the definition for surface mount resistors and capacitors - # $1: canonical name - # $2: name on PCB - # $3: value - # $4: pad width (in direction perpendicular to part) - # $5: pad length (in direction parallel with part) - # $6: pad spacing (center to center) - # $7: distance from edge of pad to silk (in direction - # perpendicular to part) - # $8: distance from edge of pad to silk (in direction parallel - # with part) - # $9: Set to "no" to skip silk screen on the sides of the part - - define(`COMMON_PKG_RCSMT', - `define(`XMIN', `eval( -1*`$6'/2 - `$5'/2 - `$8')') - define(`XMAX', `eval( `$6'/2 + `$5'/2 + `$8')') - define(`YMIN', `eval(-1*`$4'/2 - `$7')') - define(`YMAX', `eval( `$4'/2 + `$7')') - Element(0x00 "$1" "$2" "$3" eval(XMIN+20) eval(YMAX+20) 0 100 0x00) - ( - ifelse(0, eval($4>$5), - # Pads which have the perpendicular pad dimension less - # than or equal to the parallel pad dimension - Pad(eval(-1*( $6 + $5 - $4)/2) 0 - eval((-1*$6 + $5 - $4)/2) 0 eval($4) "1" 0x100) - Pad(eval(-1*(-1*$6 + $5 - $4)/2) 0 - eval(( $6 + $5 - $4)/2) 0 eval($4) "2" 0x100) - , - # Pads which have the perpendicular pad dimension greater - # than or equal to the parallel pad dimension - Pad(eval(-1*$6/2) eval(-1*($4 - $5)/2) - eval(-1*$6/2) eval(($4 - $5)/2) eval($5) "1" 0x100) - Pad(eval( $6/2) eval(-1*($4 - $5)/2) - eval( $6/2) eval(($4 - $5)/2) eval($5) "2" 0x100) - ) - - # silk screen - # ends - ElementLine(XMIN YMIN XMIN YMAX 10) - ElementLine(XMAX YMAX XMAX YMIN 10) - # sides - ifelse($9,"no", - #skip side silk - , - ElementLine(XMIN YMIN XMAX YMIN 10) - ElementLine(XMAX YMAX XMIN YMAX 10) - ) - Mark(0 0) - )') - Note that the part has been defined with the mark located at `(0,0)' -and that the pads have been placed with the mark at the common centroid -of the footprint. While not a requirement, this is highly desirable -when developing a library that will need to interface with a pick and -place machine used for factory assembly of a board. - - The final part of `example.inc' defines particular versions of the -generic footprint we have created. These particular versions correspond -to various industry standard package sizes. - # 0402 package - # - # 30x30 mil pad, 15 mil metal-metal spacing=> - # 15 + 15 + 15 = 45 center-to-center - define(`PKG_RC0402', - `COMMON_PKG_RCSMT(`$1', `$2', `$3', 30, 30, 45, 0, 10, "no")') - - # 0603 package - # - # 40x40 mil pad, 30 mil metal-metal spacing=> - # 30 + 20 + 20 = 70 center-to-center - define(`PKG_RC0603', - `COMMON_PKG_RCSMT(`$1', `$2', `$3', 40, 40, 70, 10, 10)') - - # 1206 package - # - # 40x60 mil pad, 90 mil metal-metal spacing=> - # 90 + 20 + 20 = 130 center-to-center - define(`PKG_RC1206', - `COMMON_PKG_RCSMT(`$1', `$2', `$3', 60, 40, 130, 10, 10)') - - At this point, the `example.inc' file could be used by third party -tools such as `gsch2pcb'. However to fully integrate our footprints -into PCB we need to create the `example.m4' and `example.list' files. -The `example.m4' file defines descriptions for the new footprints. - define(`Description_my_RC0402', - ``Standard SMT resistor/capacitor (0402)'') - define(`Description_my_RC0603', - ``Standard SMT resistor/capacitor (0603)'') - define(`Description_my_RC1206', - ``Standard SMT resistor/capacitor (1206)'') - Finally we need to create the `example.list' file. - my_RC0402:RC0402:RES0402 - my_RC0402:RC0402:CAP0402 - my_RC0603:RC0603:RES0603 - my_RC0603:RC0603:CAP0603 - my_RC1206:RC1206:RES1206 - my_RC1206:RC1206:CAP1206 - The first field in the list file has the name corresponding to the -Description definitions in `example.m4'. The second field is the -template name which corresponds to the macros `PKG_*' we defined in -`example.inc' with the leading `PKG_' removed. It is the second field -which controls what footprint will actually appear on the board. The -final field is the name of the part type on the board. The first line -in our `example.list' file will produce a menu entry in the library -window that reads: - CAP0402, Standard SMT resistor/capacitor (0402) - The `CAP0402' portion comes directly from the third field in -`example.list' and the longer description comes from descriptions -macros in `example.m4'. Please note that any extra white space at the -end of a line in the `.list' files will cause them to not work properly. - -9.1.4 Troubleshooting Old Style Libraries ------------------------------------------ - -A powerful technique to help debug problems with libraries is to invoke -the `m4' processor directly. This approach will provide error output -which is not visible from within PCB. The following example shows how -one might try to debug an 8 pin small outline (SO8) package. The macro -name for the package is PKG_SO8. In this example, the canonical name -that is to be associated with the part is SO8, the reference designator -is U1, and the value is MAX4107 (the part number). - - echo "PKG_SO8(SO8, U1, MAX4107)" | \ - gm4 common.m4 - | \ - awk '/^[ \t]*$/ {next} {print}' | \ - more - The `awk' call simply removes blank lines which make the output hard -to read. - - For this particular example, the output is: - Element(0x00 "SO8" "U1" "MAX4107" 146 50 3 100 0x00) - ( - Pad(10 25 38 25 20 "1" 0x00) - Pad(10 75 38 75 20 "2" 0x100) - Pad(10 125 38 125 20 "3" 0x100) - Pad(10 175 38 175 20 "4" 0x100) - Pad(214 175 242 175 20 "5" 0x100) - Pad(214 125 242 125 20 "6" 0x100) - Pad(214 75 242 75 20 "7" 0x100) - Pad(214 25 242 25 20 "8" 0x100) - ElementLine(0 0 151 0 10) - ElementArc(126 0 25 25 0 180 10) - ElementLine(101 0 252 0 10) - ElementLine(252 0 252 200 10) - ElementLine(252 200 0 200 10) - ElementLine(0 200 0 0 10) - Mark(29 25) - ) - -9.2 New Style Libraries -======================= - -Footprints for the new style library are created graphically using the -PCB program. A single footprint is saved in each file. - -9.2.1 Creating Newlib Footprints --------------------------------- - -To create - 1. Start PCB with an empty layout. - - 2. Make the component layer active. - - 3. For a leaded part, select the via tool and place vias where the - pads for the part should go. For surface mount pads, draw line - segments. Note that until the footprint is completed, the surface - mount pads will remain rounded. Currently a rectangle or polygon - may not be used as a pad. - - 4. For each via and line segment which will become a pad, select it - and press 'n' to be able to enter a name. Enter the pin number - and press enter. - - 5. Make the silk layer active. - - 6. Using the line and arc tools, draw a silk screen outline for the - part. - - 7. Using the selection tool, select all of the pins and silk screen - for the part. - - 8. Place the pointer above the reference point for the part. This is - typically the common centroid. Keeping the pointer there, - shift-right-click to bring up the popup menu and choose "convert - selection to element". - - 9. At this point, the vias, line segments, and silk screen will have - been converted to an element. To change any of the line segments - to have square ends rather than round ends, select the pads by - holding down the shift key and clicking each pad with the center - mouse button. Now under the Select menu, "Change square-flag of - selected objects" section, choose "Pins". - - 10. Select the element, shift-right-click to bring up the popup menu, - and choose "Copy Selection to Buffer". Now left-click on the - center of the new element. - - 11. Under the buffer menu, choose "save buffer elements to file" to - save the new footprint to a file. - - 12. Press ESC to exit from buffer mode. - -9.2.2 Modifying Newlib Footprints ---------------------------------- - - 1. In the `Pcb' program, instantiate the footprint you wish to modify. - - 2. Using the selection tool, select the footprint. - - 3. Now left-click on the selected element, this brings up a popup - menu, choose "Cut Selection to Buffer" from the popup menu. - - 4. Under the buffer menu, choose "break buffer element to pieces", - and then left-click to place the broken apart footprint to an open - area of the layout. Note that you must use the items under the - buffer menu, the items with the same names in the popup menu do - not work. - - 5. Make your desired modifications to the footprint and then convert - the pieces back to an element using the same procedure as when - starting from scratch on a new footprint. - - -File: pcb.info, Node: Schematic Frontends, Next: Installation, Prev: Library Creation, Up: Top - -10 Schematic Capture for PCB -**************************** - -When designing a circuit board of any complexity, a schematic capture -front-end for the design is highly desired. Any schematic capture -program which is able to generate a netlist in a user defined format as -well as a bill of materials can be made to work with PCB. Currently, we -are aware of two freely available schematic capture programs which can -interface with PCB. This chapter shows how a design can be taken from -start to finish using either of these two tools for schematic capture -and PCB for layout. - -* Menu: - -* gEDA:: Interfacing with GNU EDA (gEDA). -* xcircuit:: Interfacing with xcircuit. - - -File: pcb.info, Node: gEDA, Next: xcircuit, Up: Schematic Frontends - -10.1 gEDA -========= - -This section shows how to use gEDA as the schematic capture front-end -for a PCB design. This section is not intended to be complete -documentation on gEDA and it is assumed that the user has at least some -familiarity with the gEDA suite of programs. - - The basic steps in a gEDA + PCB design flow are: - 1. Set up project directories - - 2. Set up gEDA (gschem/gnetlist) config files - - 3. Set up gsch2pcb config files - - 4. Capture schematics using `gschem' (part of gEDA) - - 5. Create any unique PCB footprints needed for the design - - 6. Generate initial PCB design using `gsch2pcb' (part of gEDA) - - 7. Layout circuit board using `pcb' - - 8. Make any additional schematic changes with `gschem' and forward - annotate to PCB with `gsch2pcb' - - 9. Generate photoplot files (RS-274X, also known as "Gerber") for - board vendor - -10.1.1 Set Up Project Directories ---------------------------------- - -Although not required, a typical project directory will contain the -schematics and board layout at the top level. Schematic symbols and -circuit board footprints which are unique to this project are stored in -subdirectories. For this example, `sym' contains the project specific -schematic symbols and `pkg' contains the project specific footprints. -Set up the project subdirectory and subdirectories by executing: - mkdir ~/myproj - cd ~/myproj - mkdir sym - mkdir pkg - mkdir pkg/newlib - mkdir pkg/m4 - -10.1.2 Set Up gEDA Config Files -------------------------------- - -The gEDA tools, specifically `gschem' and `gnetlist', use configuration -files to set the search path for symbol libraries in addition to other -user preferences. Create a file in the top level project directory -called `gschemrc'. Add the following lines to that file: - - ;; list libraries here. Order matters as it sets the - ;; search order - (component-library "./sym") - This sets the local search path for the schematic capture program -`gschem'. Now the netlister, `gnetlist', must also be configured. -This can be done by copying the file `gschemrc' to `gnetlistrc' by -running `cp gschemrc gnetlistrc'. Alternatively, you can create a soft -link so only a single file needs to be updated if additional symbol -paths are added. The link is created by running `ln -s gschemrc -gnetlistrc'. - -10.1.3 Set Up `gsch2pcb' Config Files -------------------------------------- - -The program `gsch2pcb', not to be confused with the older `gschem2pcb' -script, is used to link the schematic to layout. `gsch2pcb' is -responsible for creating the netlist used to provide connectivity -information to PCB as well creating an initial layout with all -components instantiated in the design. Forward annotation of schematic -changes to the layout is also done using `gsch2pcb'. `gsch2pcb' uses a -project file to set up the schematic file names, PCB library locations, -and output file names. Create a project file called `project' using -the following as an example: - - # List all the schematics to be netlisted - # and laid out on the pc board. - schematics first.sch second.sch third.sch - - # For an output-name of foo, gsch2pcb generates files - # foo.net, foo.pcb, and foo.new.pcb. If there is no - # output-name specified, the file names are derived from - # the first listed schematic, i.e. first.net, etc. - output-name preamp - -10.1.4 Capture Schematics Using `gschem' ----------------------------------------- - -This section is fairly brief and assumes familiarity with using the -`gschem' schematic capture program. As you are creating your -schematics, be sure to observe the following rules: - * Make sure that each component in the schematic has a `footprint' - attribute that corresponds to a footprint in the PCB library or a - footprint you plan on creating. - - * Make sure all reference designators are unique. One way to ensure - this is to run the `refdes_renum' script (part of gEDA) after the - schematics are created. - -10.1.5 Create Any Unique PCB Footprints ---------------------------------------- - -Create the new footprints you design needs using either the m4 style or -newlib style of PCB libraries. Refer to *note Library Creation:: for -details on this process. For m4 style footprints, store them in the -`pkg/m4' subdirectory and for newlib footprints, store them in the -`pkg/newlib' subdirectory. - -10.1.6 Generate Initial PCB Design Using `gsch2pcb' ---------------------------------------------------- - -The `gsch2pcb' program connects the schematic and layout. It basic -operation is to call `gnetlist' to generate the connectivity netlist -that PCB used to verify connectivity and to instantiate all elements -found in the schematic to a new layout. The default, as of `gsch2pcb' -version 0.9, is to use any found m4 style parts first and then search -for newlib style if no old style part was found. By using the -`--use-files' or `-f' flag to `gsch2pcb' priority is given to newlib -style parts even if m4 style are found. You may wish to verify this in -the `gsch2pcb' documentation in case this changes in the future. To -start your layout, run `gsch2pcb project' where `project' is the -project file created previously. This will create a new netlist file, -`preamp.net', and a new layout file, `preamp.pcb'. - -10.1.7 Layout Circuit Board ---------------------------- - -Run PCB on the new layout by running `pcb preamp.pcb'. Load the -netlist file by selecting "load netlist file" from the "file" menu. In -the file selection dialog box, choose `preamp.net'. This loads -connectivity information into PCB. - - Using the selection tool, grab and move apart the various footprints -with the middle mouse button. Once the parts are moved apart from each -other, choose "optimize rats-nest" from the "Connects" menu. This menu -choice will display and optimize the rats nest. Use the rats nest to -help guide placement of the parts. You may wish to re-run the "optimize -rats-nest" command after moving parts around. - - After the placement is complete, use the line tool to add traces to -the board. As traces are added, the corresponding rats line will -disappear. - -10.1.8 Forward Annotation of Schematic Changes ----------------------------------------------- - -If schematic changes are made after the layout has started, `gsch2pcb' -can be used to forward annotate these changes to the layout. To -forward annotate schematic changes, run `gsch2pcb project'. This -command will create the files `preamp.new.pcb', `preamp.net', and -modify the file `preamp.pcb'. The modifications to `preamp.pcb' -include forward annotation of schematic component value changes, adds -any new components, and removes any deleted components. - -10.1.9 Generate Photoplot Files (RS-274X) ------------------------------------------ - -After the layout is complete, choose "edit layer-groupings" from the -"Settings" menu. The LayerGroups form lets you specify which layers -will appear in each output layer group. For example, in the default -form, layer group 1 has "front" and "front side" in it. The output -file `1.gbr' if DOS file names are used, or `somename_front.gbr' if -long file names are used will contain the "front" and "front side" -layers in it. Usually the defaults are sufficient, but this form is -still a useful reference. - - Choose "print layout..." from the "File" menu. In the print dialog -box, select "Gerber/RS-274X" for the device driver. Select the -"outline", "alignment", and "drillhelper" options. To get DOS -compatible file names, select the "DOS (8.3) names" option, otherwise -enter "preamp" for the filename. Press "OK". - - The following output files should have been created in the project -directory. The names in parentheses correspond to the DOS compatible -output file names. -`preamp_frontsilk.gbr (csilk.gbr)' - Top side silk screen. - -`preamp_frontmask.gbr (cmask.gbr)' - Top side soldermask relief. - -`preamp_front.gbr (1.gbr)' - Top copper. - -`preamp_backmask.gbr (smask.gbr)' - Bottom side soldermask relief. - -`preamp_back.gbr (2.gbr)' - Bottom Copper. - -`preamp_fab.gbr (fab.gbr)' - Fabrication drawing. Also known as the drill drawing. This - drawing is used for reference by the board vendor but is not - directly used in the fabrication process. - -`preamp_plated-drill.cnc (pdrill.cnc)' - NC Drill format file for the plated through holes. - -`preamp_unplated-drill.cnc (udrill.cnc)' - NC Drill format file for the unplated through holes. - -`preamp_bom.txt (bom.txt)' - A bill of materials for the layout. - -`preamp_xy.txt (xy.txt)' - Centroid (X-Y) data for driving automated assembly equipment. - - -File: pcb.info, Node: xcircuit, Prev: gEDA, Up: Schematic Frontends - -10.2 xcircuit -============= - -If anyone cares to contribute this section, it will get added. Please -submit changes to the bug tracking system for PCB which can be found -from the PCB homepage at `http://pcb.gpleda.org'. - - -File: pcb.info, Node: Installation, Next: Custom Menus, Prev: Schematic Frontends, Up: Top - -Appendix A Installation and Troubleshooting -******************************************* - -Compiling and installing the package should be straightforward. If any -problems occur, please contact the author , -or the current maintainer to find a -solution and include it into the next release. - -* Menu: - -* compiling:: Compiling and installing. -* problems:: Troubleshooting. - - -File: pcb.info, Node: compiling, Next: problems, Up: Installation - -A.1 Compiling and Installing -============================ - -This section covers the steps which are necessary to compile the -package. - -* Menu: - -* quickstart:: Quick start. -* running configure:: Customizing Pcb with Configure - - -File: pcb.info, Node: quickstart, Next: running configure, Up: compiling - -A.1.1 Quick Start ------------------ - -Starting with version 2.0, `Pcb' has switched to a GNU -autoconf/automake build system. Installation of `Pcb' consists of -three steps: configuration, building, and installing. In a typical -installation, these steps are as simple as - ./configure - make - make install - - -File: pcb.info, Node: running configure, Prev: quickstart, Up: compiling - -A.1.2 Running the configure Script ----------------------------------- - -The `configure' script accepts all of the standard GNU configure -options. For a complete list of configuration options, run -`./configure --help'. - -`INFOLIBDIR' - must be set to the directory where your GNU info files are located. - -`PCBLIBDIR' - is the path of a directory where the font files will be installed. - -`DEFAULTFONT' - the name of the default font file. - -`DEFAULTLIBRARY' - the name of the default library. - -`GNUM4' - the name of GNUs m4 version. - -`BTNMOD' - If your window manager has already bound _Mod1_ together with some - function keys you may want to change this setting. This is true - for HP-VUE. - - - If you find things which must be changed to compile on your system, -please add the appropriate autoconf tests (if you are familiar with -that) and mail a copy to the maintainer, harry eaton, at -. - - If you do not have the appropriate permissions you should run -`./pcbtest.sh' in the `src' directory to run `Pcb' from the -installation directory. - - -File: pcb.info, Node: problems, Prev: compiling, Up: Installation - -A.2 Troubleshooting -=================== - -There are some known problems. Most of them are related to missing -parts of a standard `X11' distribution. Some others are caused by third -party applications such as `X' servers. To make this list more complete -please mail your problems and, if available, solutions to the author. -The mail address may be found at the beginning of this chapter. In any -case, read *note X11::. - - By the way, you `MUST HAVE AN ANSI COMPILER' to make `Pcb' work. - - Another source of problems are older versions of `flex' and `bison'. -`Pcb' definitely works with `flex-2.4.7' and `bison-1.22' or later. The -problems will result in a _syntax error_ while parsing files. This -should only be a problem if you have modified the `flex' or `bison' -input files. - - The following list gives you just an idea because I'm not able to -test all `Pcb' releases on all platforms. - -* Menu: - -* HP:: Hewlett-Packard series 700 and 800 running HP-UX 10.* -* Sun:: Sun, Solaris 2.5 -* SGI:: SGI, IRIX 5.3 and 6.* -* DEC Alpha:: DEC Alpha, DEC UNIX 3.2c and 4.0 -* SCO:: SCO Unix ODT 3.0, PC hardware -* Linux:: Linux 0.99pl14 and later -* BSD:: FreeBSD, NetBSD ... -* X11:: Refers to `X11R4', `X11R5', and `OpenWindows' -* TeX and Manuals:: Problems creating the `pcb.dvi' - - -File: pcb.info, Node: HP, Next: Sun, Up: problems - -A.2.1 HP Series 700 and 800 ---------------------------- - -You have to install several `X11' include files or, better, install a -complete `X11R5' release. Hewlett-Packard doesn't support the Athena -Widgets. So the header files and libraries are missing from the -application media, but they are available as a patch. They also do not -ship the `ANSI' compiler with the normal operating system release so -you have to buy one or use `GCC'. Some of the tools are available as -patches. - - In addition, `Pcb' has been successfully tested on these platforms -with `HPUX 9.*, 10.*' running self-compiled `X11R5'. - - -File: pcb.info, Node: Sun, Next: SGI, Prev: HP, Up: problems - -A.2.2 Sun SPARC architecture ----------------------------- - -There are no known problems with Sun machines if they use `X11R5' -instead of `OpenWindows'. `Pcb' compiled successfully with all kinds of -SPARCstations `Solaris-2.[345]'. - - For problems with `OpenWindows' refer to *note X11::. - - -File: pcb.info, Node: SGI, Next: DEC Alpha, Prev: Sun, Up: problems - -A.2.3 Silicon Graphics ----------------------- - -`Pcb' has been tested on some boxes running either `IRIX-4.0.5' or -`IRIX-5.3'. The former one uses a `X11R4' server. There are no -problems. For known problems with `X11R4', see *note X11::. - - -File: pcb.info, Node: DEC Alpha, Next: SCO, Prev: SGI, Up: problems - -A.2.4 DEC Alpha ---------------- - -`Pcb' compiled and runs without problems on `DEC UNIX V3.2c'. - - -File: pcb.info, Node: SCO, Next: Linux, Prev: DEC Alpha, Up: problems - -A.2.5 SCO Unix --------------- - -John DuBois wrote: - `SCO-ODT-3.0' requires the latest version of tls003, the Athena - widget library (available from sosco.sco.com). The main problems - I have encountered are it core dumps fairly often, especially - while loading/dropping elements... - I'll see what I am able to do as soon as I have access to an `SCO' -system. - - -File: pcb.info, Node: Linux, Next: BSD, Prev: SCO, Up: problems - -A.2.6 Linux ------------ - -Since the `X11' version of `Pcb' has been developed on a Linux system -here are no known problems. - - -File: pcb.info, Node: BSD, Next: X11, Prev: Linux, Up: problems - -A.2.7 FreeBSD and NetBSD ------------------------- - -`Pcb' has been tested on NetBSD and works without any problems. You -may also be able to find a NetBSD package at -`ftp://ftp.netbsd.org/pub/NetBSD/packages/cad/pcb/README.html' or a -FreeBSD port at -`http://www.freebsd.org/cgi/url.cgi?ports/cad/pcb/pkg-descr'. - - -File: pcb.info, Node: X11, Next: TeX and Manuals, Prev: BSD, Up: problems - -A.2.8 Problems related to X11 ------------------------------ - -There are a some problems related to `X11R4' or systems derived from -`X11' such as `OpenWindows'. *Note Sun::. You at least have to change -all occurances of _baseTranslations_ in the resource files to -_translations_ if you are using a `X11R4' server. Look at the `X11R5' -_Intrinsics_ manual for details. - - The panner widget (print dialog box) appears only in release `X11R5' -and later. It really simplifies adjusting the offsets. With earlier -releases the printout will always appear in the center of the page. - - You may have some problems in a mixed `X11-OpenWindows' environment. - - `Pcb' has been tested successfully with `X11R6' under Linux 1.1.59 -and later. - - -File: pcb.info, Node: TeX and Manuals, Prev: X11, Up: problems - -A.2.9 Problems related to TeX ------------------------------ - -If your `TeX' installation complains about a missing `texinfo.tex' file -copy the one included in this release (directory `doc' to your `TeX' -macro directory. Note, there are probably newer versions of this file -available from some FTP sites. `TeX-3.0' failed, `TeX-3.14' worked -just fine. Check our FTP server _ftp.uni-ulm.de_ for ready-to-print -versions of the manuals. - - -File: pcb.info, Node: Custom Menus, Next: Regular Expressions, Prev: Installation, Up: Top - -Appendix B Customizing the Menus -******************************** - -The menu system is driven off a data file that contains "resources". A -resource is a hierarchical description of a data tree which, in this -case, is mapped to the hierarchical menus used by Pcb. - -* Menu: - -* Resource Syntax:: What a resource file looks like. -* Menu Definitions:: Using a resource to define a menu. -* Menu Files and Defaults:: Where Pcb looks for its menu resource. - - -File: pcb.info, Node: Resource Syntax, Next: Menu Definitions, Up: Custom Menus - -B.1 Resource Syntax -=================== - -A resource file is a simple text file. It contains curly braces to -group things, spaces between things, and double quotes when strings -need to include spaces. There are four fundamental ways of adding data -to a resource. - - First, a string (either a single word or a quoted string with spaces, -we call both "strings" in this appendix) can be added all by itself, to -add a string resource to the current resource. This is used, for -example, to define the string printed on a menu button. In this -example, four strings are added to the FILE resource: - - File = { - Sample - "longer sample" - some text - } - - Second, a named string may be added by giving two strings separated -by an equals sign. This is used to specify X resources and a few other -optional parameters of menus, for example. Note that a string all by -itself is thus an "unnamed" string. - - {"Layer groups" foreground=red sensitive=false} - - Third, an unnamed subresource may be added. This is used to create -submenus and menu buttons. To add a subresource, simply group other -things in curly braces. This example describes a resource containing -one string and three subresources: - - {File - {New do_new()} - {Save do_save()} - {Quit do_quit()} - } - - Lastly, a named subresource may be added by prefixing an unnamed -subresource with a string and an equals sign, just as when naming -strings. This syntax is used to name the resources used for the main -menu and popup menus: - - MainMenu = { - ... - } - - Additionally, the menu parser allows for "hooks" whereby portions of -the menu system can be programmatically created at runtime by the -application. These hooks are invoked by a single word proceeded by an -at sign, such as this example where most of the Sizes menu is created -automatically: - - {Sizes - @sizes - {"Adjust active sizes ..." AdjustStyle(0)} - } - - In addition to all that, any unquoted pound sign (`#') begins a -comment. Commented text continues until the end of the containing -line. Comments may begin at the beginning of a line, or after other -text on the line: - - # This is a comment - MainMenu = { # This is also a comment - - -File: pcb.info, Node: Menu Definitions, Next: Menu Files and Defaults, Prev: Resource Syntax, Up: Custom Menus - -B.2 Menu Definitions -==================== - -To best understand this section, you should find the `pcb-menu.res' -file that your Pcb uses and refer to it for examples (*note Menu Files -and Defaults::). Note that the lesstif GUI uses `pcb-menu.res' and the -GTK+ GUI uses `gpcb-menu.res'. The file format is identical however -and if so desired, one can make one file be a soft link to the other. - - A resource defines a menu when it meets certain semantic -requirements. The menu hierarchy is reflected as a hierarchy of unnamed -subresources, with the first string of each subresource defining the -label used for the menu button. A subresource that itself contains -subresources becomes a submenu, a subresource that does not becomes a -button. - - A submenu should only contain subresources for the buttons or -submenus within that submenu. Two exceptions are allowed: an initial -string sets the label, and the string "-" (a single dash) will create a -separator. - - A button should not contain subresources, but will contain many -strings, named and unnamed. The first member shall be an unnamed -string which is the label for the button. Any other unnamed strings -within the button's resource will be used as actions (much like the -.Xdefaults action strings), which are functions that will be called -when the button is pressed (or popped up, or created, depending on the -action). As a convenience, if a left parenthesis is seen, the current -"word" will continue at least until the matching right parenthesis. -This allows you to pass strings with spaces as arguments to actions -without needing to quote the action. - - Named resources in button resources will be used as X resources. -Such resources can be used to set the font, color, and spacing of -buttons. As a convenience, "fg" can be used as an abbreviation for -"foreground". - - Within the menu's resource file, Pcb will look for a few key named -subresources. At the moment, the only one it looks for is one called -`MainMenu'. This will be used for the main menu bar. In the future, -other named subresources will be used for popup resources. - - Given all this, a small sample `pcb-menu.res' would be: - - MainMenu = { - {File - {"Load layout" Load(Layout)} - - - {"Quit Program" Quit() fg=red font=10x20} - } - } - - Within the Pcb sources are specially crafted comments that mark all -the actions, flags, menu hooks, and whatnot that Pcb offers. Read the -file `src/gather-actions' in the Pcb source tree for documentation for -these comments. - - -File: pcb.info, Node: Menu Files and Defaults, Prev: Menu Definitions, Up: Custom Menus - -B.3 Menu Files and Defaults -=========================== - -Pcb will look for a file which defines its menus, trying the following -names (the example is for the lesstif GUI, the GTK+ GUI has -"gpcb-menu.res" in place of "pcb-menu.res"): - - ./pcb-menu.res - $HOME/.pcb-menu.res - $PCBLIBDIR/pcb-menu.res - - - Note that PCBLIBDIR defaults to `/usr/local/share/pcb' (hence, -`/usr/local/share/pcb/pcb-menu.res'). The `' entry refers to -a menu definition within the Pcb application itself. The master file -for all this is the file `src/pcb-menu.res' in the Pcb source tree. -This master source is used to create the internal menu definition as -well as being installed in `$pcblibdir'. - - -File: pcb.info, Node: Regular Expressions, Next: Standard Drill Sizes, Prev: Custom Menus, Up: Top - -Appendix C Element Search/Regular Expressions -********************************************* - -C.1 Element Search/Regular Expressions -====================================== - -`Pcb''s search is based on POSIX 1003.2 Regular Expressions. Full POSIX -Regular Expressions are supported by `Pcb' if the regex library was -available when `Pcb' was built. One difference from the regular -expressions found in tools like awk or grep is that PCB implicitly adds -a "^" to the begining of a regular expression and "$" to the end of the -regular expression. For example, if you enter "C1", the actual regular -expression used internally is "^C1$". Another difference is that -search patterns in pcb are not case sensitive. That is, "CON" is -treated the same as "con". - - It is easier to show by example how to search than explain POSIX -1003.2. With regular expressions most characters are just themselves, -but some are special: - -`*' - Matches 0 or more instances of preceding character. - -`+' - Matches 1 or more instances of preceding character. - -`?' - Matches 0 or 1 instances of preceding character. - -`.' - Matches any single character other than the newline character. - -`|' - The vertical bar is the alternation operator. It combines two - regular expressions. The result matches if either of them matches. - -`\' - A backslash indicates the next character should not be interpreted - literally if it normally is, and should be interpreted literally - if it normally isn't. - -`{n}' - An integer n enclosed in curly brackets matches the preceding item - if it occurs exactly n times. - -`[ ]' - A pair of square brackets matches every character they contain. - Characters may be given explicitly, or as ranges. - -`-' - A hyphen in the context of square brackets denotes the range - between the preceding and the following character. E.g., the - range of digits is "0-9" . The range of letters from C to K is - "C-K" . - -`\^ inside square brackets' - Inside square brackets the caret is an anti operator. Its presence - makes the square prackets match anything except the contents of - the brackets. - -`( )' - Round parenthesis group parts of a regular expression. This is - very much like they do in math formulars. - - - If you need a special character literally, you can escape it with a -backslash. - - The following examples illustrate how regular expressions can be -used to specify element names (reference designators) to search for. -`C5' - Select the element whose name is exactly "C5". - -`C5 | R3' - Select C5 and R3. - -`C.*' - Select all elements whose name start with the letter "C", such as - C5, or C42, or CF1. - -`C.*1' - Select all elements that start with "C" and end with "1", such as - C1, or C51 or C5/9B71. - -`R10?' - Search for R1 or R10, but will not select R100 or R105. The - question mark is a quantifier for the character "0". - -`R128+' - Selects R128, R1288, R12888, etc. - -`TB.' - Select all terminal blocks having exactly one character designator - after "TB" such as TB1, TBA, or TBx but not TB. - -`TB..' - Select all terminal blocks having a two character designator such - as TB21 or TB1a. - -`TB.*' - Select all terminal blocks with any designator. - -`.*31' - Select all items, whose name ends with "31" such as Q31, or R31, - or R531. - -`Q[12]' - Select Q1 and Q2. - -`[A-D].*' - Select all items, whose name starts with "A", "B", "C", or "D". - -`.*N{2}.*' - Select all items, whose name contains two "N" in a row such as - CONN23, or connA, but not CON5 - -`[^D].*' - Select all items that do not start with the letter "D", such as - C2, or R34, but not D34 - - - -File: pcb.info, Node: Standard Drill Sizes, Next: Centroid File Format, Prev: Regular Expressions, Up: Top - -Appendix D Standard Drill Size Tables -************************************* - -D.1 American Standard Wire Size Drills -====================================== - -Drill Diameter Drill Diameter Drill Diameter -Size (inches) Size (inches) Size (inches) -97 .0059 96 .0063 95 .0067 -94 .0071 93 .0075 92 .0079 -91 .0083 90 .0087 89 .0091 -88 .0095 87 .0100 86 .0105 -85 .0110 84 .0115 83 .0120 -82 .0125 81 .0130 80 .0135 -79 .0145 78 .0160 77 .0180 -76 .0200 75 .0210 74 .0225 -73 .0240 72 .0250 71 .0260 -70 .0280 69 .0292 68 .0310 -67 .0320 66 .0330 65 .0350 -64 .0360 63 .0370 62 .0380 -61 .0390 60 .0400 59 .0410 -58 .0420 57 .0430 56 .0465 -55 .0520 54 .0550 53 .0595 -52 .0635 51 .0670 50 .0700 -49 .0730 48 .0760 47 .0785 -46 .0810 45 .0820 44 .0860 -43 .0890 42 .0935 41 .0960 -40 .0980 39 .0995 38 .1015 -37 .1040 36 .1065 35 .1100 -34 .1110 33 .1130 32 .1160 -31 .1200 30 .1285 29 .1360 -28 .1405 27 .1440 26 .1470 -25 .1495 24 .1520 23 .1540 -22 .1570 21 .1590 20 .1610 -19 .1660 18 .1695 17 .1730 -16 .1770 15 .1800 14 .1820 -13 .1850 12 .1890 11 .1910 -10 .1935 9 .1960 8 .1990 -7 .2010 6 .2040 5 .2055 -4 .2090 3 .2130 2 .2210 -1 .2280 - -D.2 American Standard Letter Size Drills -======================================== - -Drill Diameter Drill Diameter Drill Diameter -Size (inches) Size (inches) Size (inches) -A .2340 B .2380 C .2420 -D .2460 E .2500 F .2570 -G .2610 H .2660 I .2720 -J .2770 K .2810 L .2900 -M .2950 N .3020 O .3160 -P .3230 Q .3320 R .3390 -S .3480 T .3580 U .3680 -V .3770 W .3860 X .3970 -Y .4040 Z .4130 - -D.3 Fractional Inch Size Drills -=============================== - -Drill Diameter Drill Diameter Drill Diameter -Size (inches) Size (inches) Size (inches) -1/64 .0156 1/32 .0313 3/64 .0469 -1/16 .0625 5/64 .0781 3/32 .0938 -7/64 .1094 1/8 .1250 9/64 .1406 -5/32 .1562 11/64 .1719 3/16 .1875 -13/64 .2031 7/32 .2188 15/64 .2344 -1/4 .2500 17/64 .2656 9/32 .2812 -19/64 .2969 5/16 .3125 21/64 .3281 -11/32 .3438 23/64 .3594 3/8 .3750 -25/64 .3906 13/32 .4062 27/64 .4219 -7/16 .4375 29/64 .4531 15/32 .4688 -31/64 .4844 1/2 .5000 33/64 .5156 -17/32 .5313 35/64 .5469 9/16 .5625 -37/64 .5781 19/32 .5938 39/64 .6094 -5/8 .6250 41/64 .6406 21/32 .6562 -43/64 .6719 11/16 .6875 45/64 .7031 -23/32 .7188 47/64 .7344 3/4 .7500 -49/64 .7656 25/32 .7812 51/64 .7969 -13/16 .8125 53/64 .8281 27/32 .8438 -55/64 .8594 7/8 .8750 57/64 .8906 -29/32 .9062 59/64 .9219 15/16 .9375 -61/64 .9531 31/32 .9688 63/64 .9844 -1 1.0000 - -D.4 Metric Drills -================= - -Drill Diameter Drill Diameter Drill Diameter -Size (inches) Size (inches) Size (inches) -0.20 mm .00787 0.25 mm .00984 0.30 mm .0118 -0.35 mm .0138 0.40 mm .0158 0.45 mm .0177 -0.50 mm .0197 0.55 mm .0217 0.60 mm .0236 -0.65 mm .0256 0.70 mm .0276 0.75 mm .0295 -0.80 mm .0315 0.85 mm .0335 0.90 mm .0354 -0.95 mm .0374 1.00 mm .0394 1.05 mm .0413 -1.10 mm .0433 1.15 mm .0453 1.20 mm .0472 -1.25 mm .0492 1.30 mm .0512 1.35 mm .0531 -1.40 mm .0551 1.45 mm .0571 1.50 mm .0591 -1.55 mm .0610 1.60 mm .0630 1.65 mm .0650 -1.70 mm .0669 1.75 mm .0689 1.80 mm .0709 -1.85 mm .0728 1.90 mm .0748 1.95 mm .0768 -2.00 mm .0787 2.05 mm .0807 2.10 mm .0827 -2.15 mm .0846 2.20 mm .0866 2.25 mm .0886 -2.30 mm .0906 2.35 mm .0925 2.40 mm .0945 -2.45 mm .0965 2.50 mm .0984 2.55 mm .1004 -2.60 mm .1024 2.65 mm .1043 2.70 mm .1063 -2.75 mm .1083 2.80 mm .1102 2.85 mm .1122 -2.90 mm .1142 2.95 mm .1161 3.00 mm .1181 -3.10 mm .1220 3.15 mm .1240 3.20 mm .1260 -3.25 mm .1280 3.30 mm .1299 3.40 mm .1339 -3.50 mm .1378 3.60 mm .1417 3.70 mm .1457 -3.75 mm .1476 3.80 mm .1496 3.90 mm .1535 -4.00 mm .1575 4.10 mm .1614 4.20 mm .1654 -4.25 mm .1673 4.30 mm .1693 4.40 mm .1732 -4.50 mm .1772 4.60 mm .1811 4.70 mm .1850 -4.75 mm .1870 4.80 mm .1890 4.90 mm .1929 -5.00 mm .1969 5.10 mm .2008 5.20 mm .2047 -5.25 mm .2067 5.30 mm .2087 5.40 mm .2126 -5.50 mm .2165 5.60 mm .2205 5.70 mm .2244 -5.75 mm .2264 5.80 mm .2283 5.90 mm .2323 -6.00 mm .2362 6.10 mm .2402 6.20 mm .2441 -6.25 mm .2461 6.30 mm .2480 6.40 mm .2520 -6.50 mm .2559 6.60 mm .2598 6.70 mm .2638 -6.75 mm .2657 6.80 mm .2677 6.90 mm .2717 -7.00 mm .2756 7.10 mm .2795 7.20 mm .2835 -7.25 mm .2854 7.30 mm .2874 7.40 mm .2914 -7.50 mm .2953 7.60 mm .2992 7.70 mm .3031 -8.00 mm .3150 8.10 mm .3189 8.20 mm .3228 -8.25 mm .3248 8.30 mm .3268 8.40 mm .3307 -8.50 mm .3346 8.60 mm .3386 8.70 mm .3425 -8.75 mm .3445 8.80 mm .3465 8.90 mm .3504 -9.00 mm .3543 9.10 mm .3583 9.20 mm .3622 -9.25 mm .3642 9.30 mm .3661 9.40 mm .3701 -9.50 mm .3740 9.60 mm .3780 9.70 mm .3819 -9.75 mm .3839 9.80 mm .3858 9.90 mm .3898 -10.00 mm .3937 10.10 mm .3976 10.20 mm .4016 -10.25 mm .4035 10.30 mm .4055 10.40 mm .4094 -10.50 mm .4134 10.60 mm .4173 10.70 mm .4213 -10.80 mm .4252 10.90 mm .4291 11.00 mm .4331 -11.10 mm .4370 11.20 mm .4409 11.25 mm .4429 -11.30 mm .4449 11.40 mm .4488 11.50 mm .4528 -11.60 mm .4567 11.70 mm .4606 11.75 mm .4626 -11.80 mm .4646 11.90 mm .4685 12.00 mm .4724 -12.50 mm .4921 13.00 mm .5118 13.50 mm .5315 -14.00 mm .5512 14.50 mm .5709 15.00 mm .5906 -15.50 mm .6102 16.00 mm .6299 16.50 mm .6496 -17.00 mm .6693 17.50 mm .6890 18.00 mm .7087 -18.50 mm .7283 19.00 mm .7480 19.50 mm .7677 -20.00 mm .7874 20.50 mm .8071 21.00 mm .8268 -21.50 mm .8465 22.00 mm .8661 22.50 mm .8858 -23.00 mm .9055 23.50 mm .9252 24.00 mm .9449 -24.50 mm .9646 25.00 mm .9843 - - -File: pcb.info, Node: Centroid File Format, Next: Action Reference, Prev: Standard Drill Sizes, Up: Top - -Appendix E Centroid (X-Y) File Format -************************************* - -E.1 Overview -============ - -E.2 File Format -=============== - -The centroid output file is in a standard comma seperated values (CSV) -format. Comment lines begin with a "#". The output file contains a -header with an RCS Id tag (useful for those who will check the file -into a version control system), a version number for the file format, -some comments containing the author and title of the board, and a -comment describing the remainder of the file format. - - An example centroid file is shown below. - - - # $Id$ - # PcbXY Version 1.0 - # Date: Fri Jul 22 03:40:08 2005 UTC - # Author: PCB User - # Title: MyBoard - PCB X-Y - # RefDes, Description, Value, X, Y, rotation, top/bottom - # X,Y in mils. rotation in degrees. - # -------------------------------------------- - R61,"0603","10",2610.00,3560.00,90,top - J5,"AMPHENOL_ARFX1231","unknown",2390.00,4220.00,180,top - C13,"0402","0.01u",2340.00,3014.00,270,top - -E.3 Computation of Centroid and Rotation -======================================== - -The center of each element is found by averaging the (X,Y) coordinates -for the center of each pin and pad in the element. For example if an -element has 2 pins, 1 at (1,0) and another at (1,4) then the centroid -will be at (1,2). - - The calculation of rotation is a bit more complex. Currently a -rotation is not stored for each element but rather the rotated element -is stored. In other words if the element from the library has a pin at -(0,0) and (0,2) and it has been rotated by 90 degrees, then the `.pcb' -file will store (0,0) and (2,0) for the pin locations with no -indication that they have been rotated from the original. - - In the event that the element has only 1 pin, then the rotation is -set to zero. If the element has only one pad (as opposed to a -through-hole pin), then the rotation of the pad is used. - - When the element has multiple pins, the location of pin #1 is placed -in the coordinate system which has the centroid of the part at (0,0). -Then which quadrant pin #1 falls in determines the rotation. Zero -degrees of rotation is defined as pin #1 being in the upper left -quadrant. Increasing angles correspond to counterclockwise rotation so -a rotation of 90 degrees places pin #1 in the lower left quadrant. -Currently, the only allowed rotations are 0, 90, 180, and 270 degrees. - - If pin #1 happens to be at the centroid of the part, then pin #2 is -examined to see which quadrant it is located in. The same rules apply -for the definitions of rotation. In other words, when pin #1 is at the -centroid of the part and pin #2 is in the upper left quadrant, the -rotation is declared to be zero degrees. - - -File: pcb.info, Node: Action Reference, Next: Glossary, Prev: Centroid File Format, Up: Top - -Appendix F Action Reference -*************************** - -Many actions take a `delta' parameter as the last parameter, which is -an amount to change something. That `delta' may include units, as an -additional parameter, such as `Action(Object,5,mm)'. If no units are -specified, the default is PCB's native units (currently 1/100 mil). -Also, if the delta is prefixed by `+' or `-', the size is increased or -decreased by that amount. Otherwise, the size size is set to the given -amount. - - Action(Object,5,mil) - Action(Object,+0.5,mm) - Action(Object,-1) - - Actions which take a `delta' parameter which do not accept all these -options will specify what they do take. - - Many actions act on indicated objects on the board. They will have -parameters like `ToggleObject' or `SelectedVias' to indicate what group -of objects they act on. Unless otherwise specified, these parameters -are defined as follows: - -`Object' -`ToggleObject' - Affects the object under the mouse pointer. If this action is - invoked from a menu or script, the user will be prompted to click - on an object, which is then the object affected. - -`Selected' -`SelectedObjects' - Affects all objects which are currently selected. At least, all - selected objects for which the given action makes sense. - -`SelectedPins' -`SelectedVias' -`SelectedTYPE' -`etc' - Affects all objects which are both selected and of the TYPE - specified. - - -* Menu: - -* core actions:: -* common actions:: -* gtk actions:: -* lesstif actions:: - - -File: pcb.info, Node: core actions, Next: common actions, Up: Action Reference - -F.1 Core actions -================ - -* Menu: - -* AddRats Action:: Add one or more rat lines to the board. -* ApplyVendor Action:: Applies the currently loaded vendor drill table to the current design. -* Atomic Action:: Save or restore the undo serial number. -* Attributes Action:: Let the user edit the attributes of the layout, current or given -layer, or selected element. -* AutoPlaceSelected Action:: Auto-place selected components. -* AutoRoute Action:: Auto-route some or all rat lines. -* ChangeClearSize Action:: Changes the clearance size of objects. -* ChangeDrillSize Action:: Changes the drilling hole size of objects. -* ChangeFlag Action:: Sets or clears flags on objects. -* ChangeHole Action:: Changes the hole flag of objects. -* ChangeJoin Action:: Changes the join (clearance through polygons) of objects. -* ChangeName Action:: Sets the name of objects. -* ChangeOctagon Action:: Changes the octagon-flag of pins and vias. -* ChangePaste Action:: Changes the no paste flag of objects. -* ChangePinName Action:: Sets the name of a specific pin on a specific element. -* ChangeSize Action:: Changes the size of objects. -* ChangeSquare Action:: Changes the square flag of pins and pads. -* ClearOctagon Action:: Clears the octagon-flag of pins and vias. -* ClearSquare Action:: Clears the square-flag of pins and pads. -* ClrFlag Action:: Clears flags on objects. -* Connection Action:: Searches connections of the object at the cursor position. -* Delete Action:: Delete stuff. -* DeleteRats Action:: Delete rat lines. -* DisableVendor Action:: Disables automatic drill size mapping. -* DisperseElements Action:: Disperses elements. -* Display Action:: Several display-related actions. -* djopt Action:: Perform various optimizations on the current board. -* DRC Action:: Invoke the DRC check. -* DumpLibrary Action:: Display the entire contents of the libraries. -* elementlist Action:: Adds the given element if it doesn't already exist. -* elementsetattr Action:: Sets or clears an element-specific attribute. -* EnableVendor Action:: Enables automatic drill size mapping. -* execcommand Action:: Runs a command. -* ExecuteFile Action:: Run actions from the given file. -* Flip Action:: Flip an element to the opposite side of the board. -* FontEdit Action:: Convert the current font to a PCB for editing. -* FontSave Action:: Convert the current PCB back to a font. -* FreeRotateBuffer Action:: Rotates the current paste buffer contents by the specified angle. The -angle is given in degrees. If no angle is given, the user is prompted -for one. - -* GlobalPuller Action:: Pull all traces tight. -* h Action:: Print a help message for commands. -* Import Action:: Import schematics. -* l Action:: Loads layout data. -* le Action:: Loads an element into the current buffer. -* LoadFootprint Action:: Loads a single footprint by name. -* LoadFrom Action:: Load layout data from a file. -* LoadVendorFrom Action:: Loads the specified vendor resource file. -* m Action:: Loads a layout into the current buffer. -* MarkCrosshair Action:: Set/Reset the Crosshair mark. -* Message Action:: Writes a message to the log window. -* MinClearGap Action:: Ensures that polygons are a minimum distance from objects. -* MinMaskGap Action:: Ensures the mask is a minimum distance from pins and pads. -* Mode Action:: Change or use the tool mode. -* MorphPolygon Action:: Converts dead polygon islands into separate polygons. -* MoveLayer Action:: Moves/Creates/Deletes Layers. -* MoveObject Action:: Moves the object under the crosshair. -* MoveToCurrentLayer Action:: Moves objects to the current layer. -* Netlist Action:: Perform various actions on netlists. -* New Action:: Starts a new layout. -* OptAutoOnly Action:: Toggles the optimize-only-autorouted flag. -* PasteBuffer Action:: Various operations on the paste buffer. -* Polygon Action:: Some polygon related stuff. -* Puller Action:: Pull an arc-line junction tight. -* q Action:: Quits the application after confirming. -* q! Action:: Quits the application without confirming. -* Quit Action:: Quits the application after confirming. -* Redo Action:: Redo recent``undo''operations. -* RemoveSelected Action:: Removes any selected objects. -* Renumber Action:: Renumber all elements. The changes will be recorded to filename -for use in backannotating these changes to the schematic. -* Report Action:: Produce various report. -* ReportDialog Action:: Report on the object under the crosshair -* RipUp Action:: Ripup auto-routed tracks, or convert an element to parts. -* rn Action:: Reads netlist. -* RouteStyle Action:: Copies the indicated routing style into the current sizes. -* s Action:: Saves layout data. -* SaveSettings Action:: Saves settings. -* SaveTo Action:: Saves data to a file. -* Select Action:: Toggles or sets the selection. -* SetFlag Action:: Sets flags on objects. -* SetOctagon Action:: Sets the octagon-flag of objects. -* SetSame Action:: Sets current layer and sizes to match indicated item. -* SetSquare Action:: sets the square-flag of objects. -* SetThermal Action:: Set the thermal (on the current layer) of pins or vias to the given style. -Style = 0 means no thermal. -Style = 1 has diagonal fingers with sharp edges. -Style = 2 has horizontal and vertical fingers with sharp edges. -Style = 3 is a solid connection to the plane.Style = 4 has diagonal fingers with rounded edges. -Style = 5 has horizontal and vertical fingers with rounded edges. - -* SetValue Action:: Change various board-wide values and sizes. -* ToggleHideName Action:: Toggles the visibility of element names. -* ToggleVendor Action:: Toggles the state of automatic drill size mapping. -* Undo Action:: Undo recent changes. -* UnloadVendor Action:: Unloads the current vendor drill mapping table. -* Unselect Action:: Unselects the object at the pointer location or the specified objects. -* w Action:: Saves layout data. -* wq Action:: Saves the layout data and quits. - - -File: pcb.info, Node: AddRats Action, Next: ApplyVendor Action, Up: core actions - -F.1.1 AddRats -------------- - -AddRats(AllRats|SelectedRats|Close) - -Add one or more rat lines to the board. - -`AllRats' - Create rat lines for all loaded nets that aren't already connected - on with copper. - -`SelectedRats' - Similarly, but only add rat lines for nets connected to selected - pins and pads. - -`Close' - Selects the shortest unselected rat on the board. - - - -File: pcb.info, Node: ApplyVendor Action, Next: Atomic Action, Prev: AddRats Action, Up: core actions - -F.1.2 ApplyVendor ------------------ - -ApplyVendor() - -Applies the currently loaded vendor drill table to the current design. - - This will modify all of your drill holes to match the list of allowed -sizes for your vendor. - - -File: pcb.info, Node: Atomic Action, Next: Attributes Action, Prev: ApplyVendor Action, Up: core actions - -F.1.3 Atomic ------------- - -Atomic(Save|Restore|Close|Block) - -Save or restore the undo serial number. - - This action allows making multiple-action bindings into an atomic -operation that will be undone by a single Undo command. For example, -to optimize rat lines, you'd delete the rats and re-add them. To group -these into a single undo, you'd want the deletions and the additions to -have the same undo serial number. So, you `Save', delete the rats, -`Restore', add the rats - using the same serial number as the deletes, -then `Block', which checks to see if the deletions or additions -actually did anything. If not, the serial number is set to the saved -number, as there's nothing to undo. If something did happen, the -serial number is incremented so that these actions are counted as a -single undo step. - -`Save' - Saves the undo serial number. - -`Restore' - Returns it to the last saved number. - -`Close' - Sets it to 1 greater than the last save. - -`Block' - Does a Restore if there was nothing to undo, else does a Close. - - - -File: pcb.info, Node: Attributes Action, Next: AutoPlaceSelected Action, Prev: Atomic Action, Up: core actions - -F.1.4 Attributes ----------------- - -Attributes(Layout|Layer|Element) -Attributes(Layer,layername) - -Let the user edit the attributes of the layout, current or given layer, -or selected element. - - This just pops up a dialog letting the user edit the attributes of -the pcb, an element, or a layer. - - -File: pcb.info, Node: AutoPlaceSelected Action, Next: AutoRoute Action, Prev: Attributes Action, Up: core actions - -F.1.5 AutoPlaceSelected ------------------------ - -AutoPlaceSelected() - -Auto-place selected components. - - Attempts to re-arrange the selected components such that the nets -connecting them are minimized. Note that you cannot undo this. - - -File: pcb.info, Node: AutoRoute Action, Next: ChangeClearSize Action, Prev: AutoPlaceSelected Action, Up: core actions - -F.1.6 AutoRoute ---------------- - -AutoRoute(AllRats|SelectedRats) - -Auto-route some or all rat lines. - -`AllRats' - Attempt to autoroute all rats. - -`SelectedRats' - Attempt to autoroute the selected rats. - - - Before autorouting, it's important to set up a few things. First, -make sure any layers you aren't using are disabled, else the autorouter -may use them. Next, make sure the current line and via styles are set -accordingly. Last, make sure "new lines clear polygons" is set, in -case you eventually want to add a copper pour. - - Autorouting takes a while. During this time, the program may not be -responsive. - - -File: pcb.info, Node: ChangeClearSize Action, Next: ChangeDrillSize Action, Prev: AutoRoute Action, Up: core actions - -F.1.7 ChangeClearSize ---------------------- - -ChangeClearSize(Object, delta) -ChangeClearSize(SelectedPins|SelectedPads|SelectedVias, delta) -ChangeClearSize(SelectedLines|SelectedArcs, delta -ChangeClearSize(Selected|SelectedObjects, delta) - -Changes the clearance size of objects. - - If the solder mask is currently showing, this action changes the -solder mask clearance. If the mask is not showing, this action changes -the polygon clearance. - - -File: pcb.info, Node: ChangeDrillSize Action, Next: ChangeFlag Action, Prev: ChangeClearSize Action, Up: core actions - -F.1.8 ChangeDrillSize ---------------------- - -ChangeDrillSize(Object, delta) -ChangeDrillSize(SelectedPins|SelectedVias|Selected|SelectedObjects, delta) - -Changes the drilling hole size of objects. - - -File: pcb.info, Node: ChangeFlag Action, Next: ChangeHole Action, Prev: ChangeDrillSize Action, Up: core actions - -F.1.9 ChangeFlag ----------------- - -ChangeFlag(Object|Selected|SelectedObjects, flag, value) -ChangeFlag(SelectedLines|SelectedPins|SelectedVias, flag, value) -ChangeFlag(SelectedPads|SelectedTexts|SelectedNames, flag, value) -ChangeFlag(SelectedElements, flag, value) -flag = square | octagon | thermal | join -value = 0 | 1 - -Sets or clears flags on objects. - - Toggles the given flag on the indicated object(s). The flag may be -one of the flags listed above (square, octagon, thermal, join). The -value may be the number 0 or 1. If the value is 0, the flag is -cleared. If the value is 1, the flag is set. - - -File: pcb.info, Node: ChangeHole Action, Next: ChangeJoin Action, Prev: ChangeFlag Action, Up: core actions - -F.1.10 ChangeHole ------------------ - -ChangeHole(ToggleObject|Object|SelectedVias|Selected) - -Changes the hole flag of objects. - - The "hole flag" of a via determines whether the via is a -plated-through hole (not set), or an unplated hole (set). - - -File: pcb.info, Node: ChangeJoin Action, Next: ChangeName Action, Prev: ChangeHole Action, Up: core actions - -F.1.11 ChangeJoin ------------------ - -ChangeJoin(ToggleObject|SelectedLines|SelectedArcs|Selected) - -Changes the join (clearance through polygons) of objects. - - The join flag determines whether a line or arc, drawn to intersect a -polygon, electrically connects to the polygon or not. When joined, the -line/arc is simply drawn over the polygon, making an electrical -connection. When not joined, a gap is drawn between the line and the -polygon, insulating them from each other. - - -File: pcb.info, Node: ChangeName Action, Next: ChangeOctagon Action, Prev: ChangeJoin Action, Up: core actions - -F.1.12 ChangeName ------------------ - -ChangeName(Object) -ChangeName(Layout|Layer) - -Sets the name of objects. - -`Object' - Changes the name of the element under the cursor. - -`Layout' - Changes the name of the layout. This is printed on the fab - drawings. - -`Layer' - Changes the name of the currently active layer. - - - -File: pcb.info, Node: ChangeOctagon Action, Next: ChangePaste Action, Prev: ChangeName Action, Up: core actions - -F.1.13 ChangeOctagon --------------------- - -ChangeOctagon(Object|ToggleObject|SelectedObjects|Selected) -ChangeOctagon(SelectedElements|SelectedPins|SelectedVias) - -Changes the octagon-flag of pins and vias. - - Pins, pads, and vias can have various shapes. All may be round. -Pins and pads may be square (obviously "square" pads are usually -rectangular). Pins and vias may be octagonal. When you change a shape -flag of an element, you actually change all of its pins and pads. - - Note that the square flag takes precedence over the octagon flag, -thus, if both the square and octagon flags are set, the object is -square. When the square flag is cleared, the pins and pads will be -either round or, if the octagon flag is set, octagonal. - - -File: pcb.info, Node: ChangePaste Action, Next: ChangePinName Action, Prev: ChangeOctagon Action, Up: core actions - -F.1.14 ChangePaste ------------------- - -ChangePaste(ToggleObject|Object|SelectedPads|Selected) - -Changes the no paste flag of objects. - - The "no paste flag" of a pad determines whether the solderpaste -stencil will have an opening for the pad (no set) or if there wil be -no solderpaste on the pad (set). This is used for things such as -fiducial pads. - - -File: pcb.info, Node: ChangePinName Action, Next: ChangeSize Action, Prev: ChangePaste Action, Up: core actions - -F.1.15 ChangePinName --------------------- - -ChangePinName(ElementName,PinNumber,PinName) - -Sets the name of a specific pin on a specific element. - - This can be especially useful for annotating pin names from a -schematic to the layout without requiring knowledge of the pcb file -format. - - ChangePinName(U3, 7, VCC) - - -File: pcb.info, Node: ChangeSize Action, Next: ChangeSquare Action, Prev: ChangePinName Action, Up: core actions - -F.1.16 ChangeSize ------------------ - -ChangeSize(Object, delta) -ChangeSize(SelectedObjects|Selected, delta) -ChangeSize(SelectedLines|SelectedPins|SelectedVias, delta) -ChangeSize(SelectedPads|SelectedTexts|SelectedNames, delta) -ChangeSize(SelectedElements, delta) - -Changes the size of objects. - - For lines and arcs, this changes the width. For pins and vias, this -changes the overall diameter of the copper annulus. For pads, this -changes the width and, indirectly, the length. For texts and names, -this changes the scaling factor. For elements, this changes the width -of the silk layer lines and arcs for this element. - - -File: pcb.info, Node: ChangeSquare Action, Next: ClearOctagon Action, Prev: ChangeSize Action, Up: core actions - -F.1.17 ChangeSquare -------------------- - -ChangeSquare(ToggleObject) -ChangeSquare(SelectedElements|SelectedPins) -ChangeSquare(Selected|SelectedObjects) - -Changes the square flag of pins and pads. - - Note that `Pins' means both pins and pads. - - Pins, pads, and vias can have various shapes. All may be round. -Pins and pads may be square (obviously "square" pads are usually -rectangular). Pins and vias may be octagonal. When you change a shape -flag of an element, you actually change all of its pins and pads. - - Note that the square flag takes precedence over the octagon flag, -thus, if both the square and octagon flags are set, the object is -square. When the square flag is cleared, the pins and pads will be -either round or, if the octagon flag is set, octagonal. - - -File: pcb.info, Node: ClearOctagon Action, Next: ClearSquare Action, Prev: ChangeSquare Action, Up: core actions - -F.1.18 ClearOctagon -------------------- - -ClearOctagon(ToggleObject|Object|SelectedObjects|Selected) -ClearOctagon(SelectedElements|SelectedPins|SelectedVias) - -Clears the octagon-flag of pins and vias. - - Pins, pads, and vias can have various shapes. All may be round. -Pins and pads may be square (obviously "square" pads are usually -rectangular). Pins and vias may be octagonal. When you change a shape -flag of an element, you actually change all of its pins and pads. - - Note that the square flag takes precedence over the octagon flag, -thus, if both the square and octagon flags are set, the object is -square. When the square flag is cleared, the pins and pads will be -either round or, if the octagon flag is set, octagonal. - - -File: pcb.info, Node: ClearSquare Action, Next: ClrFlag Action, Prev: ClearOctagon Action, Up: core actions - -F.1.19 ClearSquare ------------------- - -ClearSquare(ToggleObject|SelectedElements|SelectedPins) - -Clears the square-flag of pins and pads. - - Note that `Pins' means pins and pads. - - Pins, pads, and vias can have various shapes. All may be round. -Pins and pads may be square (obviously "square" pads are usually -rectangular). Pins and vias may be octagonal. When you change a shape -flag of an element, you actually change all of its pins and pads. - - Note that the square flag takes precedence over the octagon flag, -thus, if both the square and octagon flags are set, the object is -square. When the square flag is cleared, the pins and pads will be -either round or, if the octagon flag is set, octagonal. - - -File: pcb.info, Node: ClrFlag Action, Next: Connection Action, Prev: ClearSquare Action, Up: core actions - -F.1.20 ClrFlag --------------- - -ClrFlag(Object|Selected|SelectedObjects, flag) -ClrFlag(SelectedLines|SelectedPins|SelectedVias, flag) -ClrFlag(SelectedPads|SelectedTexts|SelectedNames, flag) -ClrFlag(SelectedElements, flag) -flag = square | octagon | thermal | join - -Clears flags on objects. - - Turns the given flag off, regardless of its previous setting. See -`ChangeFlag'. - - ClrFlag(SelectedLines,join) - - -File: pcb.info, Node: Connection Action, Next: Delete Action, Prev: ClrFlag Action, Up: core actions - -F.1.21 Connection ------------------ - -Connection(Find|ResetLinesAndPolygons|ResetPinsAndVias|Reset) - -Searches connections of the object at the cursor position. - - Connections found with this action will be highlighted in the -"connected-color" color and will have the "found" flag set. - -`Find' - The net under the cursor is "found". - -`ResetLinesAndPolygons' - Any "found" lines and polygons are marked "not found". - -`ResetPinsAndVias' - Any "found" pins and vias are marked "not found". - -`Reset' - All "found" objects are marked "not found". - - - -File: pcb.info, Node: Delete Action, Next: DeleteRats Action, Prev: Connection Action, Up: core actions - -F.1.22 Delete -------------- - -Delete(Object|Selected) -Delete(AllRats|SelectedRats) - -Delete stuff. - - -File: pcb.info, Node: DeleteRats Action, Next: DisableVendor Action, Prev: Delete Action, Up: core actions - -F.1.23 DeleteRats ------------------ - -DeleteRats(AllRats|Selected|SelectedRats) - -Delete rat lines. - - -File: pcb.info, Node: DisableVendor Action, Next: DisperseElements Action, Prev: DeleteRats Action, Up: core actions - -F.1.24 DisableVendor --------------------- - -DisableVendor() - -Disables automatic drill size mapping. - - When drill mapping is enabled, new instances of pins and vias will -have their drill holes mapped to one of the allowed drill sizes -specified in the currently loaded vendor drill table. - - -File: pcb.info, Node: DisperseElements Action, Next: Display Action, Prev: DisableVendor Action, Up: core actions - -F.1.25 DisperseElements ------------------------ - -DisperseElements(All|Selected) - -Disperses elements. - - Normally this is used when starting a board, by selecting all -elements and then dispersing them. This scatters the elements around -the board so that you can pick individual ones, rather than have all the -elements at the same 0,0 coordinate and thus impossible to choose from. - - -File: pcb.info, Node: Display Action, Next: djopt Action, Prev: DisperseElements Action, Up: core actions - -F.1.26 Display --------------- - -Display(NameOnPCB|Description|Value) -Display(Grid|Redraw) -Display(CycleClip|CycleCrosshair|Toggle45Degree|ToggleStartDirection) -Display(ToggleGrid|ToggleRubberBandMode|ToggleUniqueNames) -Display(ToggleMask|ToggleName|ToggleClearLine|ToggleFullPoly|ToggleSnapPin) -Display(ToggleThindraw|ToggleThindrawPoly|ToggleOrthoMove|ToggleLocalRef) -Display(ToggleCheckPlanes|ToggleShowDRC|ToggleAutoDRC) -Display(ToggleLiveRoute|LockNames|OnlyNames) -Display(Pinout|PinOrPadName) - -Several display-related actions. - -`NameOnPCB' - -`Description' - -`Value' - Specify whether all elements show their name, description, or - value. - -`Redraw' - Redraw the whole board. - -`Toggle45Degree' - When clear, lines can be drawn at any angle. When set, lines are - restricted to multiples of 45 degrees and requested lines may be - broken up according to the clip setting. - -`CycleClip' - Changes the way lines are restricted to 45 degree increments. The - various settings are: straight only, orthogonal then angled, and - angled then orthogonal. If AllDirections is set, this action - disables it. - -`CycleCrosshair' - Changes crosshair drawing. Crosshair may accept form of 4-ray, - 8-ray and 12-ray cross. - -`ToggleRubberBandMode' - If set, moving an object moves all the lines attached to it too. - -`ToggleStartDirection' - If set, each time you set a point in a line, the Clip toggles - between orth-angle and angle-ortho. - -`ToggleUniqueNames' - If set, you will not be permitted to change the name of an element - to match that of another element. - -`ToggleSnapPin' - If set, pin centers and pad end points are treated as additional - grid points that the cursor can snap to. - -`ToggleLocalRef' - If set, the mark is automatically set to the beginning of any - move, so you can see the relative distance you've moved. - -`ToggleThindraw' - If set, objects on the screen are drawn as outlines (lines are - drawn as center-lines). This lets you see line endpoints hidden - under pins, for example. - -`ToggleThindrawPoly' - If set, polygons on the screen are drawn as outlines. - -`ToggleShowDRC' - If set, pending objects (i.e. lines you're in the process of - drawing) will be drawn with an outline showing how far away from - other copper you need to be. - -`ToggleLiveRoute' - If set, the progress of the autorouter will be visible on the - screen. - -`ToggleAutoDRC' - If set, you will not be permitted to make connections which violate - the current DRC and netlist settings. - -`ToggleCheckPlanes' - If set, lines and arcs aren't drawn, which usually leaves just the - polygons. If you also disable all but the layer you're interested - in, this allows you to check for isolated regions. - -`ToggleOrthoMove' - If set, the crosshair is only allowed to move orthogonally from its - previous position. I.e. you can move an element or line up, down, - left, or right, but not up+left or down+right. - -`ToggleName' - Selects whether the pinouts show the pin names or the pin numbers. - -`ToggleLockNames' - If set, text will ignore left mouse clicks and actions that work on - objects under the mouse. You can still select text with a lasso - (left mouse drag) and perform actions on the selection. - -`ToggleOnlyNames' - If set, only text will be sensitive for mouse clicks and actions - that work on objects under the mouse. You can still select other - objects with a lasso (left mouse drag) and perform actions on the - selection. - -`ToggleMask' - Turns the solder mask on or off. - -`ToggleClearLine' - When set, the clear-line flag causes new lines and arcs to have - their "clear polygons" flag set, so they won't be electrically - connected to any polygons they overlap. - -`ToggleFullPoly' - When set, the full-poly flag causes new polygons to have their - "full polygon" flag set, so all parts of them will be displayed - instead of only the biggest one. - -`ToggleGrid' - Resets the origin of the current grid to be wherever the mouse - pointer is (not where the crosshair currently is). If you provide - two numbers after this, the origin is set to that coordinate. - -`Grid' - Toggles whether the grid is displayed or not. - -`Pinout' - Causes the pinout of the element indicated by the cursor to be - displayed, usually in a separate window. - -`PinOrPadName' - Toggles whether the names of pins, pads, or (yes) vias will be - displayed. If the cursor is over an element, all of its pins and - pads are affected. - - - -File: pcb.info, Node: djopt Action, Next: DRC Action, Prev: Display Action, Up: core actions - -F.1.27 djopt ------------- - -djopt(debumpify|unjaggy|simple|vianudge|viatrim|orthopull) -djopt(auto) - all of the above -djopt(miter) - -Perform various optimizations on the current board. - - The different types of optimizations change your board in order to -reduce the total trace length and via count. - -`debumpify' - Looks for U-shaped traces that can be shortened or eliminated. - -`unjaggy' - Looks for corners which could be flipped to eliminate one or more - corners (i.e. jaggy lines become simpler). - -`simple' - Removing uneeded vias, replacing two or more trace segments in a - row with a single segment. This is usually performed - automatically after other optimizations. - -`vianudge' - Looks for vias where all traces leave in the same direction. - Tries to move via in that direction to eliminate one of the traces - (and thus a corner). - -`viatrim' - Looks for traces that go from via to via, where moving that trace - to a different layer eliminates one or both vias. - -`orthopull' - Looks for chains of traces all going in one direction, with more - traces orthogonal on one side than on the other. Moves the chain - in that direction, causing a net reduction in trace length, - possibly eliminating traces and/or corners. - -`splitlines' - Looks for lines that pass through vias, pins, or pads, and splits - them into separate lines so they can be managed separately. - -`auto' - Performs the above options, repeating until no further - optimizations can be made. - -`miter' - Replaces 90 degree corners with a pair of 45 degree corners, to - reduce RF losses and trace length. - - - -File: pcb.info, Node: DRC Action, Next: DumpLibrary Action, Prev: djopt Action, Up: core actions - -F.1.28 DRC ----------- - -DRC() - -Invoke the DRC check. - - Note that the design rule check uses the current board rule settings, -not the current style settings. - - -File: pcb.info, Node: DumpLibrary Action, Next: elementlist Action, Prev: DRC Action, Up: core actions - -F.1.29 DumpLibrary ------------------- - -DumpLibrary() - -Display the entire contents of the libraries. - - -File: pcb.info, Node: elementlist Action, Next: elementsetattr Action, Prev: DumpLibrary Action, Up: core actions - -F.1.30 elementlist ------------------- - -ElementList(Start|Done|Need,,,) - -Adds the given element if it doesn't already exist. - -`Start' - Indicates the start of an element list; call this before any Need - actions. - -`Need' - Searches the board for an element with a matching refdes. - - If found, the value and footprint are updated. - - If not found, a new element is created with the given footprint - and value. - -`Done' - Compares the list of elements needed since the most recent `start' - with the list of elements actually on the board. Any elements - that weren't listed are selected, so that the user may delete them. - - - -File: pcb.info, Node: elementsetattr Action, Next: EnableVendor Action, Prev: elementlist Action, Up: core actions - -F.1.31 elementsetattr ---------------------- - -ElementSetAttr(refdes,name[,value]) - -Sets or clears an element-specific attribute. - - If a value is specified, the named attribute is added (if not already -present) or changed (if it is) to the given value. If the value is not -specified, the given attribute is removed if present. - Index: trunk/doc/README =================================================================== --- trunk/doc/README (revision 1036) +++ trunk/doc/README (nonexistent) @@ -1,10 +0,0 @@ -This is the original doc dir of pcb. - -For the modifications introduced by pcb-rnd, check ../doc-rnd - -Most of the original documentation is in texi; makeinfo fails to -produce pdf from pcb.texi and even generating html throws -a large amount of warnings. - -It may be that pcb-rnd will switch from texi to html for documentation -source format. Index: trunk/doc/pcb.info-2 =================================================================== --- trunk/doc/pcb.info-2 (revision 1036) +++ trunk/doc/pcb.info-2 (nonexistent) @@ -1,3304 +0,0 @@ -This is pcb.info, produced by makeinfo version 4.13 from pcb.texi. - -INFO-DIR-SECTION Miscellaneous -START-INFO-DIR-ENTRY -* pcb: (pcb). An interactive printed circuit board editor. -END-INFO-DIR-ENTRY - - This file documents how to use Pcb, the open source, interactive -printed circuit board layout system. - - Copyright (C) 1994,1995,1996, 2004 Thomas Nau - - Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 harry eaton - - Copyright (C) 2003, 2004, 2005, 2006, 2007, 2009 Dan McMahill - - Copyright (C) 2004 DJ Delorie - - This program is free software; you may redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at -your option) any later version. - - This program is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANT-ABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -General Public License for more details. - - -File: pcb.info, Node: EnableVendor Action, Next: execcommand Action, Prev: elementsetattr Action, Up: core actions - -F.1.32 EnableVendor -------------------- - -EnableVendor() - -Enables automatic drill size mapping. - - When drill mapping is enabled, new instances of pins and vias will -have their drill holes mapped to one of the allowed drill sizes -specified in the currently loaded vendor drill table. To enable drill -mapping, a vendor resource file containing a drill table must be loaded -first. - - -File: pcb.info, Node: execcommand Action, Next: ExecuteFile Action, Prev: EnableVendor Action, Up: core actions - -F.1.33 execcommand ------------------- - -ExecCommand(command) - -Runs a command. - - Runs the given command, which is a system executable. - - -File: pcb.info, Node: ExecuteFile Action, Next: Flip Action, Prev: execcommand Action, Up: core actions - -F.1.34 ExecuteFile ------------------- - -ExecuteFile(filename) - -Run actions from the given file. - - Lines starting with `#' are ignored. - - -File: pcb.info, Node: Flip Action, Next: FontEdit Action, Prev: ExecuteFile Action, Up: core actions - -F.1.35 Flip ------------ - -Flip(Object|Selected|SelectedElements) - -Flip an element to the opposite side of the board. - - Note that the location of the element will be symmetric about the -cursor location; i.e. if the part you are pointing at will still be at -the same spot once the element is on the other side. When flipping -multiple elements, this retains their positions relative to each other, -not their absolute positions on the board. - - -File: pcb.info, Node: FontEdit Action, Next: FontSave Action, Prev: Flip Action, Up: core actions - -F.1.36 FontEdit ---------------- - -FontEdit() - -Convert the current font to a PCB for editing. - - -File: pcb.info, Node: FontSave Action, Next: FreeRotateBuffer Action, Prev: FontEdit Action, Up: core actions - -F.1.37 FontSave ---------------- - -FontSave() - -Convert the current PCB back to a font. - - -File: pcb.info, Node: FreeRotateBuffer Action, Next: GlobalPuller Action, Prev: FontSave Action, Up: core actions - -F.1.38 FreeRotateBuffer ------------------------ - -FreeRotateBuffer([Angle]) - -Rotates the current paste buffer contents by the specified angle. The -angle is given in degrees. If no angle is given, the user is prompted -for one. - - Rotates the contents of the pastebuffer by an arbitrary angle. If no -angle is given, the user is prompted for one. - - -File: pcb.info, Node: GlobalPuller Action, Next: h Action, Prev: FreeRotateBuffer Action, Up: core actions - -F.1.39 GlobalPuller -------------------- - -GlobalPuller() - -Pull all traces tight. - - -File: pcb.info, Node: h Action, Next: Import Action, Prev: GlobalPuller Action, Up: core actions - -F.1.40 h --------- - -h - -Print a help message for commands. - - This is one of the command box helper actions. While it is a regular -action and can be used like any other action, its name and syntax are -optimized for use with the command box (`:') and thus the syntax is -documented for that purpose. - - -File: pcb.info, Node: Import Action, Next: l Action, Prev: h Action, Up: core actions - -F.1.41 Import -------------- - -Import() -Import([gnetlist|make[,source,source,...]]) -Import(setnewpoint[,(mark|center|X,Y)]) -Import(setdisperse,D,units) - -Import schematics. - - Imports element and netlist data from the schematics (or some other -source). The first parameter, which is optional, is the mode. If not -specified, the `import::mode' attribute in the PCB is used. `gnetlist' -means gnetlist is used to obtain the information from the schematics. -`make' invokes `make', assuming the user has a `Makefile' in the -current directory. The `Makefile' will be invoked with the following -variables set: - -`PCB' - The name of the .pcb file - -`SRCLIST' - A space-separated list of source files - -`OUT' - The name of the file in which to put the command script, which may - contain any `Pcb' actions. By default, this is a temporary file - selected by `Pcb', but if you specify an `import::outfile' - attribute, that file name is used instead (and not automatically - deleted afterwards). - - - The target specified to be built is the first of these that apply: - - * The target specified by an `import::target' attribute. - - * The output file specified by an `import::outfile' attribute. - - * If nothing else is specified, the target is `pcb_import'. - - - If you specify an `import::makefile' attribute, then "-f " will be added to the command line. - - If you specify the mode, you may also specify the source files -(schematics). If you do not specify any, the list of schematics is -obtained by reading the `import::srcN' attributes (like `import::src0', -`import::src1', etc). - - For compatibility with future extensions to the import file format, -the generated file _must not_ start with the two characters `#%'. - - If a temporary file is needed the `TMPDIR' environment variable is -used to select its location. - - Note that the programs `gnetlist' and `make' may be overridden by -the user via the `make-program' and `gnetlist' `pcb' settings (i.e. in -`~/.pcb/settings' or on the command line). - - If `Pcb' cannot determine which schematic(s) to import from, the GUI -is called to let user choose (see `ImportGUI()'). - - Note that Import() doesn't delete anything - after an Import, -elements which shouldn't be on the board are selected and may be -removed once it's determined that the deletion is appropriate. - - If `Import()' is called with `setnewpoint', then the location of new -components can be specified. This is where parts show up when they're -added to the board. The default is the center of the board. - -`Import(setnewpoint)' - Prompts the user to click on the board somewhere, uses that point. - If called by a hotkey, uses the current location of the crosshair. - -`Import(setnewpoint,mark)' - Uses the location of the mark. If no mark is present, the point is - not changed. - -`Import(setnewpoint,center)' - Resets the point to the center of the board. - -`Import(setnewpoint,X,Y,units)' - Sets the point to the specific coordinates given. Example: - `Import(setnewpoint,50,25,mm)' - - - Note that the X and Y locations are stored in attributes named -`import::newX' and `import::newY' so you could change them manually if -you wished. - - Calling `Import(setdisperse,D,units)' sets how much the newly placed -elements are dispersed relative to the set point. For example, -`Import(setdisperse,10,mm)' will offset each part randomly up to 10mm -away from the point. The default dispersion is 1/10th of the smallest -board dimension. Dispersion is saved in the `import::disperse' -attribute. - - -File: pcb.info, Node: l Action, Next: le Action, Prev: Import Action, Up: core actions - -F.1.42 l --------- - -l [name] - -Loads layout data. - - Loads a new datafile (layout) and, if confirmed, overwrites any -existing unsaved data. The filename and the searchpath (_filePath_) -are passed to the command defined by _fileCommand_. If no filename is -specified a file select box will popup. - - This is one of the command box helper actions. While it is a regular -action and can be used like any other action, its name and syntax are -optimized for use with the command box (`:') and thus the syntax is -documented for that purpose. - - -File: pcb.info, Node: le Action, Next: LoadFootprint Action, Prev: l Action, Up: core actions - -F.1.43 le ---------- - -le [name] - -Loads an element into the current buffer. - - The filename and the searchpath (_elementPath_) are passed to the -command defined by _elementCommand_. If no filename is specified a -file select box will popup. - - This is one of the command box helper actions. While it is a regular -action and can be used like any other action, its name and syntax are -optimized for use with the command box (`:') and thus the syntax is -documented for that purpose. - - -File: pcb.info, Node: LoadFootprint Action, Next: LoadFrom Action, Prev: le Action, Up: core actions - -F.1.44 LoadFootprint --------------------- - -LoadFootprint(filename[,refdes,value]) - -Loads a single footprint by name. - - Loads a single footprint by name, rather than by reference or through -the library. If a refdes and value are specified, those are inserted -into the footprint as well. The footprint remains in the paste buffer. - - -File: pcb.info, Node: LoadFrom Action, Next: LoadVendorFrom Action, Prev: LoadFootprint Action, Up: core actions - -F.1.45 LoadFrom ---------------- - -LoadFrom(Layout|LayoutToBuffer|ElementToBuffer|Netlist|Revert,filename) - -Load layout data from a file. - - This action assumes you know what the filename is. The various GUIs -should have a similar `Load' action where the filename is optional, and -will provide their own file selection mechanism to let you choose the -file name. - -`Layout' - Loads an entire PCB layout, replacing the current one. - -`LayoutToBuffer' - Loads an entire PCB layout to the paste buffer. - -`ElementToBuffer' - Loads the given element file into the paste buffer. Element files - contain only a single `Element' definition, such as the "newlib" - library uses. - -`Netlist' - Loads a new netlist, replacing any current netlist. - -`Revert' - Re-loads the current layout from its disk file, reverting any - changes you may have made. - - - -File: pcb.info, Node: LoadVendorFrom Action, Next: m Action, Prev: LoadFrom Action, Up: core actions - -F.1.46 LoadVendorFrom ---------------------- - -LoadVendorFrom(filename) - -Loads the specified vendor resource file. - -FILENAME - Name of the vendor resource file. If not specified, the user will - be prompted to enter one. - - -File: pcb.info, Node: m Action, Next: MarkCrosshair Action, Prev: LoadVendorFrom Action, Up: core actions - -F.1.47 m --------- - -m [name] - -Loads a layout into the current buffer. - - The filename and the searchpath (_filePath_) are passed to the -command defined by _fileCommand_. If no filename is specified a file -select box will popup. - - This is one of the command box helper actions. While it is a regular -action and can be used like any other action, its name and syntax are -optimized for use with the command box (`:') and thus the syntax is -documented for that purpose. - - -File: pcb.info, Node: MarkCrosshair Action, Next: Message Action, Prev: m Action, Up: core actions - -F.1.48 MarkCrosshair --------------------- - -MarkCrosshair() -MarkCrosshair(Center) - -Set/Reset the Crosshair mark. - - The "mark" is a small X-shaped target on the display which is -treated like a second origin (the normal origin is the upper let corner -of the board). The GUI will display a second set of coordinates for -this mark, which tells you how far you are from it. - - If no argument is given, the mark is toggled - disabled if it was -enabled, or enabled at the current cursor position of disabled. If the -`Center' argument is given, the mark is moved to the current cursor -location. - - -File: pcb.info, Node: Message Action, Next: MinClearGap Action, Prev: MarkCrosshair Action, Up: core actions - -F.1.49 Message --------------- - -Message(message) - -Writes a message to the log window. - - This action displays a message to the log window. This action is -primarily provided for use by other programs which may interface with -PCB. If multiple arguments are given, each one is sent to the log -window followed by a newline. - - -File: pcb.info, Node: MinClearGap Action, Next: MinMaskGap Action, Prev: Message Action, Up: core actions - -F.1.50 MinClearGap ------------------- - -MinClearGap(delta) -MinClearGap(Selected, delta) - -Ensures that polygons are a minimum distance from objects. - - Checks all specified objects, and increases the polygon clearance if -needed to ensure a minimum distance between their edges and the polygon -edges. - - -File: pcb.info, Node: MinMaskGap Action, Next: Mode Action, Prev: MinClearGap Action, Up: core actions - -F.1.51 MinMaskGap ------------------ - -MinMaskGap(delta) -MinMaskGap(Selected, delta) - -Ensures the mask is a minimum distance from pins and pads. - - Checks all specified pins and/or pads, and increases the mask if -needed to ensure a minimum distance between the pin or pad edge and the -mask edge. - - -File: pcb.info, Node: Mode Action, Next: MorphPolygon Action, Prev: MinMaskGap Action, Up: core actions - -F.1.52 Mode ------------ - -Mode(Arc|Arrow|Copy|InsertPoint|Line|Lock|Move|None|PasteBuffer) -Mode(Polygon|Rectangle|Remove|Rotate|Text|Thermal|Via) -Mode(Notify|Release|Cancel|Stroke) -Mode(Save|Restore) - -Change or use the tool mode. - -`Arc' -`Arrow' -`Copy' -`InsertPoint' -`Line' -`Lock' -`Move' -`None' -`PasteBuffer' -`Polygon' -`Rectangle' -`Remove' -`Rotate' -`Text' -`Thermal' -`Via' - Select the indicated tool. - -`Notify' - Called when you press the mouse button, or move the mouse. - -`Release' - Called when you release the mouse button. - -`Cancel' - Cancels any pending tool activity, allowing you to restart - elsewhere. For example, this allows you to start a new line - rather than attach a line to the previous line. - -`Escape' - Similar to Cancel but calling this action a second time will return - to the Arrow tool. - -`Stroke' - If your `pcb' was built with libstroke, this invokes the stroke - input method. If not, this will restart a drawing mode if you were - drawing, else it will select objects. - -`Save' - Remembers the current tool. - -`Restore' - Restores the tool to the last saved tool. - - - -File: pcb.info, Node: MorphPolygon Action, Next: MoveLayer Action, Prev: Mode Action, Up: core actions - -F.1.53 MorphPolygon -------------------- - -MorphPolygon(Object|Selected) - -Converts dead polygon islands into separate polygons. - - If a polygon is divided into unconnected "islands", you can use this -command to convert the otherwise disappeared islands into separate -polygons. Be sure the cursor is over a portion of the polygon that -remains visible. Very small islands that may flake off are -automatically deleted. - - -File: pcb.info, Node: MoveLayer Action, Next: MoveObject Action, Prev: MorphPolygon Action, Up: core actions - -F.1.54 MoveLayer ----------------- - -MoveLayer(old,new) - -Moves/Creates/Deletes Layers. - - Moves a layer, creates a new layer, or deletes a layer. - -`old' - The is the layer number to act upon. Allowed values are: - `c' - Currently selected layer. - - `-1' - Create a new layer. - - `number' - An existing layer number. - - -`new' - Specifies where to move the layer to. Allowed values are: - `-1' - Deletes the layer. - - `up' - Moves the layer up. - - `down' - Moves the layer down. - - `c' - Creates a new layer. - - - - -File: pcb.info, Node: MoveObject Action, Next: MoveToCurrentLayer Action, Prev: MoveLayer Action, Up: core actions - -F.1.55 MoveObject ------------------ - -MoveObject(X,Y,dim) - -Moves the object under the crosshair. - - The `X' and `Y' are treated like `delta' is for many other objects. -For each, if it's prefixed by `+' or `-', then that amount is relative. -Otherwise, it's absolute. Units can be `mil' or `mm'; if unspecified, -units are PCB's internal units, currently 1/100 mil. - - -File: pcb.info, Node: MoveToCurrentLayer Action, Next: Netlist Action, Prev: MoveObject Action, Up: core actions - -F.1.56 MoveToCurrentLayer -------------------------- - -MoveToCurrentLayer(Object|SelectedObjects) - -Moves objects to the current layer. - - Note that moving an element from a component layer to a solder layer, -or from solder to component, won't automatically flip it. Use the -`Flip()' action to do that. - - -File: pcb.info, Node: Netlist Action, Next: New Action, Prev: MoveToCurrentLayer Action, Up: core actions - -F.1.57 Netlist --------------- - -Net(find|select|rats|norats|clear[,net[,pin]]) -Net(freeze|thaw|forcethaw) -Net(add,net,pin) - -Perform various actions on netlists. - - Each of these actions apply to a specified set of nets. NET and PIN -are patterns which match one or more nets or pins; these patterns may -be full names or regular expressions. If an exact match is found, it -is the only match; if no exact match is found, _then_ the pattern is -tried as a regular expression. - - If neither NET nor PIN are specified, all nets apply. If NET is -specified but not PIN, all nets matching NET apply. If both are -specified, nets which match NET and contain a pin matching PIN apply. - -`find' - Nets which apply are marked _found_ and are drawn in the - `connected-color' color. - -`select' - Nets which apply are selected. - -`rats' - Nets which apply are marked as available for the rats nest. - -`norats' - Nets which apply are marked as not available for the rats nest. - -`clear' - Clears the netlist. - -`add' - Add the given pin to the given netlist, creating either if needed. - -`sort' - Called after a list of add's, this sorts the netlist. - -`freeze' -`thaw' -`forcethaw' - Temporarily prevents changes to the netlist from being reflected in - the GUI. For example, if you need to make multiple changes, you - freeze the netlist, make the changes, then thaw it. Note that - freeze/thaw requests may nest, with the netlist being fully thawed - only when all pending freezes are thawed. You can bypass the - nesting by using forcethaw, which resets the freeze count and - immediately updates the GUI. - - - -File: pcb.info, Node: New Action, Next: OptAutoOnly Action, Prev: Netlist Action, Up: core actions - -F.1.58 New ----------- - -New([name]) - -Starts a new layout. - - If a name is not given, one is prompted for. - - -File: pcb.info, Node: OptAutoOnly Action, Next: PasteBuffer Action, Prev: New Action, Up: core actions - -F.1.59 OptAutoOnly ------------------- - -OptAutoOnly() - -Toggles the optimize-only-autorouted flag. - - The original purpose of the trace optimizer was to clean up the -traces created by the various autorouters that have been used with PCB. -When a board has a mix of autorouted and carefully hand-routed traces, -you don't normally want the optimizer to move your hand-routed traces. -But, sometimes you do. By default, the optimizer only optimizes -autorouted traces. This action toggles that setting, so that you can -optimize hand-routed traces also. - - -File: pcb.info, Node: PasteBuffer Action, Next: Polygon Action, Prev: OptAutoOnly Action, Up: core actions - -F.1.60 PasteBuffer ------------------- - -PasteBuffer(AddSelected|Clear|1..MAX_BUFFER) -PasteBuffer(Rotate, 1..3) -PasteBuffer(Convert|Save|Restore|Mirror) -PasteBuffer(ToLayout, X, Y, units) - -Various operations on the paste buffer. - - There are a number of paste buffers; the actual limit is a -compile-time constant `MAX_BUFFER' in `globalconst.h'. It is currently -`5'. One of these is the "current" paste buffer, often referred to as -"the" paste buffer. - -`AddSelected' - Copies the selected objects to the current paste buffer. - -`Clear' - Remove all objects from the current paste buffer. - -`Convert' - Convert the current paste buffer to an element. Vias are - converted to pins, lines are converted to pads. - -`Restore' - Convert any elements in the paste buffer back to vias and lines. - -`Mirror' - Flip all objects in the paste buffer vertically (up/down flip). - To mirror horizontally, combine this with rotations. - -`Rotate' - Rotates the current buffer. The number to pass is 1..3, where 1 - means 90 degrees counter clockwise, 2 means 180 degrees, and 3 - means 90 degrees clockwise (270 CCW). - -`Save' - Saves any elements in the current buffer to the indicated file. - -`ToLayout' - Pastes any elements in the current buffer to the indicated X, Y - coordinates in the layout. The `X' and `Y' are treated like - `delta' is for many other objects. For each, if it's prefixed by - `+' or `-', then that amount is relative to the last location. - Otherwise, it's absolute. Units can be `mil' or `mm'; if - unspecified, units are PCB's internal units, currently 1/100 mil. - -`1..MAX_BUFFER' - Selects the given buffer to be the current paste buffer. - - - -File: pcb.info, Node: Polygon Action, Next: Puller Action, Prev: PasteBuffer Action, Up: core actions - -F.1.61 Polygon --------------- - -Polygon(Close|PreviousPoint) - -Some polygon related stuff. - - Polygons need a special action routine to make life easier. - -`Close' - Creates the final segment of the polygon. This may fail if - clipping to 45 degree lines is switched on, in which case a - warning is issued. - -`PreviousPoint' - Resets the newly entered corner to the previous one. The Undo - action will call Polygon(PreviousPoint) when appropriate to do so. - - - -File: pcb.info, Node: Puller Action, Next: q Action, Prev: Polygon Action, Up: core actions - -F.1.62 Puller -------------- - -Puller() - -Pull an arc-line junction tight. - - The `Puller()' action is a special-purpose optimization. When -invoked while the crosshair is over the junction of an arc and a line, -it will adjust the arc's angle and the connecting line's endpoint such -that the line intersects the arc at a tangent. In the example below, -the left side is "before" with the black target marking where to put -the crosshair: - - [image src="puller.png" alt="Example of how puller works"] - -The right side is "after" with the black target marking where the -arc-line intersection was moved to. - - -File: pcb.info, Node: q Action, Next: q! Action, Prev: Puller Action, Up: core actions - -F.1.63 q --------- - -q - -Quits the application after confirming. - - If you have unsaved changes, you will be prompted to confirm (or -save) before quitting. - - This is one of the command box helper actions. While it is a regular -action and can be used like any other action, its name and syntax are -optimized for use with the command box (`:') and thus the syntax is -documented for that purpose. - - -File: pcb.info, Node: q! Action, Next: Quit Action, Prev: q Action, Up: core actions - -F.1.64 q! ---------- - -q! - -Quits the application without confirming. - - Note that this command neither saves your data nor prompts for -confirmation. - - This is one of the command box helper actions. While it is a regular -action and can be used like any other action, its name and syntax are -optimized for use with the command box (`:') and thus the syntax is -documented for that purpose. - - -File: pcb.info, Node: Quit Action, Next: Redo Action, Prev: q! Action, Up: core actions - -F.1.65 Quit ------------ - -Quit() - -Quits the application after confirming. - - If you have unsaved changes, you will be prompted to confirm (or -save) before quitting. - - -File: pcb.info, Node: Redo Action, Next: RemoveSelected Action, Prev: Quit Action, Up: core actions - -F.1.66 Redo ------------ - -Redo() - -Redo recent"undo"operations. - - This routine allows you to recover from the last undo command. You -might want to do this if you thought that undo was going to revert -something other than what it actually did (in case you are confused -about which operations are un-doable), or if you have been backing up -through a long undo list and over-shoot your stopping point. Any -change that is made since the undo in question will trim the redo list. -For example if you add ten lines, then undo three of them you could use -redo to put them back, but if you move a line on the board before -performing the redo, you will lose the ability to "redo" the three -"undone" lines. - - -File: pcb.info, Node: RemoveSelected Action, Next: Renumber Action, Prev: Redo Action, Up: core actions - -F.1.67 RemoveSelected ---------------------- - -RemoveSelected() - -Removes any selected objects. - - -File: pcb.info, Node: Renumber Action, Next: Report Action, Prev: RemoveSelected Action, Up: core actions - -F.1.68 Renumber ---------------- - -Renumber() -Renumber(filename) - -Renumber all elements. The changes will be recorded to filename for -use in backannotating these changes to the schematic. - - -File: pcb.info, Node: Report Action, Next: ReportDialog Action, Prev: Renumber Action, Up: core actions - -F.1.69 Report -------------- - -Report(Object|DrillReport|FoundPins|NetLength|AllNetLengths|[,name]) - -Produce various report. - -`Object' - The object under the crosshair will be reported, describing various - aspects of the object. - -`DrillReport' - A report summarizing the number of drill sizes used, and how many - of each, will be produced. - -`FoundPins' - A report listing all pins and pads which are marked as "found" will - be produced. - -`NetLength' - The name and length of the net under the crosshair will be - reported to the message log. - -`AllNetLengths' - The name and length of the net under the crosshair will be - reported to the message log. An optional parameter specifies mm, - mil, pcb, or in units - - - -File: pcb.info, Node: ReportDialog Action, Next: RipUp Action, Prev: Report Action, Up: core actions - -F.1.70 ReportDialog -------------------- - -ReportDialog() - -Report on the object under the crosshair - - This is a shortcut for `Report(Object)'. - - -File: pcb.info, Node: RipUp Action, Next: rn Action, Prev: ReportDialog Action, Up: core actions - -F.1.71 RipUp ------------- - -RipUp(All|Selected|Element) - -Ripup auto-routed tracks, or convert an element to parts. - -`All' - Removes all lines and vias which were created by the autorouter. - -`Selected' - Removes all selected lines and vias which were created by the - autorouter. - -`Element' - Converts the element under the cursor to parts (vias and lines). - Note that this uses the highest numbered paste buffer. - - - -File: pcb.info, Node: rn Action, Next: RouteStyle Action, Prev: RipUp Action, Up: core actions - -F.1.72 rn ---------- - -rn [name] - -Reads netlist. - - If no filename is given a file select box will pop up. The file is -read via the command defined by the _RatCommand_ resource. The command -must send its output to _stdout_. - - Netlists are used for generating rat's nests (see *note Rats Nest::) -and for verifying the board layout (which is also accomplished by the -_Ratsnest_ command). - - This is one of the command box helper actions. While it is a regular -action and can be used like any other action, its name and syntax are -optimized for use with the command box (`:') and thus the syntax is -documented for that purpose. - - -File: pcb.info, Node: RouteStyle Action, Next: s Action, Prev: rn Action, Up: core actions - -F.1.73 RouteStyle ------------------ - -RouteStyle(1|2|3|4) - -Copies the indicated routing style into the current sizes. - - -File: pcb.info, Node: s Action, Next: SaveSettings Action, Prev: RouteStyle Action, Up: core actions - -F.1.74 s --------- - -s [name] - -Saves layout data. - - Data and the filename are passed to the command defined by the -resource _saveCommand_. It must read the layout data from _stdin_. If -no filename is entered, either the last one is used again or, if it is -not available, a file select box will pop up. - - This is one of the command box helper actions. While it is a regular -action and can be used like any other action, its name and syntax are -optimized for use with the command box (`:') and thus the syntax is -documented for that purpose. - - -File: pcb.info, Node: SaveSettings Action, Next: SaveTo Action, Prev: s Action, Up: core actions - -F.1.75 SaveSettings -------------------- - -SaveSettings() -SaveSettings(local) - -Saves settings. - - If you pass no arguments, the settings are stored in -`$HOME/.pcb/settings'. If you pass the word `local' they're saved in -`./pcb.settings'. - - -File: pcb.info, Node: SaveTo Action, Next: Select Action, Prev: SaveSettings Action, Up: core actions - -F.1.76 SaveTo -------------- - -SaveTo(Layout|LayoutAs,filename) -SaveTo(AllConnections|AllUnusedPins|ElementConnections,filename) -SaveTo(PasteBuffer,filename) - -Saves data to a file. - -`Layout' - Saves the current layout. - -`LayoutAs' - Saves the current layout, and remembers the filename used. - -`AllConnections' - Save all connections to a file. - -`AllUnusedPins' - List all unused pins to a file. - -`ElementConnections' - Save connections to the element at the cursor to a file. - -`PasteBuffer' - Save the content of the active Buffer to a file. This is the - graphical way to create a footprint. - - - -File: pcb.info, Node: Select Action, Next: SetFlag Action, Prev: SaveTo Action, Up: core actions - -F.1.77 Select -------------- - -Select(Object|ToggleObject) -Select(All|Block|Connection) -Select(ElementByName|ObjectByName|PadByName|PinByName) -Select(ElementByName|ObjectByName|PadByName|PinByName, Name) -Select(TextByName|ViaByName|NetByName) -Select(TextByName|ViaByName|NetByName, Name) -Select(Convert) - -Toggles or sets the selection. - -`ElementByName' - -`ObjectByName' - -`PadByName' - -`PinByName' - -`TextByName' - -`ViaByName' - -`NetByName' - These all rely on having a regular expression parser built into - `pcb'. If the name is not specified then the user is prompted for - a pattern, and all objects that match the pattern and are of the - type specified are selected. - -`Object' - -`ToggleObject' - Selects the object under the cursor. - -`Block' - Selects all objects in a rectangle indicated by the cursor. - -`All' - Selects all objects on the board. - -`Connection' - Selects all connections with the "found" flag set. - -`Convert' - Converts the selected objects to an element. This uses the highest - numbered paste buffer. - - - -File: pcb.info, Node: SetFlag Action, Next: SetOctagon Action, Prev: Select Action, Up: core actions - -F.1.78 SetFlag --------------- - -SetFlag(Object|Selected|SelectedObjects, flag) -SetFlag(SelectedLines|SelectedPins|SelectedVias, flag) -SetFlag(SelectedPads|SelectedTexts|SelectedNames, flag) -SetFlag(SelectedElements, flag) -flag = square | octagon | thermal | join - -Sets flags on objects. - - Turns the given flag on, regardless of its previous setting. See -`ChangeFlag'. - - SetFlag(SelectedPins,thermal) - - -File: pcb.info, Node: SetOctagon Action, Next: SetSame Action, Prev: SetFlag Action, Up: core actions - -F.1.79 SetOctagon ------------------ - -SetOctagon(Object|ToggleObject|SelectedElements|Selected) - -Sets the octagon-flag of objects. - - Pins, pads, and vias can have various shapes. All may be round. -Pins and pads may be square (obviously "square" pads are usually -rectangular). Pins and vias may be octagonal. When you change a shape -flag of an element, you actually change all of its pins and pads. - - Note that the square flag takes precedence over the octagon flag, -thus, if both the square and octagon flags are set, the object is -square. When the square flag is cleared, the pins and pads will be -either round or, if the octagon flag is set, octagonal. - - -File: pcb.info, Node: SetSame Action, Next: SetSquare Action, Prev: SetOctagon Action, Up: core actions - -F.1.80 SetSame --------------- - -SetSame() - -Sets current layer and sizes to match indicated item. - - When invoked over any line, arc, polygon, or via, this changes the -current layer to be the layer that item is on, and changes the current -sizes (thickness, keepaway, drill, etc) according to that item. - - -File: pcb.info, Node: SetSquare Action, Next: SetThermal Action, Prev: SetSame Action, Up: core actions - -F.1.81 SetSquare ----------------- - -SetSquare(ToggleObject|SelectedElements|SelectedPins) - -sets the square-flag of objects. - - Note that `Pins' means pins and pads. - - Pins, pads, and vias can have various shapes. All may be round. -Pins and pads may be square (obviously "square" pads are usually -rectangular). Pins and vias may be octagonal. When you change a shape -flag of an element, you actually change all of its pins and pads. - - Note that the square flag takes precedence over the octagon flag, -thus, if both the square and octagon flags are set, the object is -square. When the square flag is cleared, the pins and pads will be -either round or, if the octagon flag is set, octagonal. - - -File: pcb.info, Node: SetThermal Action, Next: SetValue Action, Prev: SetSquare Action, Up: core actions - -F.1.82 SetThermal ------------------ - -SetThermal(Object|SelectedPins|SelectedVias|Selected, Style) - -Set the thermal (on the current layer) of pins or vias to the given -style. Style = 0 means no thermal. Style = 1 has diagonal fingers -with sharp edges. Style = 2 has horizontal and vertical fingers with -sharp edges. Style = 3 is a solid connection to the plane.Style = 4 -has diagonal fingers with rounded edges. Style = 5 has horizontal and -vertical fingers with rounded edges. - - This changes how/whether pins or vias connect to any rectangle or -polygon on the current layer. The first argument can specify one -object, or all selected pins, or all selected vias, or all selected -pins and vias. The second argument specifies the style of connection. -There are 5 possibilities: 0 - no connection, 1 - 45 degree fingers -with sharp edges, 2 - horizontal & vertical fingers with sharp edges, 3 -- solid connection, 4 - 45 degree fingers with rounded corners, 5 - -horizontal & vertical fingers with rounded corners. - - Pins and Vias may have thermals whether or not there is a polygon -available to connect with. However, they will have no effect without -the polygon. - - -File: pcb.info, Node: SetValue Action, Next: ToggleHideName Action, Prev: SetThermal Action, Up: core actions - -F.1.83 SetValue ---------------- - -SetValue(Grid|Line|LineSize|Text|TextScale|ViaDrillingHole|Via|ViaSize, delta) - -Change various board-wide values and sizes. - -`ViaDrillingHole' - Changes the diameter of the drill for new vias. - -`Grid' - Sets the grid spacing. - -`Line' - -`LineSize' - Changes the thickness of new lines. - -`Via' - -`ViaSize' - Changes the diameter of new vias. - -`Text' - -`TextScale' - Changes the size of new text. - - - -File: pcb.info, Node: ToggleHideName Action, Next: ToggleVendor Action, Prev: SetValue Action, Up: core actions - -F.1.84 ToggleHideName ---------------------- - -ToggleHideName(Object|SelectedElements) - -Toggles the visibility of element names. - - If names are hidden you won't see them on the screen and they will -not appear on the silk layer when you print the layout. - - -File: pcb.info, Node: ToggleVendor Action, Next: Undo Action, Prev: ToggleHideName Action, Up: core actions - -F.1.85 ToggleVendor -------------------- - -ToggleVendor() - -Toggles the state of automatic drill size mapping. - - When drill mapping is enabled, new instances of pins and vias will -have their drill holes mapped to one of the allowed drill sizes -specified in the currently loaded vendor drill table. To enable drill -mapping, a vendor resource file containing a drill table must be loaded -first. - - -File: pcb.info, Node: Undo Action, Next: UnloadVendor Action, Prev: ToggleVendor Action, Up: core actions - -F.1.86 Undo ------------ - -Undo() -Undo(ClearList) - -Undo recent changes. - - The unlimited undo feature of `Pcb' allows you to recover from most -operations that materially affect you work. Calling `Undo()' without -any parameter recovers from the last (non-undo) operation. `ClearList' -is used to release the allocated memory. `ClearList' is called whenever -a new layout is started or loaded. See also `Redo' and `Atomic'. - - Note that undo groups operations by serial number; changes with the -same serial number will be undone (or redone) as a group. See `Atomic'. - - -File: pcb.info, Node: UnloadVendor Action, Next: Unselect Action, Prev: Undo Action, Up: core actions - -F.1.87 UnloadVendor -------------------- - -UnloadVendor() - -Unloads the current vendor drill mapping table. - - -File: pcb.info, Node: Unselect Action, Next: w Action, Prev: UnloadVendor Action, Up: core actions - -F.1.88 Unselect ---------------- - -Unselect(All|Block|Connection) -Unselect(ElementByName|ObjectByName|PadByName|PinByName) -Unselect(ElementByName|ObjectByName|PadByName|PinByName, Name) -Unselect(TextByName|ViaByName) -Unselect(TextByName|ViaByName, Name) - -Unselects the object at the pointer location or the specified objects. - -`All' - Unselect all objects. - -`Block' - Unselect all objects in a rectangle given by the cursor. - -`Connection' - Unselect all connections with the "found" flag set. - -`ElementByName' - -`ObjectByName' - -`PadByName' - -`PinByName' - -`TextByName' - -`ViaByName' - These all rely on having a regular expression parser built into - `pcb'. If the name is not specified then the user is prompted for - a pattern, and all objects that match the pattern and are of the - type specified are unselected. - - - -File: pcb.info, Node: w Action, Next: wq Action, Prev: Unselect Action, Up: core actions - -F.1.89 w --------- - -w [name] - -Saves layout data. - - This commands has been added for the convenience of `vi' users and -has the same functionality as `s'. - - This is one of the command box helper actions. While it is a regular -action and can be used like any other action, its name and syntax are -optimized for use with the command box (`:') and thus the syntax is -documented for that purpose. - - -File: pcb.info, Node: wq Action, Prev: w Action, Up: core actions - -F.1.90 wq ---------- - -wq - -Saves the layout data and quits. - - This command has been added for the convenience of `vi' users and -has the same functionality as `s' combined with `q'. - - This is one of the command box helper actions. While it is a regular -action and can be used like any other action, its name and syntax are -optimized for use with the command box (`:') and thus the syntax is -documented for that purpose. - - -File: pcb.info, Node: common actions, Next: gtk actions, Prev: core actions, Up: Action Reference - -F.2 common actions -================== - -* Menu: - -* LayersChanged Action:: Tells the GUI that the layers have changed. -* LibraryChanged Action:: Tells the GUI that the libraries have changed. -* NetlistChanged Action:: Tells the GUI that the netlist has changed. -* PCBChanged Action:: Tells the GUI that the whole PCB has changed. The optional``revert"parameter can be used as a hint to the GUI that the same design is beingreloaded, and that it might keep some viewport settings -* RouteStylesChanged Action:: Tells the GUI that the routing styles have changed. - - -File: pcb.info, Node: LayersChanged Action, Next: LibraryChanged Action, Up: common actions - -F.2.1 LayersChanged -------------------- - -LayersChanged() - -Tells the GUI that the layers have changed. - - This includes layer names, colors, stacking order, visibility, etc. - - This is one of a number of actions which are part of the HID -interface. The core functions use these actions to tell the current -GUI when to change the presented information in response to changes -that the GUI may not know about. The user normally does not invoke -these directly. - - -File: pcb.info, Node: LibraryChanged Action, Next: NetlistChanged Action, Prev: LayersChanged Action, Up: common actions - -F.2.2 LibraryChanged --------------------- - -LibraryChanged() - -Tells the GUI that the libraries have changed. - - This is one of a number of actions which are part of the HID -interface. The core functions use these actions to tell the current -GUI when to change the presented information in response to changes -that the GUI may not know about. The user normally does not invoke -these directly. - - -File: pcb.info, Node: NetlistChanged Action, Next: PCBChanged Action, Prev: LibraryChanged Action, Up: common actions - -F.2.3 NetlistChanged --------------------- - -NetlistChanged() - -Tells the GUI that the netlist has changed. - - This is one of a number of actions which are part of the HID -interface. The core functions use these actions to tell the current -GUI when to change the presented information in response to changes -that the GUI may not know about. The user normally does not invoke -these directly. - - -File: pcb.info, Node: PCBChanged Action, Next: RouteStylesChanged Action, Prev: NetlistChanged Action, Up: common actions - -F.2.4 PCBChanged ----------------- - -PCBChanged([revert]) - -Tells the GUI that the whole PCB has changed. The -optional"revert"parameter can be used as a hint to the GUI that the -same design is beingreloaded, and that it might keep some viewport -settings - - This is one of a number of actions which are part of the HID -interface. The core functions use these actions to tell the current -GUI when to change the presented information in response to changes -that the GUI may not know about. The user normally does not invoke -these directly. - - -File: pcb.info, Node: RouteStylesChanged Action, Prev: PCBChanged Action, Up: common actions - -F.2.5 RouteStylesChanged ------------------------- - -RouteStylesChanged() - -Tells the GUI that the routing styles have changed. - - This is one of a number of actions which are part of the HID -interface. The core functions use these actions to tell the current -GUI when to change the presented information in response to changes -that the GUI may not know about. The user normally does not invoke -these directly. - - -File: pcb.info, Node: gtk actions, Next: lesstif actions, Prev: common actions, Up: Action Reference - -F.3 gtk actions -=============== - -* Menu: - -* gtk About Action:: N_("Tell the user about this version of PCB."); -* gtk AdjustStyle Action:: Open the window which allows editing of the route styles. -* gtk Center Action:: N_("Moves the pointer to the center of the window."); -* gtk Cursor Action:: N_("Move the cursor."); -* gtk DoWindows Action:: N_("Open various GUI windows."); -* gtk EditLayerGroups Action:: Open the preferences window which allows editing of the layer groups. -* gtk GetXY Action:: N_("Get a coordinate."); -* gtk ImportGUI Action:: N_("Asks user which schematics to import into PCB. -"); -* gtk Pan Action:: N_("Start or stop panning (Mode = 1 to start, 0 to stop) -Optional thumb argument is ignored for now in gtk hid. -"); -* gtk Popup Action:: N_("Bring up the popup menu specified by `MenuName'. -If called by a mouse event then the mouse button number -must be specified as the optional second argument."); -* gtk Print Action:: N_("Print the layout."); -* gtk PrintCalibrate Action:: N_("Calibrate the printer."); -* gtk Save Action:: N_("Save layout and/or element data to a user-selected file."); -* gtk SelectLayer Action:: Select which layer is the current layer. -* gtk SetUnits Action:: N_("Set the default measurement units."); -* gtk SwapSides Action:: N_("Swaps the side of the board you're looking at."); -* gtk ToggleView Action:: Toggle the visibility of the specified layer or layer group. -* gtk Zoom Action:: N_("Various zoom factor changes."); - - -File: pcb.info, Node: gtk About Action, Next: gtk AdjustStyle Action, Up: gtk actions - -F.3.1 gtk About ---------------- - -About() - -N_("Tell the user about this version of PCB."); - - This just pops up a dialog telling the user which version of `pcb' -they're running. - - -File: pcb.info, Node: gtk AdjustStyle Action, Next: gtk Center Action, Prev: gtk About Action, Up: gtk actions - -F.3.2 gtk AdjustStyle ---------------------- - -AdjustStyle() - -Open the window which allows editing of the route styles. - - Opens the window which allows editing of the route styles. - - -File: pcb.info, Node: gtk Center Action, Next: gtk Cursor Action, Prev: gtk AdjustStyle Action, Up: gtk actions - -F.3.3 gtk Center ----------------- - -Center() - -N_("Moves the pointer to the center of the window."); - - Move the pointer to the center of the window, but only if it's -currently within the window already. - - -File: pcb.info, Node: gtk Cursor Action, Next: gtk DoWindows Action, Prev: gtk Center Action, Up: gtk actions - -F.3.4 gtk Cursor ----------------- - -Cursor(Type,DeltaUp,DeltaRight,Units) - -N_("Move the cursor."); - - This action moves the mouse cursor. Unlike other actions which take -coordinates, this action's coordinates are always relative to the -user's view of the board. Thus, a positive DELTAUP may move the cursor -towards the board origin if the board is inverted. - - Type is one of `Pan' or `Warp'. `Pan' causes the viewport to move -such that the crosshair is under the mouse cursor. `Warp' causes the -mouse cursor to move to be above the crosshair. - - UNITS can be one of the following: - -`mil' -`mm' - The cursor is moved by that amount, in board units. - -`grid' - The cursor is moved by that many grid points. - -`view' - The values are percentages of the viewport's view. Thus, a pan of - `100' would scroll the viewport by exactly the width of the - current view. - -`board' - The values are percentages of the board size. Thus, a move of - `50,50' moves you halfway across the board. - - - -File: pcb.info, Node: gtk DoWindows Action, Next: gtk EditLayerGroups Action, Prev: gtk Cursor Action, Up: gtk actions - -F.3.5 gtk DoWindows -------------------- - -DoWindows(1|2|3|4|5|6) -DoWindows(Layout|Library|Log|Netlist|Preferences|DRC) - -N_("Open various GUI windows."); - -`1' -`Layout' - Open the layout window. Since the layout window is always shown - anyway, this has no effect. - -`2' -`Library' - Open the library window. - -`3' -`Log' - Open the log window. - -`4' -`Netlist' - Open the netlist window. - -`5' -`Preferences' - Open the preferences window. - -`6' -`DRC' - Open the DRC violations window. - - - -File: pcb.info, Node: gtk EditLayerGroups Action, Next: gtk GetXY Action, Prev: gtk DoWindows Action, Up: gtk actions - -F.3.6 gtk EditLayerGroups -------------------------- - -EditLayerGroups() - -Open the preferences window which allows editing of the layer groups. - - Opens the preferences window which is where the layer groups are -edited. This action is primarily provides to provide menu resource -compatibility with the lesstif HID. - - -File: pcb.info, Node: gtk GetXY Action, Next: gtk ImportGUI Action, Prev: gtk EditLayerGroups Action, Up: gtk actions - -F.3.7 gtk GetXY ---------------- - -GetXY() - -N_("Get a coordinate."); - - Prompts the user for a coordinate, if one is not already selected. - - -File: pcb.info, Node: gtk ImportGUI Action, Next: gtk Pan Action, Prev: gtk GetXY Action, Up: gtk actions - -F.3.8 gtk ImportGUI -------------------- - -ImportGUI() - -N_("Asks user which schematics to import into PCB. "); - - Asks user which schematics to import into PCB. - - -File: pcb.info, Node: gtk Pan Action, Next: gtk Popup Action, Prev: gtk ImportGUI Action, Up: gtk actions - -F.3.9 gtk Pan -------------- - -Pan([thumb], Mode) - -N_("Start or stop panning (Mode = 1 to start, 0 to stop) Optional thumb -argument is ignored for now in gtk hid. "); - - Start or stop panning. To start call with Mode = 1, to stop call -with Mode = 0. - - -File: pcb.info, Node: gtk Popup Action, Next: gtk Print Action, Prev: gtk Pan Action, Up: gtk actions - -F.3.10 gtk Popup ----------------- - -Popup(MenuName, [Button]) - -N_("Bring up the popup menu specified by `MenuName'. If called by a -mouse event then the mouse button number must be specified as the -optional second argument."); - - This just pops up the specified menu. The menu must have been -defined as a named subresource of the Popups resource in the menu -resource file. - - -File: pcb.info, Node: gtk Print Action, Next: gtk PrintCalibrate Action, Prev: gtk Popup Action, Up: gtk actions - -F.3.11 gtk Print ----------------- - -Print() - -N_("Print the layout."); - - This will find the default printing HID, prompt the user for its -options, and print the layout. - - -File: pcb.info, Node: gtk PrintCalibrate Action, Next: gtk Save Action, Prev: gtk Print Action, Up: gtk actions - -F.3.12 gtk PrintCalibrate -------------------------- - -PrintCalibrate() - -N_("Calibrate the printer."); - - This will print a calibration page, which you would measure and type -the measurements in, so that future printouts will be more precise. - - -File: pcb.info, Node: gtk Save Action, Next: gtk SelectLayer Action, Prev: gtk PrintCalibrate Action, Up: gtk actions - -F.3.13 gtk Save ---------------- - -Save() -Save(Layout|LayoutAs) -Save(AllConnections|AllUnusedPins|ElementConnections) -Save(PasteBuffer) - -N_("Save layout and/or element data to a user-selected file."); - - This action is a GUI front-end to the core's `SaveTo' action (*note -SaveTo Action::). If you happen to pass a filename, like `SaveTo', -then `SaveTo' is called directly. Else, the user is prompted for a -filename to save, and then `SaveTo' is called with that filename. - - -File: pcb.info, Node: gtk SelectLayer Action, Next: gtk SetUnits Action, Prev: gtk Save Action, Up: gtk actions - -F.3.14 gtk SelectLayer ----------------------- - -SelectLayer(1..MAXLAYER|Silk|Rats) - -Select which layer is the current layer. - - The specified layer becomes the currently active layer. It is made -visible if it is not already visible - - -File: pcb.info, Node: gtk SetUnits Action, Next: gtk SwapSides Action, Prev: gtk SelectLayer Action, Up: gtk actions - -F.3.15 gtk SetUnits -------------------- - -SetUnits(mm|mil) - -N_("Set the default measurement units."); - -`mil' - Sets the display units to mils (1/1000 inch). - -`mm' - Sets the display units to millimeters. - - - -File: pcb.info, Node: gtk SwapSides Action, Next: gtk ToggleView Action, Prev: gtk SetUnits Action, Up: gtk actions - -F.3.16 gtk SwapSides --------------------- - -SwapSides(|v|h|r) - -N_("Swaps the side of the board you're looking at."); - - This action changes the way you view the board. - -`v' - Flips the board over vertically (up/down). - -`h' - Flips the board over horizontally (left/right), like flipping - pages in a book. - -`r' - Rotates the board 180 degrees without changing sides. - - - If no argument is given, the board isn't moved but the opposite side -is shown. - - Normally, this action changes which pads and silk layer are drawn as -true silk, and which are drawn as the "invisible" layer. It also -determines which solder mask you see. - - As a special case, if the layer group for the side you're looking at -is visible and currently active, and the layer group for the opposite -is not visible (i.e. disabled), then this action will also swap which -layer group is visible and active, effectively swapping the "working -side" of the board. - - -File: pcb.info, Node: gtk ToggleView Action, Next: gtk Zoom Action, Prev: gtk SwapSides Action, Up: gtk actions - -F.3.17 gtk ToggleView ---------------------- - -ToggleView(1..MAXLAYER) -ToggleView(layername) -ToggleView(Silk|Rats|Pins|Vias|Mask|BackSide) - -Toggle the visibility of the specified layer or layer group. - - If you pass an integer, that layer is specified by index (the first -layer is `1', etc). If you pass a layer name, that layer is specified -by name. When a layer is specified, the visibility of the layer group -containing that layer is toggled. - - If you pass a special layer name, the visibility of those components -(silk, rats, etc) is toggled. Note that if you have a layer named the -same as a special layer, the layer is chosen over the special layer. - - -File: pcb.info, Node: gtk Zoom Action, Prev: gtk ToggleView Action, Up: gtk actions - -F.3.18 gtk Zoom ---------------- - -Zoom() -Zoom(factor) - -N_("Various zoom factor changes."); Changes the zoom (magnification) of -the view of the board. If no arguments are passed, the view is scaled -such that the board just fits inside the visible window (i.e. "view -all"). Otherwise, FACTOR specifies a change in zoom factor. It may be -prefixed by `+', `-', or `=' to change how the zoom factor is modified. -The FACTOR is a floating point number, such as `1.5' or `0.75'. - -`+FACTOR' - Values greater than 1.0 cause the board to be drawn smaller; more - of the board will be visible. Values between 0.0 and 1.0 cause - the board to be drawn bigger; less of the board will be visible. - -`-FACTOR' - Values greater than 1.0 cause the board to be drawn bigger; less of - the board will be visible. Values between 0.0 and 1.0 cause the - board to be drawn smaller; more of the board will be visible. - -`=FACTOR' - The FACTOR is an absolute zoom factor; the unit for this value is - "PCB units per screen pixel". Since PCB units are 0.01 mil, a - FACTOR of 1000 means 10 mils (0.01 in) per pixel, or 100 DPI, - about the actual resolution of most screens - resulting in an - "actual size" board. Similarly, a FACTOR of 100 gives you a 10x - actual size. - - - Note that zoom factors of zero are silently ignored. - - -File: pcb.info, Node: lesstif actions, Prev: gtk actions, Up: Action Reference - -F.4 lesstif actions -=================== - -* Menu: - -* lesstif About Action:: Tell the user about this version of PCB. -* lesstif AdjustSizes Action:: Let the user change the board size, DRC parameters, etc -* lesstif AdjustStyle Action:: Displays the route style adjustment window. -* lesstif Benchmark Action:: Benchmark the GUI speed. -* lesstif Command Action:: Displays the command line input window. -* lesstif Cursor Action:: Move the cursor. -* lesstif Debug Action:: Debug action. -* lesstif DebugXY Action:: Debug action, with coordinates -* lesstif DoWindows Action:: Open various GUI windows. -* lesstif DumpKeys Action:: Dump Lesstif key bindings. -* lesstif EditLayerGroups Action:: Let the user change the layer groupings -* lesstif Export Action:: Export the layout. -* lesstif GetXY Action:: Get a coordinate. -* lesstif ImportGUI Action:: Lets the user choose the schematics to import from -* lesstif LibraryShow Action:: Displays the library window. -* lesstif Load Action:: Load layout data from a user-selected file. -* lesstif LoadVendor Action:: Loads a user-selected vendor resource file. -* lesstif NetlistShow Action:: Selects the given pinname or netname in the netlist window. -* lesstif Print Action:: Print the layout. -* lesstif PrintCalibrate Action:: Calibrate the printer. -* lesstif PromptFor Action:: Prompt for a response. -* lesstif Return Action:: Simulate a passing or failing action. -* lesstif Save Action:: Save layout data to a user-selected file. -* lesstif SelectLayer Action:: Select which layer is the current layer. -* lesstif SetUnits Action:: Set the default measurement units. -* lesstif SwapSides Action:: Swaps the side of the board you're looking at. -* lesstif ToggleView Action:: Toggle the visibility of the specified layer or layer group. -* lesstif Zoom Action:: Various zoom factor changes. - - -File: pcb.info, Node: lesstif About Action, Next: lesstif AdjustSizes Action, Up: lesstif actions - -F.4.1 lesstif About -------------------- - -About() - -Tell the user about this version of PCB. - - This just pops up a dialog telling the user which version of `pcb' -they're running. - - -File: pcb.info, Node: lesstif AdjustSizes Action, Next: lesstif AdjustStyle Action, Prev: lesstif About Action, Up: lesstif actions - -F.4.2 lesstif AdjustSizes -------------------------- - -AdjustSizes() - -Let the user change the board size, DRC parameters, etc - - Displays a dialog box that lets the user change the board size, DRC -parameters, and text scale. - - The units are determined by the default display units. - - -File: pcb.info, Node: lesstif AdjustStyle Action, Next: lesstif Benchmark Action, Prev: lesstif AdjustSizes Action, Up: lesstif actions - -F.4.3 lesstif AdjustStyle -------------------------- - -AdjustStyle() - -Displays the route style adjustment window. - - -File: pcb.info, Node: lesstif Benchmark Action, Next: lesstif Command Action, Prev: lesstif AdjustStyle Action, Up: lesstif actions - -F.4.4 lesstif Benchmark ------------------------ - -Benchmark() - -Benchmark the GUI speed. - - This action is used to speed-test the Lesstif graphics subsystem. It -redraws the current screen as many times as possible in ten seconds. -It reports the amount of time needed to draw the screen once. - - -File: pcb.info, Node: lesstif Command Action, Next: lesstif Cursor Action, Prev: lesstif Benchmark Action, Up: lesstif actions - -F.4.5 lesstif Command ---------------------- - -Command() - -Displays the command line input window. - - The command window allows the user to manually enter actions to be -executed. Action syntax can be done one of two ways: - -`' - Follow the action name by an open parenthesis, arguments separated - by commas, end with a close parenthesis. Example: `Abc(1,2,3)' - -`' - Separate the action name and arguments by spaces. Example: `Abc 1 - 2 3'. - - - The first option allows you to have arguments with spaces in them, -but the second is more "natural" to type for most people. - - Note that action names are not case sensitive, but arguments normally -are. However, most actions will check for "keywords" in a case -insensitive way. - - There are three ways to finish with the command window. If you press -the `Enter' key, the command is invoked, the window goes away, and the -next time you bring up the command window it's empty. If you press the -`Esc' key, the window goes away without invoking anything, and the next -time you bring up the command window it's empty. If you change focus -away from the command window (i.e. click on some other window), the -command window goes away but the next time you bring it up it resumes -entering the command you were entering before. - - -File: pcb.info, Node: lesstif Cursor Action, Next: lesstif Debug Action, Prev: lesstif Command Action, Up: lesstif actions - -F.4.6 lesstif Cursor --------------------- - -Cursor(Type,DeltaUp,DeltaRight,Units) - -Move the cursor. - - This action moves the mouse cursor. Unlike other actions which take -coordinates, this action's coordinates are always relative to the -user's view of the board. Thus, a positive DELTAUP may move the cursor -towards the board origin if the board is inverted. - - Type is one of `Pan' or `Warp'. `Pan' causes the viewport to move -such that the crosshair is under the mouse cursor. `Warp' causes the -mouse cursor to move to be above the crosshair. - - UNITS can be one of the following: - -`mil' -`mm' - The cursor is moved by that amount, in board units. - -`grid' - The cursor is moved by that many grid points. - -`view' - The values are percentages of the viewport's view. Thus, a pan of - `100' would scroll the viewport by exactly the width of the - current view. - -`board' - The values are percentages of the board size. Thus, a move of - `50,50' moves you halfway across the board. - - - -File: pcb.info, Node: lesstif Debug Action, Next: lesstif DebugXY Action, Prev: lesstif Cursor Action, Up: lesstif actions - -F.4.7 lesstif Debug -------------------- - -Debug(...) - -Debug action. - - This action exists to help debug scripts; it simply prints all its -arguments to stdout. - - -File: pcb.info, Node: lesstif DebugXY Action, Next: lesstif DoWindows Action, Prev: lesstif Debug Action, Up: lesstif actions - -F.4.8 lesstif DebugXY ---------------------- - -DebugXY(...) - -Debug action, with coordinates - - Like `Debug', but requires a coordinate. If the user hasn't yet -indicated a location on the board, the user will be prompted to click -on one. - - -File: pcb.info, Node: lesstif DoWindows Action, Next: lesstif DumpKeys Action, Prev: lesstif DebugXY Action, Up: lesstif actions - -F.4.9 lesstif DoWindows ------------------------ - -DoWindows(1|2|3|4) -DoWindows(Layout|Library|Log|Netlist) - -Open various GUI windows. - -`1' -`Layout' - Open the layout window. Since the layout window is always shown - anyway, this has no effect. - -`2' -`Library' - Open the library window. - -`3' -`Log' - Open the log window. - -`4' -`Netlist' - Open the netlist window. - - - -File: pcb.info, Node: lesstif DumpKeys Action, Next: lesstif EditLayerGroups Action, Prev: lesstif DoWindows Action, Up: lesstif actions - -F.4.10 lesstif DumpKeys ------------------------ - -DumpKeys() - -Dump Lesstif key bindings. - - Causes the list of key bindings (from `pcb-menu.res') to be dumped -to stdout. This is most useful when invoked from the command line like -this: - - pcb --action-string DumpKeys - - -File: pcb.info, Node: lesstif EditLayerGroups Action, Next: lesstif Export Action, Prev: lesstif DumpKeys Action, Up: lesstif actions - -F.4.11 lesstif EditLayerGroups ------------------------------- - -EditLayerGroups() - -Let the user change the layer groupings - - Displays a dialog that lets the user view and change the layer -groupings. Each layer (row) can be a member of any one layer group -(column). Note the special layers `solder' and `component' allow you -to specify which groups represent the top and bottom of the board. - - See *note ChangeName Action::. - - -File: pcb.info, Node: lesstif Export Action, Next: lesstif GetXY Action, Prev: lesstif EditLayerGroups Action, Up: lesstif actions - -F.4.12 lesstif Export ---------------------- - -Export() - -Export the layout. - - Prompts the user for an exporter to use. Then, prompts the user for -that exporter's options, and exports the layout. - - -File: pcb.info, Node: lesstif GetXY Action, Next: lesstif ImportGUI Action, Prev: lesstif Export Action, Up: lesstif actions - -F.4.13 lesstif GetXY --------------------- - -GetXY() - -Get a coordinate. - - Prompts the user for a coordinate, if one is not already selected. - - -File: pcb.info, Node: lesstif ImportGUI Action, Next: lesstif LibraryShow Action, Prev: lesstif GetXY Action, Up: lesstif actions - -F.4.14 lesstif ImportGUI ------------------------- - -ImportGUI() - -Lets the user choose the schematics to import from - - Displays a dialog that lets the user select the schematic(s) to -import from, then saves that information in the layout's attributes for -future imports. - - -File: pcb.info, Node: lesstif LibraryShow Action, Next: lesstif Load Action, Prev: lesstif ImportGUI Action, Up: lesstif actions - -F.4.15 lesstif LibraryShow --------------------------- - -LibraryShow() - -Displays the library window. - - -File: pcb.info, Node: lesstif Load Action, Next: lesstif LoadVendor Action, Prev: lesstif LibraryShow Action, Up: lesstif actions - -F.4.16 lesstif Load -------------------- - -Load() -Load(Layout|LayoutToBuffer|ElementToBuffer|Netlist|Revert) - -Load layout data from a user-selected file. - - This action is a GUI front-end to the core's `LoadFrom' action -(*note LoadFrom Action::). If you happen to pass a filename, like -`LoadFrom', then `LoadFrom' is called directly. Else, the user is -prompted for a filename to load, and then `LoadFrom' is called with -that filename. - - -File: pcb.info, Node: lesstif LoadVendor Action, Next: lesstif NetlistShow Action, Prev: lesstif Load Action, Up: lesstif actions - -F.4.17 lesstif LoadVendor -------------------------- - -LoadVendor() - -Loads a user-selected vendor resource file. - - The user is prompted for a file to load, and then `LoadVendorFrom' -is called (*note LoadVendorFrom Action::) to load that vendor file. - - -File: pcb.info, Node: lesstif NetlistShow Action, Next: lesstif Print Action, Prev: lesstif LoadVendor Action, Up: lesstif actions - -F.4.18 lesstif NetlistShow --------------------------- - -NetlistShow(pinname|netname) - -Selects the given pinname or netname in the netlist window. - - -File: pcb.info, Node: lesstif Print Action, Next: lesstif PrintCalibrate Action, Prev: lesstif NetlistShow Action, Up: lesstif actions - -F.4.19 lesstif Print --------------------- - -Print() - -Print the layout. - - This will find the default printing HID, prompt the user for its -options, and print the layout. - - -File: pcb.info, Node: lesstif PrintCalibrate Action, Next: lesstif PromptFor Action, Prev: lesstif Print Action, Up: lesstif actions - -F.4.20 lesstif PrintCalibrate ------------------------------ - -PrintCalibrate() - -Calibrate the printer. - - This will print a calibration page, which you would measure and type -the measurements in, so that future printouts will be more precise. - - -File: pcb.info, Node: lesstif PromptFor Action, Next: lesstif Return Action, Prev: lesstif PrintCalibrate Action, Up: lesstif actions - -F.4.21 lesstif PromptFor ------------------------- - -PromptFor([message[,default]]) - -Prompt for a response. - - This is mostly for testing the lesstif HID interface. The parameters -are passed to the `prompt_for()' HID function, causing the user to be -prompted for a response. The respose is simply printed to the user's -stdout. - - -File: pcb.info, Node: lesstif Return Action, Next: lesstif Save Action, Prev: lesstif PromptFor Action, Up: lesstif actions - -F.4.22 lesstif Return ---------------------- - -Return(0|1) - -Simulate a passing or failing action. - - This is for testing. If passed a 0, does nothing and succeeds. If -passed a 1, does nothing but pretends to fail. - - -File: pcb.info, Node: lesstif Save Action, Next: lesstif SelectLayer Action, Prev: lesstif Return Action, Up: lesstif actions - -F.4.23 lesstif Save -------------------- - -Save() -Save(Layout|LayoutAs) -Save(AllConnections|AllUnusedPins|ElementConnections) -Save(PasteBuffer) - -Save layout data to a user-selected file. - - This action is a GUI front-end to the core's `SaveTo' action (*note -SaveTo Action::). If you happen to pass a filename, like `SaveTo', -then `SaveTo' is called directly. Else, the user is prompted for a -filename to save, and then `SaveTo' is called with that filename. - - -File: pcb.info, Node: lesstif SelectLayer Action, Next: lesstif SetUnits Action, Prev: lesstif Save Action, Up: lesstif actions - -F.4.24 lesstif SelectLayer --------------------------- - -SelectLayer(1..MAXLAYER|Silk|Rats) - -Select which layer is the current layer. - - The specified layer becomes the currently active layer. It is made -visible if it is not already visible - - -File: pcb.info, Node: lesstif SetUnits Action, Next: lesstif SwapSides Action, Prev: lesstif SelectLayer Action, Up: lesstif actions - -F.4.25 lesstif SetUnits ------------------------ - -SetUnits(mm|mil) - -Set the default measurement units. - -`mil' - Sets the display units to mils (1/1000 inch). - -`mm' - Sets the display units to millimeters. - - - -File: pcb.info, Node: lesstif SwapSides Action, Next: lesstif ToggleView Action, Prev: lesstif SetUnits Action, Up: lesstif actions - -F.4.26 lesstif SwapSides ------------------------- - -SwapSides(|v|h|r) - -Swaps the side of the board you're looking at. - - This action changes the way you view the board. - -`v' - Flips the board over vertically (up/down). - -`h' - Flips the board over horizontally (left/right), like flipping - pages in a book. - -`r' - Rotates the board 180 degrees without changing sides. - - - If no argument is given, the board isn't moved but the opposite side -is shown. - - Normally, this action changes which pads and silk layer are drawn as -true silk, and which are drawn as the "invisible" layer. It also -determines which solder mask you see. - - As a special case, if the layer group for the side you're looking at -is visible and currently active, and the layer group for the opposite -is not visible (i.e. disabled), then this action will also swap which -layer group is visible and active, effectively swapping the "working -side" of the board. - - -File: pcb.info, Node: lesstif ToggleView Action, Next: lesstif Zoom Action, Prev: lesstif SwapSides Action, Up: lesstif actions - -F.4.27 lesstif ToggleView -------------------------- - -ToggleView(1..MAXLAYER) -ToggleView(layername) -ToggleView(Silk|Rats|Pins|Vias|Mask|BackSide) - -Toggle the visibility of the specified layer or layer group. - - If you pass an integer, that layer is specified by index (the first -layer is `1', etc). If you pass a layer name, that layer is specified -by name. When a layer is specified, the visibility of the layer group -containing that layer is toggled. - - If you pass a special layer name, the visibility of those components -(silk, rats, etc) is toggled. Note that if you have a layer named the -same as a special layer, the layer is chosen over the special layer. - - -File: pcb.info, Node: lesstif Zoom Action, Prev: lesstif ToggleView Action, Up: lesstif actions - -F.4.28 lesstif Zoom -------------------- - -Zoom() -Zoom(factor) - -Various zoom factor changes. - - Changes the zoom (magnification) of the view of the board. If no -arguments are passed, the view is scaled such that the board just fits -inside the visible window (i.e. "view all"). Otherwise, FACTOR -specifies a change in zoom factor. It may be prefixed by `+', `-', or -`=' to change how the zoom factor is modified. The FACTOR is a -floating point number, such as `1.5' or `0.75'. - -`+FACTOR' - Values greater than 1.0 cause the board to be drawn smaller; more - of the board will be visible. Values between 0.0 and 1.0 cause - the board to be drawn bigger; less of the board will be visible. - -`-FACTOR' - Values greater than 1.0 cause the board to be drawn bigger; less of - the board will be visible. Values between 0.0 and 1.0 cause the - board to be drawn smaller; more of the board will be visible. - -`=FACTOR' - The FACTOR is an absolute zoom factor; the unit for this value is - "PCB units per screen pixel". Since PCB units are 0.01 mil, a - FACTOR of 1000 means 10 mils (0.01 in) per pixel, or 100 DPI, - about the actual resolution of most screens - resulting in an - "actual size" board. Similarly, a FACTOR of 100 gives you a 10x - actual size. - - - Note that zoom factors of zero are silently ignored. - - -File: pcb.info, Node: Glossary, Next: Index, Prev: Action Reference, Up: Top - -Appendix G Glossary -******************* - -Footprint - The pattern of metal, silkscreen, soldermask relief, and drills - which defines where you place a component on a circuit board. - Footprints are the placed by the user onto the PC board during the - placement phase of PCB layout. - -Gerber File - The file format used in the industry to convey a board database to - the manufacturer is RS-274X (which replaces the now obsolete - RS-274D format). This file format was originally developed by - Gerber for their photo plotters and thus RS-274D and RS-274X - format files are often times refered to as "Gerber" files. - -Thermal, Thermal Relief - A thermal relief is a way of connecting a pin to a ground or power - plane. Instead of directly connecting to the plane, small "spokes" - are used to increase the thermal resistance between the pin and - the plane. Often times these connections are refered to as simply - a thermal. By increasing the thermal resistance to the plane, it - becomes easier to solder to the pin. In the drawing below, the - pin on the left is connected to the polygon using a solid - connection with no thermal relief, the middle pin is connected - using a thermal, while the pin on the right has no connection to - the polygon. In PCB, the "Thermal" Tool is used to make both a - solid connection and one with thermal relief (see *note Polygon - Objects::). - - [image src="thermal.png" alt="Example of a thermal relief"] - - -File: pcb.info, Node: Index, Prev: Glossary, Up: Top - -Index of Resources -****************** - -[index] -* Menu: - -* absoluteGrid: Resources. (line 9) -* alignmentDistance: Resources. (line 13) -* allDirectionLines: Resources. (line 17) -* backgroundImage: Resources. (line 21) -* backupInterval: Resources. (line 43) -* bloat: Resources. (line 52) -* BTNMOD: running configure. (line 25) -* connectedColor: Resources. (line 55) -* cross hairColor: Resources. (line 60) -* DEFAULTFONT: running configure. (line 16) -* DEFAULTLIBRARY: running configure. (line 19) -* Element Search: Regular Expressions. (line 6) -* elementColor: Resources. (line 68) -* elementCommand <1>: File Formats. (line 14) -* elementCommand: Resources. (line 74) -* elementContentsCommand: Resources. (line 173) -* elementPath: Resources. (line 85) -* elementSelectedColor: Resources. (line 68) -* Exporting a layout: Exporting. (line 6) -* fileCommand <1>: File Formats. (line 14) -* fileCommand: Resources. (line 93) -* filePath: Resources. (line 102) -* fontCommand <1>: File Formats. (line 14) -* fontCommand: Resources. (line 110) -* fontFile: Resources. (line 118) -* fontPath: Resources. (line 124) -* GNUM4: running configure. (line 22) -* grid: Resources. (line 128) -* gridColor: Resources. (line 133) -* INFOLIBDIR: running configure. (line 10) -* invisibleObjectsColor: Resources. (line 141) -* layerColor: Resources. (line 145) -* layerGroups: Resources. (line 151) -* layerName: Resources. (line 159) -* layerSelectedColor: Resources. (line 145) -* libraryCommand <1>: File Formats. (line 14) -* libraryCommand: Resources. (line 163) -* libraryContentsCommand: File Formats. (line 14) -* libraryFilename: Resources. (line 179) -* libraryPath: Resources. (line 184) -* lineThickness: Resources. (line 189) -* Measuring distances: Measuring distances. (line 6) -* media: Resources. (line 195) -* offLimitColor: Resources. (line 203) -* PCBLIBDIR: running configure. (line 13) -* pinColor: Resources. (line 208) -* pinoutFont0..6: Resources. (line 213) -* pinoutNameLength: Resources. (line 217) -* pinoutOffsetX: Resources. (line 222) -* pinoutOffsetY: Resources. (line 222) -* pinoutTextOffsetX: Resources. (line 228) -* pinoutTextOffsetY: Resources. (line 228) -* pinoutZoom: Resources. (line 234) -* pinSelectedColor: Resources. (line 208) -* printCommand: Resources. (line 239) -* raiseLogWindow: Resources. (line 244) -* ratCommand: Resources. (line 248) -* ratPath: Resources. (line 252) -* Regular Expressions: Regular Expressions. (line 6) -* resetAfterElement: Resources. (line 255) -* ringBellWhenFinished: Resources. (line 262) -* routeStyle: Resources. (line 267) -* rubberBandMode: Resources. (line 274) -* saveCommand <1>: File Formats. (line 14) -* saveCommand: Resources. (line 278) -* saveInTMP: Resources. (line 285) -* saveLastCommand: Resources. (line 294) -* Searching for elements: Searching for elements. - (line 6) -* shrink: Resources. (line 299) -* size: Resources. (line 302) -* stipplePolygons: Resources. (line 307) -* textScale: Resources. (line 313) -* useLogWindow: Resources. (line 317) -* viaColor: Resources. (line 324) -* viaDrillingHole: Resources. (line 330) -* viaSelectedColor: Resources. (line 324) -* viaThickness: Resources. (line 330) -* volume: Resources. (line 338) -* warnColor: Resources. (line 343) -* zoom: Resources. (line 347) - -Index of Actions, Commands and Options -************************************** - -[index] -* Menu: - -* -- basename : nelma Options. (line 6) -* --action-script : General Options. (line 47) -* --action-string : General Options. (line 50) -* --align-marks: Postscript Export. (line 12) -* --alignment-distance : Sizes. (line 64) -* --all-direction-lines: General GUI Options. (line 35) -* --all-layers: Gerber Export. (line 9) -* --as-shown <1>: PNG Options. (line 23) -* --as-shown: Encapsulated Postscript Export. - (line 13) -* --auto-mirror: Postscript Export. (line 25) -* --background-color : Colors. (line 12) -* --backup-interval: General Options. (line 30) -* --bg-image <1>: lesstif GUI Options. (line 9) -* --bg-image : GTK+ GUI Options. (line 9) -* --black-color : Colors. (line 6) -* --bloat : DRC Options. (line 9) -* --bomfile : BOM Creation. (line 6) -* --clear-line: General GUI Options. (line 21) -* --connected-color : Colors. (line 54) -* --copper-height : nelma Options. (line 12) -* --copyright: General Options. (line 15) -* --cross-color : Colors. (line 18) -* --crosshair-color : Colors. (line 15) -* --default-font : Paths. (line 12) -* --default-PCB-height : Sizes. (line 57) -* --default-PCB-width : Sizes. (line 54) -* --dpi: PNG Options. (line 9) -* --dpi : nelma Options. (line 9) -* --draw-grid: General GUI Options. (line 18) -* --drill-copper: Postscript Export. (line 61) -* --drill-helper: Postscript Export. (line 9) -* --dump-actions: General Options. (line 24) -* --element-color : Colors. (line 36) -* --element-command : Commands. (line 17) -* --element-path : General Options. (line 42) -* --element-selected-color : Colors. (line 48) -* --eps-file : Encapsulated Postscript Export. - (line 6) -* --eps-scale : Encapsulated Postscript Export. - (line 10) -* --fab-author : General Options. (line 53) -* --file-command : Commands. (line 14) -* --file-path : Paths. (line 15) -* --fill-page: Postscript Export. (line 22) -* --font-command : Commands. (line 11) -* --font-path : Paths. (line 20) -* --format : PNG Options. (line 35) -* --full-poly: General GUI Options. (line 24) -* --gerberfile : Gerber Export. (line 6) -* --grid : Sizes. (line 68) -* --grid-color : Colors. (line 60) -* --grid-units-mm : General Options. (line 27) -* --groups : General Options. (line 34) -* --help: General Options. (line 6) -* --invisible-mark-color : Colors. (line 45) -* --invisible-objects-color : Colors. (line 42) -* --keepaway : Sizes. (line 50) -* --layer-color- : Colors. (line 63) -* --layer-name-1 : Layer Names. (line 6) -* --layer-name-2 : Layer Names. (line 9) -* --layer-name-3 : Layer Names. (line 12) -* --layer-name-4 : Layer Names. (line 15) -* --layer-name-5 : Layer Names. (line 18) -* --layer-name-6 : Layer Names. (line 21) -* --layer-name-7 : Layer Names. (line 24) -* --layer-name-8 : Layer Names. (line 27) -* --layer-selected-color- : Colors. (line 66) -* --layer-stack : General Options. (line 56) -* --lib-command : Commands. (line 27) -* --lib-command-dir : Commands. (line 24) -* --lib-contents-command : Commands. (line 31) -* --lib-name : Paths. (line 9) -* --lib-newlib : Paths. (line 6) -* --lib-path : Paths. (line 24) -* --line-thickness : Sizes. (line 42) -* --listen <1>: lesstif GUI Options. (line 6) -* --listen: GTK+ GUI Options. (line 6) -* --lprcommand : lpr Printing Options. - (line 6) -* --mask-color : Colors. (line 73) -* --media : Postscript Export. (line 37) -* --min-drill : DRC Options. (line 21) -* --min-ring : DRC Options. (line 24) -* --min-silk : DRC Options. (line 18) -* --min-width : DRC Options. (line 15) -* --minimum polygon area : Sizes. (line 71) -* --mirror: Postscript Export. (line 19) -* --monochrome <1>: PNG Options. (line 26) -* --monochrome: Encapsulated Postscript Export. - (line 16) -* --multi-file: Postscript Export. (line 51) -* --off-limit-color : Colors. (line 57) -* --only-visible: Encapsulated Postscript Export. - (line 19) -* --only-vivible: PNG Options. (line 29) -* --outfile : PNG Options. (line 6) -* --outline: Postscript Export. (line 16) -* --pcb-menu <1>: lesstif GUI Options. (line 15) -* --pcb-menu : GTK+ GUI Options. (line 15) -* --photo-flip-x: PNG Options. (line 48) -* --photo-flip-y: PNG Options. (line 52) -* --photo-mode: PNG Options. (line 45) -* --pin-color : Colors. (line 27) -* --pin-name-color : Colors. (line 33) -* --pin-selected-color : Colors. (line 30) -* --pinout-offset-x : General GUI Options. (line 6) -* --pinout-offset-y : General GUI Options. (line 9) -* --pinout-text-offset-x : General GUI Options. (line 12) -* --pinout-text-offset-y : General GUI Options. (line 15) -* --png-bloat : PNG Options. (line 39) -* --print-file : Commands. (line 21) -* --ps-bloat : Postscript Export. (line 31) -* --ps-color: Postscript Export. (line 28) -* --ps-invert: Postscript Export. (line 34) -* --psfade : Postscript Export. (line 44) -* --psfile : Postscript Export. (line 6) -* --rat-color : Colors. (line 39) -* --rat-command : Commands. (line 39) -* --rat-selected-color : Colors. (line 51) -* --rat-thickness : Sizes. (line 45) -* --reset-after-element: General Options. (line 68) -* --ring-bell-finished: General Options. (line 72) -* --route-styles : General Options. (line 37) -* --save-command : Commands. (line 36) -* --save-in-tmp: General Options. (line 63) -* --save-last-command: General Options. (line 60) -* --scale : Postscript Export. (line 47) -* --show-actions: General Options. (line 21) -* --show-defaults: General Options. (line 18) -* --show-legend: Postscript Export. (line 64) -* --show-number: General GUI Options. (line 38) -* --shrink : DRC Options. (line 12) -* --snap-pin: General GUI Options. (line 31) -* --substrate-epsilon : nelma Options. (line 18) -* --substrate-height : nelma Options. (line 15) -* --text-scale : Sizes. (line 60) -* --unique-names: General GUI Options. (line 27) -* --use-alpha: PNG Options. (line 32) -* --verbose <1>: Gerber Export. (line 12) -* --verbose: General Options. (line 12) -* --version: General Options. (line 9) -* --via-color : Colors. (line 21) -* --via-drilling-hole : Sizes. (line 39) -* --via-selected-color : Colors. (line 24) -* --via-thickness : Sizes. (line 36) -* --warn-color : Colors. (line 70) -* --x-max: PNG Options. (line 13) -* --xcalib : Postscript Export. (line 55) -* --xy-max: PNG Options. (line 19) -* --xy-unit : BOM Creation. (line 12) -* --xyfile : BOM Creation. (line 9) -* --y-max: PNG Options. (line 16) -* --ycalib : Postscript Export. (line 58) -* :actionCommand(): User Commands. (line 75) -* :l: User Commands. (line 33) -* :le: User Commands. (line 39) -* :m: User Commands. (line 45) -* :q: User Commands. (line 51) -* :rn: User Commands. (line 61) -* :s: User Commands. (line 55) -* :w[q]: User Commands. (line 71) -* AddRats(): Actions. (line 27) -* ApplyVendor() <1>: ApplyVendor Action. (line 8) -* ApplyVendor(): Actions. (line 54) -* Atomic(): Actions. (line 58) -* Bell(): Actions. (line 68) -* ChangeClearSize(): Actions. (line 72) -* ChangeDrillSize(): Actions. (line 83) -* ChangeFlag(): Actions. (line 93) -* ChangeHole(): Actions. (line 101) -* ChangeName(): Actions. (line 107) -* ChangeOctagon(): Actions. (line 117) -* ChangePinName(): Actions. (line 123) -* ChangeSize(): Actions. (line 129) -* ChangeSquare(): Actions. (line 148) -* ClrFlag(): Actions. (line 154) -* Command(): Actions. (line 160) -* Connection(): Actions. (line 167) -* DeleteRats(): Actions. (line 181) -* DisableVendor() <1>: DisableVendor Action. - (line 10) -* DisableVendor(): Actions. (line 188) -* DisperseElements(): Actions. (line 193) -* Display(): Actions. (line 199) -* DRC(): Actions. (line 234) -* EditLayerGroups(): Actions. (line 250) -* EnableVendor() <1>: EnableVendor Action. (line 10) -* EnableVendor(): Actions. (line 254) -* ExecuteFile(): Actions. (line 238) -* Load(): Actions. (line 259) -* LoadVendor(): Actions. (line 265) -* LoadVendorFrom(): LoadVendorFrom Action. - (line 10) -* MarkCrosshair(): Actions. (line 269) -* Mode(): Actions. (line 277) -* MovePointer(): Actions. (line 326) -* MoveToCurrentLayer(): Actions. (line 340) -* New(): Actions. (line 350) -* PasteBuffer(): Actions. (line 355) -* Polygon(): Actions. (line 382) -* Print(): Actions. (line 392) -* Quit(): Actions. (line 412) -* Redo(): Actions. (line 416) -* RemoveSelected(): Actions. (line 430) -* Report(): Actions. (line 434) -* RouteStyle(): Actions. (line 440) -* Save(): Actions. (line 450) -* Select(): Actions. (line 459) -* SetFlag(): Actions. (line 471) -* SetValue(): Actions. (line 477) -* SwapSides(): Actions. (line 499) -* SwitchDrawingLayer(): Actions. (line 503) -* ToggleHideName(): Actions. (line 509) -* ToggleVendor() <1>: ToggleVendor Action. (line 10) -* ToggleVendor(): Actions. (line 516) -* ToggleVisibility(): Actions. (line 521) -* Undo(): Actions. (line 528) -* UnloadVendor() <1>: UnloadVendor Action. (line 10) -* UnloadVendor(): Actions. (line 539) -* Unselect(): Actions. (line 543) - -Index of Concepts -***************** - -[index] -* Menu: - -* /tmp <1>: Resources. (line 285) -* /tmp: Loading and Saving. (line 18) -* action command: User Commands. (line 75) -* action reference: Action Reference. (line 6) -* actions: Actions. (line 6) -* actions file, executing: Actions. (line 238) -* Actions, initiating: User Commands. (line 75) -* align-marks: Postscript Export. (line 12) -* alignment: Resources. (line 13) -* alignment targets: Printing. (line 47) -* Alpha: DEC Alpha. (line 6) -* arc: Arc Objects. (line 6) -* arc, an example: Arcs. (line 6) -* architecture <1>: Linux. (line 6) -* architecture <2>: SCO. (line 6) -* architecture <3>: DEC Alpha. (line 6) -* architecture <4>: SGI. (line 6) -* architecture <5>: Sun. (line 6) -* architecture: HP. (line 6) -* arrow tool: Arrow Tool. (line 6) -* as-shown (EPS): Encapsulated Postscript Export. - (line 13) -* ASCII files, format of: File Formats. (line 6) -* Atari version: History. (line 6) -* atomic: Actions. (line 58) -* auto-router: Menu. (line 121) -* autorouter: Autorouter. (line 6) -* background: Resources. (line 21) -* backup <1>: Resources. (line 43) -* backup: Loading and Saving. (line 18) -* bell: Actions. (line 68) -* bill of materials: bom. (line 6) -* bloat: Resources. (line 52) -* bom: bom. (line 6) -* buffer, an example: Pastebuffer. (line 6) -* buffer, convert contents to element: Elements. (line 59) -* Buffer, popup menu: Menu. (line 109) -* buffer, selecting a: Actions. (line 355) -* button translations: Actions. (line 6) -* cat: Resources. (line 93) -* centering: Actions. (line 199) -* centroid file format: Centroid File Format. - (line 6) -* centroid file, algorithms: Centroid File Format. - (line 37) -* change active layer: Layer Controls. (line 6) -* change drawing layer: Actions. (line 503) -* change object name: Actions. (line 107) -* change settings: Actions. (line 477) -* change sizes: Actions. (line 72) -* change square flag: Actions. (line 148) -* change viewing side: Actions. (line 499) -* changing layers: Moving and Copying. (line 20) -* changing pin/pad names: Actions. (line 123) -* clearance: Line Objects. (line 38) -* clearance, changing of objects: Actions. (line 72) -* clearance, for new lines: Menu. (line 79) -* clipping lines to 45 degree <1>: Actions. (line 199) -* clipping lines to 45 degree: Resources. (line 17) -* closing a polygon: Actions. (line 382) -* cnc: gcode. (line 6) -* color printout: Printing. (line 32) -* color, warning: Resources. (line 343) -* colors: Resources. (line 55) -* command-line options: Command-Line Options. - (line 6) -* compile, how to: compiling. (line 6) -* configure: running configure. (line 6) -* connection, removing an: Translations. (line 11) -* connections, colors: Resources. (line 55) -* connections, creating list of: Connection Lists. (line 6) -* connections, reseting: Actions. (line 167) -* connections, reseting after element: Resources. (line 255) -* connections, searching for: Actions. (line 167) -* Connects, popup menu: Menu. (line 121) -* copy an object: Translations. (line 40) -* copying objects: Actions. (line 355) -* copying, an example: Moving and Copying. (line 6) -* creating objects: Common. (line 6) -* cursor color: Resources. (line 60) -* cursor movements: Actions. (line 326) -* cursor position: Actions. (line 269) -* cursor steps: Resources. (line 128) -* cutting objects: Actions. (line 355) -* DEC: DEC Alpha. (line 6) -* default font: Resources. (line 118) -* default layout size: Resources. (line 302) -* default library: Resources. (line 179) -* default text scaling: Resources. (line 313) -* default translations: Translations. (line 6) -* design rule checker, invoking: Menu. (line 121) -* design rule checking <1>: Actions. (line 234) -* design rule checking: Design Rule Checking. - (line 6) -* device, selecting an output: Printing. (line 21) -* directory /tmp <1>: Resources. (line 285) -* directory /tmp: Loading and Saving. (line 18) -* dispersing elements: Actions. (line 193) -* display: Resources. (line 307) -* displaying element names <1>: Actions. (line 199) -* displaying element names: Menu. (line 49) -* displaying pinout: Actions. (line 199) -* displaying status information: Status-line and Input-field. - (line 6) -* distributing elements: Actions. (line 193) -* DOS filenames: Printing. (line 80) -* drawing objects: Drawing and Removing. - (line 6) -* drc <1>: Actions. (line 234) -* drc <2>: Resources. (line 52) -* drc: Design Rule Checking. - (line 6) -* drill: Actions. (line 434) -* drill report: Menu. (line 143) -* drill sizes, list of standard: Standard Drill Sizes. - (line 6) -* Drill table: Vendor drill mapping. - (line 6) -* drill-helper: Postscript Export. (line 9) -* drilling hole, changing of objects: Actions. (line 83) -* drilling hole, setting of initial size: Actions. (line 477) -* Edit, popup menu: Menu. (line 40) -* element name, hiding: Actions. (line 509) -* element name, removing from silk-screen: Actions. (line 509) -* Element Search: Regular Expressions. (line 6) -* element, an example: Elements. (line 6) -* element, an overview: Element Objects. (line 6) -* element, color: Resources. (line 68) -* element, command: Resources. (line 74) -* element, creating a new package: Elements. (line 59) -* element, display names of <1>: Actions. (line 199) -* element, display names of: Menu. (line 49) -* element, editing: Menu. (line 109) -* element, file format: Element File. (line 6) -* element, files: Resources. (line 74) -* element, loading to buffer: User Commands. (line 39) -* element, move name of: Translations. (line 40) -* elements, dispersing: Actions. (line 193) -* elements, distributing: Actions. (line 193) -* encapsulated postscript: eps. (line 6) -* entering user commands: User Commands. (line 6) -* eps: eps. (line 6) -* erasing objects: Drawing and Removing. - (line 6) -* example files: Elements. (line 19) -* example of buffer handling: Pastebuffer. (line 6) -* example of connection lists: Connection Lists. (line 6) -* example of copying: Moving and Copying. (line 6) -* example of creating an element: Elements. (line 59) -* example of element handling: Elements. (line 6) -* example of line handling: Lines. (line 6) -* example of loading: Loading and Saving. (line 6) -* example of loading an element file: Elements. (line 41) -* example of moving: Moving and Copying. (line 6) -* example of pastebuffer handling: Pastebuffer. (line 6) -* example of pin handling: Elements. (line 41) -* example of polygon handling: Polygons. (line 6) -* example of printing: Printing. (line 6) -* example of rectangle handling: Polygons. (line 6) -* example of saving: Loading and Saving. (line 6) -* example of text handling: Text. (line 6) -* example of via handling: Vias. (line 6) -* exit <1>: Actions. (line 412) -* exit: User Commands. (line 51) -* Exporting a layout: Exporting. (line 6) -* file format, element data: Element File. (line 6) -* file format, font data: Font File. (line 6) -* file format, layout data: Layout File. (line 6) -* file format, libraries: Library File. (line 6) -* file format, library contents: Library Contents File. - (line 6) -* file formats: File Formats. (line 6) -* file formats, pads and lines: Pad and Line Representation. - (line 6) -* file load command: Resources. (line 93) -* file save command: Resources. (line 278) -* File sytax: File Syntax. (line 6) -* File, popup menu: Menu. (line 27) -* flags, changing: Actions. (line 93) -* flags, clearing: Actions. (line 154) -* flags, setting: Actions. (line 471) -* font command: Resources. (line 110) -* font file, format of: Font File. (line 6) -* font files: Resources. (line 110) -* font, an overview: Symbol Objects. (line 6) -* font, used for pin names: Resources. (line 213) -* format of element files: Element File. (line 6) -* format of font files: Font File. (line 6) -* format of layout files: Layout File. (line 6) -* format of libraries: Library File. (line 6) -* format of library contents: Library Contents File. - (line 6) -* FreeBSD: BSD. (line 6) -* g-code: gcode. (line 6) -* gcode: gcode. (line 6) -* gEDA, how to interface with: gEDA. (line 6) -* gerber: gerber. (line 7) -* glossary: Glossary. (line 6) -* GNU build system: quickstart. (line 6) -* GNU configure script: running configure. (line 6) -* grid <1>: Resources. (line 9) -* grid: Layout Area. (line 6) -* grid color: Resources. (line 133) -* grid, absolute and relative: Actions. (line 199) -* grid, alignment: Menu. (line 49) -* grid, display <1>: Actions. (line 199) -* grid, display: Menu. (line 49) -* grid, setting of: Actions. (line 477) -* groups: Resources. (line 151) -* groups, editing of: Actions. (line 250) -* gschem, how to interface with: gEDA. (line 6) -* Hewlett Packard: HP. (line 6) -* hide element name: Actions. (line 509) -* how to start: Getting Started. (line 6) -* HP: HP. (line 6) -* image export: png. (line 6) -* index of terms: Glossary. (line 6) -* Info, popup menu: Menu. (line 143) -* information about objects: Actions. (line 434) -* input-field, position of: Status-line and Input-field. - (line 6) -* inputfield, saving entered command-line: Resources. (line 294) -* inputfield, start user input: Actions. (line 160) -* install, how to: compiling. (line 6) -* key translations: Actions. (line 6) -* keyboard bell: Resources. (line 262) -* layer controls: Layer Controls. (line 6) -* layer groups: Layer Objects. (line 19) -* layer visibility, toggling: Actions. (line 521) -* layer, change active: Actions. (line 503) -* layer, name of: Resources. (line 159) -* layers, an overview: Layer Objects. (line 6) -* layers, changing which is active: Layer Controls. (line 6) -* layers, colors: Resources. (line 145) -* layers, editing of groups: Actions. (line 250) -* layers, groups: Resources. (line 151) -* layers, switching on/off: Layer Controls. (line 6) -* layout files: Resources. (line 93) -* layout files, format of: Layout File. (line 6) -* layout files, saving of: User Commands. (line 55) -* layout objects, an overview: Intro. (line 6) -* layout, default size of: Resources. (line 302) -* layout, loading a: User Commands. (line 33) -* layout, loading to buffer: User Commands. (line 45) -* layout, merging a: User Commands. (line 45) -* layout, printing a: Actions. (line 392) -* layout, start a new: Actions. (line 350) -* layout-name <1>: User Commands. (line 61) -* layout-name: Element Objects. (line 6) -* length of a pin name: Resources. (line 217) -* library accuracy: Element Objects. (line 74) -* library command: Resources. (line 163) -* library contents command: Resources. (line 173) -* library contents file, format of: Library Contents File. - (line 6) -* library creation: Library Creation. (line 6) -* library file, format of: Library File. (line 6) -* library name: Resources. (line 179) -* library searchpath: Resources. (line 184) -* library window: Library Window. (line 6) -* lines, an example: Lines. (line 6) -* lines, an overview: Line Objects. (line 6) -* lines, clipping to 45 degree <1>: Actions. (line 199) -* lines, clipping to 45 degree: Resources. (line 17) -* lines, setting of initial size: Actions. (line 477) -* lines, size: Resources. (line 189) -* Linux: Linux. (line 6) -* listing library contents: Resources. (line 173) -* loading a layout to buffer: User Commands. (line 45) -* loading elements: Resources. (line 74) -* loading elements to buffer: User Commands. (line 39) -* loading files: Actions. (line 259) -* loading fonts: Resources. (line 110) -* loading layouts <1>: Resources. (line 93) -* loading layouts: User Commands. (line 33) -* loading symbols: Resources. (line 110) -* loading, an example: Loading and Saving. (line 6) -* log window <1>: Resources. (line 244) -* log window: Log Window. (line 6) -* m4: Resources. (line 74) -* m4, preprocessing example files: Elements. (line 19) -* mark: Actions. (line 269) -* Measuring distances: Measuring distances. (line 6) -* media: Resources. (line 195) -* media margin: Resources. (line 195) -* media, size of: Printing. (line 59) -* menus: Menu. (line 6) -* merging layouts: User Commands. (line 45) -* messages <1>: Resources. (line 244) -* messages: Log Window. (line 6) -* mirroring printout: Printing. (line 28) -* mode selection: Tool Selectors. (line 6) -* mode, selecting of: Actions. (line 277) -* mounting holes: Actions. (line 101) -* move: Resources. (line 274) -* move an object: Translations. (line 40) -* moving objects: Arrow Tool. (line 6) -* moving objects to current layer: Actions. (line 340) -* moving, an example: Moving and Copying. (line 6) -* moving, traces to a different layer: Moving and Copying. (line 20) -* multi-file: Postscript Export. (line 51) -* name of an element: Actions. (line 199) -* name, change an objects: Actions. (line 107) -* namelength of pins: Resources. (line 217) -* nelma: nelma. (line 6) -* NetBSD: BSD. (line 6) -* netlist <1>: Actions. (line 27) -* netlist <2>: Resources. (line 248) -* netlist <3>: Rats Nest. (line 6) -* netlist: Net Objects. (line 6) -* Netlist Window: Netlist Window. (line 6) -* netlist, file format: Netlist File. (line 6) -* netlist, reading: Netlist File. (line 6) -* object report: Menu. (line 143) -* object, change name of: Actions. (line 107) -* object, changing the size of an: Common. (line 6) -* object, copy an: Translations. (line 40) -* object, creating an: Common. (line 6) -* object, drawing and removing: Drawing and Removing. - (line 6) -* object, move an: Translations. (line 40) -* object, removing an <1>: Translations. (line 11) -* object, removing an: Common. (line 6) -* objects, moving to current layer: Actions. (line 340) -* octagonal flag, changing: Actions. (line 93) -* octagonal flag, clearing: Actions. (line 154) -* octagonal flag, setting: Actions. (line 471) -* octagonal pins and vias: Actions. (line 117) -* off limit color: Resources. (line 203) -* offset of pinnames: Resources. (line 228) -* offset of pinout: Resources. (line 222) -* offset of printout: Printing. (line 75) -* old library: Element Objects. (line 74) -* only-visible: Encapsulated Postscript Export. - (line 19) -* OpenWindows: Sun. (line 6) -* operation modes, selecting of: Actions. (line 277) -* optimizer: Trace Optimizer. (line 6) -* outline printout: Printing. (line 36) -* output device: Printing. (line 21) -* overlap, minimum: Design Rule Checking. - (line 6) -* pad specification: Pad and Line Representation. - (line 6) -* pastebuffer, an example: Pastebuffer. (line 6) -* pastebuffer, convert contents to element: Elements. (line 59) -* pastebuffer, popup menu: Menu. (line 109) -* pastebuffer, selecting a: Actions. (line 355) -* path for element files: Resources. (line 85) -* path for font files: Resources. (line 124) -* path for layout files: Resources. (line 102) -* path for libraries: Resources. (line 184) -* PC UNIX <1>: BSD. (line 6) -* PC UNIX <2>: Linux. (line 6) -* PC UNIX: SCO. (line 6) -* PCB, an overview: Overview. (line 6) -* photo-mode: PNG Options. (line 45) -* pin color: Resources. (line 208) -* pin, name of: Resources. (line 217) -* pin/pad names, changing: Actions. (line 123) -* pinout, display of: Actions. (line 199) -* pinout, font to display pin names: Resources. (line 213) -* pinout, zoomfactor of display: Resources. (line 234) -* pins, an example: Elements. (line 41) -* pins, changing shape of: Actions. (line 117) -* png: png. (line 6) -* pointer, moving of: Actions. (line 326) -* polygon: Resources. (line 307) -* polygon point, go back to previous: Actions. (line 382) -* polygon, an example: Polygons. (line 6) -* polygon, an overview: Polygon Objects. (line 6) -* polygon, closing a: Actions. (line 382) -* popping up menus: Menu. (line 6) -* postprocessing layout data: Resources. (line 278) -* postscript: ps. (line 6) -* preprocessing element data: Resources. (line 74) -* preprocessing font data: Resources. (line 110) -* preprocessing layout data: Resources. (line 93) -* preventing loss of data <1>: Resources. (line 285) -* preventing loss of data: Loading and Saving. (line 18) -* print command: Printing. (line 84) -* print media <1>: Resources. (line 195) -* print media: Printing. (line 59) -* print offset: Printing. (line 75) -* printing: Resources. (line 239) -* printing a layout: Actions. (line 392) -* printing, an example: Printing. (line 6) -* problems: problems. (line 6) -* ps: ps. (line 6) -* ps-bloat: Postscript Export. (line 31) -* ps-invert: Postscript Export. (line 34) -* psfade: Postscript Export. (line 44) -* quit <1>: Actions. (line 412) -* quit: User Commands. (line 51) -* rat's nest: User Commands. (line 61) -* rat-line <1>: Actions. (line 27) -* rat-line: Rats Nest. (line 6) -* rats nest <1>: Actions. (line 27) -* rats nest <2>: Resources. (line 248) -* rats nest: Rats Nest. (line 6) -* rats-nest: Net Objects. (line 6) -* recover: Actions. (line 416) -* rectangle, an example: Polygons. (line 6) -* redo <1>: Actions. (line 416) -* redo: Menu. (line 40) -* redrawing layout: Actions. (line 199) -* refreshing layout: Actions. (line 199) -* Regular Expressions: Regular Expressions. (line 6) -* removing connections: Translations. (line 11) -* removing objects <1>: Translations. (line 11) -* removing objects <2>: Common. (line 6) -* removing objects: Drawing and Removing. - (line 6) -* removing selected objects: Actions. (line 430) -* report <1>: Actions. (line 434) -* report: Menu. (line 143) -* reseting found connections <1>: Actions. (line 167) -* reseting found connections: Resources. (line 255) -* resources: Resources. (line 6) -* rotate: Resources. (line 274) -* rotating a buffer: Actions. (line 355) -* rotating printout: Printing. (line 24) -* routing style <1>: Actions. (line 440) -* routing style: Resources. (line 267) -* rubber band: Menu. (line 79) -* rubberband <1>: Actions. (line 199) -* rubberband: Resources. (line 274) -* saving connections: Actions. (line 450) -* saving files: Actions. (line 450) -* saving found connections: Actions. (line 167) -* saving last entered user command: Resources. (line 294) -* saving layouts <1>: Resources. (line 278) -* saving layouts <2>: User Commands. (line 55) -* saving layouts: Loading and Saving. (line 18) -* saving, an example: Loading and Saving. (line 6) -* scaling a printout: Printing. (line 55) -* scanning connections: Actions. (line 167) -* schematic capture: Schematic Frontends. (line 6) -* schematic frontend: Schematic Frontends. (line 6) -* SCO: SCO. (line 6) -* Screen, popup menu: Menu. (line 49) -* script file, executing: Actions. (line 238) -* scrolling: Translations. (line 21) -* searching connections: Actions. (line 167) -* Searching for elements: Searching for elements. - (line 6) -* searchpath for element files: Resources. (line 85) -* searchpath for font files: Resources. (line 124) -* searchpath for layout files: Resources. (line 102) -* searchpath for libraries: Resources. (line 184) -* Select, popup menu: Menu. (line 98) -* selected object, removing an: Actions. (line 430) -* selected objects, changing sizes: Menu. (line 98) -* selected objects, removing: Menu. (line 98) -* selecting a buffer: Actions. (line 355) -* selecting a new tool: Tool Selectors. (line 6) -* selecting objects: Actions. (line 459) -* selecting, using the arrow tool: Arrow Tool. (line 6) -* selection: Actions. (line 459) -* Settings, popup menu: Menu. (line 79) -* SGI: SGI. (line 6) -* show-legend: Postscript Export. (line 64) -* shrink: Resources. (line 299) -* signal: Actions. (line 68) -* Silicon Graphics: SGI. (line 6) -* size of lines: Resources. (line 189) -* size of lines and vias: Actions. (line 440) -* size of vias: Resources. (line 330) -* sizes, changing of objects: Actions. (line 72) -* Sizes, popup menu: Menu. (line 68) -* snap to pins: Menu. (line 79) -* Solaris: Sun. (line 6) -* solder mask, viewing and editing: Menu. (line 58) -* spacing, minimum: Design Rule Checking. - (line 6) -* speaker volume: Resources. (line 338) -* square flag, changing: Actions. (line 93) -* square flag, changing of objects: Actions. (line 148) -* square flag, clearing: Actions. (line 154) -* square flag, setting: Actions. (line 471) -* standard drill sizes: Standard Drill Sizes. - (line 6) -* start user input: Actions. (line 160) -* starting a new layout: Actions. (line 350) -* starting Pcb: Command-Line Options. - (line 6) -* status information: Status-line and Input-field. - (line 6) -* strings, an example: Text. (line 6) -* strings, an overview: Text Objects. (line 6) -* Sun: Sun. (line 6) -* symbols: Resources. (line 118) -* symbols, an overview: Symbol Objects. (line 6) -* Syntax, file: File Syntax. (line 6) -* temporary files <1>: Resources. (line 285) -* temporary files: Loading and Saving. (line 18) -* terminology: Glossary. (line 6) -* TeX, problems: TeX and Manuals. (line 6) -* text, an example: Text. (line 6) -* text, an overview: Text Objects. (line 6) -* text, default scaling: Resources. (line 313) -* thermal flag, changing: Actions. (line 93) -* thermal flag, clearing: Actions. (line 154) -* thermal flag, setting: Actions. (line 471) -* thickness of lines: Resources. (line 189) -* thickness of objects: Common. (line 6) -* thickness of vias: Resources. (line 330) -* thickness, changing of objects: Actions. (line 129) -* toggle layer visibility: Actions. (line 521) -* tool selection: Tool Selectors. (line 6) -* tool, arrow: Arrow Tool. (line 6) -* trace optimizer: Trace Optimizer. (line 6) -* translations <1>: Translations. (line 6) -* translations: Actions. (line 6) -* troubleshooting: problems. (line 6) -* two line mode: Line Objects. (line 14) -* undo <1>: Actions. (line 528) -* undo: Menu. (line 40) -* undo, multi-action resources: Actions. (line 58) -* unique names: Menu. (line 79) -* unix command: Resources. (line 74) -* unselect objects: Actions. (line 543) -* user commands: User Commands. (line 6) -* user input: Translations. (line 33) -* vendor drill table <1>: UnloadVendor Action. (line 10) -* vendor drill table <2>: ToggleVendor Action. (line 10) -* vendor drill table <3>: LoadVendorFrom Action. - (line 10) -* vendor drill table <4>: EnableVendor Action. (line 10) -* vendor drill table <5>: DisableVendor Action. - (line 10) -* vendor drill table <6>: ApplyVendor Action. (line 8) -* vendor drill table: Actions. (line 54) -* Vendor drill table: Vendor drill mapping. - (line 6) -* vendor drill table, disabling: Actions. (line 188) -* vendor drill table, enabling: Actions. (line 254) -* vendor drill table, loading: Actions. (line 265) -* vendor drill table, toggling: Actions. (line 516) -* vendor drill table, unloading: Actions. (line 539) -* vendor map <1>: UnloadVendor Action. (line 10) -* vendor map <2>: ToggleVendor Action. (line 10) -* vendor map <3>: LoadVendorFrom Action. - (line 10) -* vendor map <4>: EnableVendor Action. (line 10) -* vendor map <5>: DisableVendor Action. - (line 10) -* vendor map <6>: ApplyVendor Action. (line 8) -* vendor map: Actions. (line 54) -* vendor map, disabling: Actions. (line 188) -* vendor map, enabling: Actions. (line 254) -* vendor map, loading: Actions. (line 265) -* vendor map, toggling: Actions. (line 516) -* vendor map, unloading: Actions. (line 539) -* Vendor mapping: Vendor drill mapping. - (line 6) -* Vendor rules: Vendor drill mapping. - (line 6) -* vias, an example: Vias. (line 6) -* vias, an overview: Via Objects. (line 6) -* vias, changing shape of: Actions. (line 117) -* vias, color: Resources. (line 324) -* vias, converting to mounting hole: Actions. (line 101) -* vias, setting of initial size: Actions. (line 477) -* vias, size: Resources. (line 330) -* viewing side, changing of: Actions. (line 499) -* volume of speaker: Resources. (line 338) -* Window, popup menu: Menu. (line 151) -* x-y file format: Centroid File Format. - (line 6) -* x-y file, algorithms: Centroid File Format. - (line 37) -* X11: X11 Interface. (line 6) -* X11 default translations: Translations. (line 6) -* X11 resources: Resources. (line 6) -* X11 translations: Actions. (line 6) -* X11, problems: X11. (line 6) -* xcircuit, how to interface with: xcircuit. (line 6) -* zoom of Layout area: Resources. (line 347) -* zoom of pinout window: Resources. (line 234) -* zoom, setting: Menu. (line 49) -* zoom, setting of: Actions. (line 477) - - Index: trunk/doc/letter_size.tab =================================================================== --- trunk/doc/letter_size.tab (revision 1036) +++ trunk/doc/letter_size.tab (nonexistent) @@ -1,30 +0,0 @@ -# $Id$ -# - -A .2340 -B .2380 -C .2420 -D .2460 -E .2500 -F .2570 -G .2610 -H .2660 -I .2720 -J .2770 -K .2810 -L .2900 -M .2950 -N .3020 -O .3160 -P .3230 -Q .3320 -R .3390 -S .3480 -T .3580 -U .3680 -V .3770 -W .3860 -X .3970 -Y .4040 -Z .4130 - Index: trunk/doc/pcb.info =================================================================== --- trunk/doc/pcb.info (revision 1036) +++ trunk/doc/pcb.info (nonexistent) @@ -1,326 +0,0 @@ -This is pcb.info, produced by makeinfo version 4.13 from pcb.texi. - -INFO-DIR-SECTION Miscellaneous -START-INFO-DIR-ENTRY -* pcb: (pcb). An interactive printed circuit board editor. -END-INFO-DIR-ENTRY - - This file documents how to use Pcb, the open source, interactive -printed circuit board layout system. - - Copyright (C) 1994,1995,1996, 2004 Thomas Nau - - Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 harry eaton - - Copyright (C) 2003, 2004, 2005, 2006, 2007, 2009 Dan McMahill - - Copyright (C) 2004 DJ Delorie - - This program is free software; you may redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at -your option) any later version. - - This program is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANT-ABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -General Public License for more details. - - -Indirect: -pcb.info-1: 1021 -pcb.info-2: 300750 - -Tag Table: -(Indirect) -Node: Top1021 -Node: Copying2396 -Node: History3068 -Node: Overview7954 -Node: Intro8775 -Node: Symbol Objects10256 -Node: Via Objects10836 -Node: Element Objects11854 -Node: Layer Objects18737 -Node: Line Objects21889 -Node: Arc Objects24857 -Node: Polygon Objects26305 -Node: Text Objects28934 -Node: Net Objects29749 -Node: Getting Started30679 -Node: Application Window32927 -Node: Menu33576 -Node: Status-line and Input-field42616 -Node: Layer Controls45891 -Node: Tool Selectors49569 -Node: Layout Area56271 -Node: Log Window57139 -Node: Library Window57973 -Node: Netlist Window59217 -Node: Drawing and Removing60811 -Node: Common62955 -Node: Lines64804 -Node: Arcs66368 -Node: Polygons67551 -Node: Text69438 -Node: Vias70423 -Node: Elements71799 -Node: Pastebuffer77269 -Node: Moving and Copying79091 -Node: Loading and Saving80502 -Node: Printing82110 -Node: Exporting86518 -Node: bom86973 -Node: gcode87161 -Node: gerber90012 -Node: nelma90212 -Node: png90364 -Node: ps90508 -Node: eps90677 -Node: Connection Lists90914 -Node: Arrow Tool92720 -Node: Rats Nest94951 -Node: Design Rule Checking100036 -Node: Trace Optimizer102401 -Node: Searching for elements103945 -Node: Measuring distances104446 -Node: Vendor drill mapping105169 -Node: Autorouter108407 -Node: User Commands111745 -Node: Command-Line Options115952 -Node: General Options117224 -Node: General GUI Options119187 -Node: GTK+ GUI Options120305 -Node: lesstif GUI Options120881 -Node: Colors121452 -Node: Layer Names123460 -Node: Paths124209 -Node: Sizes125057 -Node: Commands126692 -Node: DRC Options128043 -Node: BOM Creation128812 -Node: Gerber Export129132 -Node: Postscript Export129494 -Node: Encapsulated Postscript Export131251 -Node: PNG Options131805 -Node: lpr Printing Options133335 -Node: nelma Options133771 -Node: X11 Interface134197 -Node: Resources134665 -Node: Actions150194 -Node: Translations177398 -Node: File Formats178937 -Node: Pad and Line Representation180586 -Node: Layout File181568 -Node: Element File183083 -Node: Font File184124 -Node: Netlist File184505 -Node: Library Contents File185786 -Node: Library File186841 -Node: File Syntax189295 -Node: Arc syntax190661 -Node: Attribute syntax191870 -Node: Connect syntax192381 -Node: Cursor syntax192734 -Node: DRC syntax193207 -Node: Element syntax193698 -Node: ElementArc syntax195640 -Node: ElementLine syntax196598 -Node: FileVersion syntax197051 -Node: Flags syntax197549 -Node: Grid syntax197844 -Node: Groups syntax198336 -Node: Layer syntax198925 -Node: Line syntax199448 -Node: Mark syntax200109 -Node: Net syntax200372 -Node: Netlist syntax200649 -Node: Pad syntax200810 -Node: PCB syntax201766 -Node: Pin syntax202100 -Node: PolyArea syntax202899 -Node: Polygon syntax203253 -Node: Rat syntax203744 -Node: Styles syntax204125 -Node: Symbol syntax205071 -Node: SymbolLine syntax205457 -Node: Text syntax205755 -Node: Thermal syntax206463 -Node: Via syntax206875 -Node: Object Flags207549 -Node: PCBFlags210352 -Node: Library Creation211816 -Node: Schematic Frontends230358 -Node: gEDA231140 -Node: xcircuit239834 -Node: Installation240128 -Node: compiling240659 -Node: quickstart240981 -Node: running configure241377 -Node: problems242549 -Node: HP243984 -Node: Sun244645 -Node: SGI245002 -Node: DEC Alpha245317 -Node: SCO245488 -Node: Linux245969 -Node: BSD246164 -Node: X11246547 -Node: TeX and Manuals247359 -Node: Custom Menus247863 -Node: Resource Syntax248429 -Node: Menu Definitions250770 -Node: Menu Files and Defaults253429 -Node: Regular Expressions254235 -Node: Standard Drill Sizes258031 -Node: Centroid File Format268079 -Node: Action Reference270931 -Node: core actions272542 -Node: AddRats Action278476 -Node: ApplyVendor Action278945 -Node: Atomic Action279277 -Node: Attributes Action280430 -Node: AutoPlaceSelected Action280843 -Node: AutoRoute Action281201 -Node: ChangeClearSize Action281951 -Node: ChangeDrillSize Action282518 -Node: ChangeFlag Action282839 -Node: ChangeHole Action283565 -Node: ChangeJoin Action283926 -Node: ChangeName Action284520 -Node: ChangeOctagon Action284965 -Node: ChangePaste Action285822 -Node: ChangePinName Action286296 -Node: ChangeSize Action286734 -Node: ChangeSquare Action287479 -Node: ClearOctagon Action288372 -Node: ClearSquare Action289225 -Node: ClrFlag Action290052 -Node: Connection Action290573 -Node: Delete Action291236 -Node: DeleteRats Action291445 -Node: DisableVendor Action291658 -Node: DisperseElements Action292071 -Node: Display Action292575 -Node: djopt Action297281 -Node: DRC Action299027 -Node: DumpLibrary Action299290 -Node: elementlist Action299501 -Node: elementsetattr Action300299 -Node: EnableVendor Action300750 -Node: execcommand Action301253 -Node: ExecuteFile Action301508 -Node: Flip Action301756 -Node: FontEdit Action302305 -Node: FontSave Action302503 -Node: FreeRotateBuffer Action302706 -Node: GlobalPuller Action303175 -Node: h Action303370 -Node: Import Action303773 -Node: l Action307425 -Node: le Action308057 -Node: LoadFootprint Action308640 -Node: LoadFrom Action309082 -Node: LoadVendorFrom Action310064 -Node: m Action310399 -Node: MarkCrosshair Action310983 -Node: Message Action311681 -Node: MinClearGap Action312120 -Node: MinMaskGap Action312533 -Node: Mode Action312939 -Node: MorphPolygon Action314180 -Node: MoveLayer Action314706 -Node: MoveObject Action315408 -Node: MoveToCurrentLayer Action315895 -Node: Netlist Action316318 -Node: New Action318068 -Node: OptAutoOnly Action318281 -Node: PasteBuffer Action318940 -Node: Polygon Action320762 -Node: Puller Action321345 -Node: q Action322053 -Node: q! Action322543 -Node: Quit Action323025 -Node: Redo Action323286 -Node: RemoveSelected Action324092 -Node: Renumber Action324297 -Node: Report Action324598 -Node: ReportDialog Action325457 -Node: RipUp Action325709 -Node: rn Action326243 -Node: RouteStyle Action326975 -Node: s Action327191 -Node: SaveSettings Action327844 -Node: SaveTo Action328187 -Node: Select Action328910 -Node: SetFlag Action330064 -Node: SetOctagon Action330579 -Node: SetSame Action331351 -Node: SetSquare Action331765 -Node: SetThermal Action332574 -Node: SetValue Action333855 -Node: ToggleHideName Action334413 -Node: ToggleVendor Action334787 -Node: Undo Action335296 -Node: UnloadVendor Action335975 -Node: Unselect Action336190 -Node: w Action337131 -Node: wq Action337623 -Node: common actions338118 -Node: LayersChanged Action338783 -Node: LibraryChanged Action339342 -Node: NetlistChanged Action339865 -Node: PCBChanged Action340382 -Node: RouteStylesChanged Action341049 -Node: gtk actions341560 -Node: gtk About Action343137 -Node: gtk AdjustStyle Action343408 -Node: gtk Center Action343708 -Node: gtk Cursor Action344031 -Node: gtk DoWindows Action345156 -Node: gtk EditLayerGroups Action345781 -Node: gtk GetXY Action346222 -Node: gtk ImportGUI Action346486 -Node: gtk Pan Action346761 -Node: gtk Popup Action347126 -Node: gtk Print Action347610 -Node: gtk PrintCalibrate Action347900 -Node: gtk Save Action348262 -Node: gtk SelectLayer Action348861 -Node: gtk SetUnits Action349214 -Node: gtk SwapSides Action349549 -Node: gtk ToggleView Action350615 -Node: gtk Zoom Action351395 -Node: lesstif actions352831 -Node: lesstif About Action354739 -Node: lesstif AdjustSizes Action355023 -Node: lesstif AdjustStyle Action355446 -Node: lesstif Benchmark Action355702 -Node: lesstif Command Action356134 -Node: lesstif Cursor Action357551 -Node: lesstif Debug Action358690 -Node: lesstif DebugXY Action358980 -Node: lesstif DoWindows Action359351 -Node: lesstif DumpKeys Action359866 -Node: lesstif EditLayerGroups Action360283 -Node: lesstif Export Action360854 -Node: lesstif GetXY Action361189 -Node: lesstif ImportGUI Action361463 -Node: lesstif LibraryShow Action361872 -Node: lesstif Load Action362108 -Node: lesstif LoadVendor Action362682 -Node: lesstif NetlistShow Action363070 -Node: lesstif Print Action363354 -Node: lesstif PrintCalibrate Action363667 -Node: lesstif PromptFor Action364051 -Node: lesstif Return Action364521 -Node: lesstif Save Action364868 -Node: lesstif SelectLayer Action365461 -Node: lesstif SetUnits Action365838 -Node: lesstif SwapSides Action366190 -Node: lesstif ToggleView Action367273 -Node: lesstif Zoom Action368077 -Node: Glossary369531 -Node: Index371140 - -End Tag Table Index: trunk/doc/gcode_control_img.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: trunk/doc/gcode_control_img.png =================================================================== --- trunk/doc/gcode_control_img.png (revision 1036) +++ trunk/doc/gcode_control_img.png (nonexistent) Property changes on: trunk/doc/gcode_control_img.png ___________________________________________________________________ Deleted: svn:mime-type ## -1 +0,0 ## -application/octet-stream \ No newline at end of property Index: trunk/doc/extract-docs =================================================================== --- trunk/doc/extract-docs (revision 1036) +++ trunk/doc/extract-docs (nonexistent) @@ -1,322 +0,0 @@ -#!/usr/bin/perl -# -*- perl -*- -# -# $Id$ -# -################################################################# -# This script extracts special comments from the source. It assembles -# them in texinfo files that are included in the manual. -################################################################# -# -# The general format of what this script looks for is thusly: -# -# %start-doc category sort-key -# texi stuff goes here -# %end-doc -# -# The lines with the %start-doc and %end-doc are not included in the -# texi extraction; only the lines between them. The category is used -# to determine the file that's created; a category of "foo" causes a -# file "foo.texi" to be created. The sort-keys are case insensitive. -# The text extracted is sorte according to the key and put into the -# file according to the category. Each unique sort-key causes a @node -# to be created, unless that sort-key's text already has a @node in -# it. -# If the sort-key contains space characters, it should be enclosed by -# quotation marks ("). Leading digits in the sort key optionally followed -# by space are removed after sort but before creation of nodes. This -# allows to manipulate the order of nodes in the manual. -# -# Note that we synthesize a special @syntax command, which should be -# used for all things syntax. We change those to whatever the current -# desired style is for syntaxes (currently, a cartouche box of -# non-wrapped but variable-pitch font). -# -# For extracting actions, this script expects a very specific syntax -# to be used. It looks like this, with one or more lines -# (continuations are like this example): -# -# static const char some_string_help[] = -# "some text\n" -# "some text"; -# -# Repeat for some_string_syntax[], then follow those with the usual -# %start-doc. Note that the %start-doc for actions must use the -# category "actions" and the sort key must match the action name. -# -# Within start-doc/end-doc pairs, you can use two special @-lines -# to control the generated node names and document structure. -# -# @nodetype section -# You can specify section, subsection, unnumberedsubsec, etc. Each -# unique sort key within each category is assigned one of these. -# @nodename pattern -# A sprintf-like pattern to use to modify the sort-key to make a -# node name. Since node names must be unique and have various -# restrictions as to what characters you can use in them, this -# allows you to use a pattern for various categories which will help -# keep node names unique without requiring lots of repetetive typing -# in the source files. - -$docdir = shift; -$docdir = "." unless $docdir; -$srcdir = "$docdir/../src"; -$docdir = "."; - -my $debug = 0; - -open(FIND, "find $srcdir -type f -name '*.[chly]' -print | sort |"); -while () { - s/[\r\n]+$//; - &scan_file($_); -} -close (FIND); - -sub dsort { - my ($a, $b) = @_; - $a =~ tr/A-Z/a-z/; - $b =~ tr/A-Z/a-z/; - return $a cmp $b; -} - -for $cat (sort keys %text) { - print "$cat\n"; - @k = sort {&dsort($a,$b)} keys %{$text{$cat}}; - $new = ''; - $new .= "\@c key $cat\n"; - if ($cat eq "actions") { - &dump_00_keys($cat, "\0\$"); - $new .= "\n\@menu\n"; - for $hid (sort keys %{$hids{$cat}}) { - if ($hid =~ /../) { - $new .= "* ${hid} actions::\n"; - } else { - $new .= "* core actions::\n"; - } - } - $new .= "\@end menu\n\n"; - for $hid (sort keys %{$hids{$cat}}) { - if ($hid =~ /../) { - $new .= "\@node $hid actions\n"; - $new .= "\@section $hid actions\n"; - &dump_00_keys($cat, "\0$hid\$"); - } else { - $new .= "\@node core actions\n"; - $new .= "\@section Core actions\n"; - } - $new .= "\@menu\n"; - for $key (@k) { - next unless $key =~ /\0$hid$/; - next if $key =~ /^00/; - $k2 = $title{$cat}{$key}; - if ($hid =~ /\S/ && $hid !~ /common/) { - $k2 = "$hid $k2"; - } - $new .= "* ${k2} Action:: $desc{$key}\n"; - } - $new .= "\@end menu\n"; - for $key (@k) { - next unless $key =~ /\0$hid$/; - next if $key =~ /^00/; - $k2 = $title{$cat}{$key}; - if ($hid =~ /\S/ && $hid !~ /common/) { - $k2 = "$hid $k2"; - } - if ($key !~ /^00/) { - $new .= "\@node $k2 Action\n"; - $new .= "\@subsection $k2\n"; - } - $new .= "\@c key $k2 in hid $hid\n"; - if ($synt{$key}) { - $new .= "\@cartouche\n\@format\n"; - $new .= $synt{$key}; - $new .= "\@end format\n\@end cartouche\n\n"; - } - if ($desc{$key}) { - $new .= $desc{$key} . "\n"; - } - $new .= $text{$cat}{$key}; - if (! $desc{$key} && ! $text{$cat}{$key} ) { - $new .= "No documentation yet.\n"; - } - $new .= "\n"; - } - } - } else { - $nodetype = "section"; - &dump_00_keys($cat, ""); - $new .= "\@menu\n"; - $nodename = "%s"; - for $key (@k) { - if ($nodename{$cat}{$key}) { - $nodename = $nodename{$cat}{$key}; - } - next if $key =~ /^00/; - $k2 = $title{$cat}{$key}; - # strip leading digits from the key string - $k2 =~ s/\A\d+\s*//g; - $k2 = sprintf($nodename, $k2); - if ($text{$cat}{$key} !~ /\@node/) { - $new .="* ${k2}::\n"; - } - } - $new .= "\@end menu\n"; - $nodename = "%s"; - for $key (@k) { - if ($nodetype{$cat}{$key}) { - $nodetype = $nodetype{$cat}{$key}; - } - if ($nodename{$cat}{$key}) { - $nodename = $nodename{$cat}{$key}; - } - next if $key =~ /^00/; - $k2 = $title{$cat}{$key}; - # strip leading digits from the key string - $k2 =~ s/\A\d+\s*//g; - $k2n = sprintf($nodename, $k2); - $new .= "\@c $cat $k2\n"; - if ($text{$cat}{$key} !~ /\@node/) { - $new .= "\@node $k2n\n"; - $new .= "\@$nodetype $k2\n"; - } - $new .= $text{$cat}{$key}; - } - } - $^A = ""; - $line = join(' ', @k); - formline(" ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ~~\n", $line); - print $^A; - - $old = ''; - if ( -f "$docdir/$cat.texi") { - open(CAT, "$docdir/$cat.texi"); - $old = join('', ); - close CAT; - } - if ($old ne $new) { - open(CAT, ">$docdir/$cat.texi"); - print CAT $new; - close CAT; - } -} - -sub dump_00_keys { - my($cat, $regex) = @_; - for $k (@k) { - next unless $k =~ /00.*$regex/; - $new .= $text{$cat}{$k}; - } -} - -sub scan_file { - my ($name) = @_; - print "DEBUG: sub_scan($name)\n" if ($debug); - - # if the source file was in $(srcdir)/hid// then - # pick out the name of the hid and put it into $srcdir. - if ($name =~ m@hid/([^/]+)/@) { - $hid = "$1"; - } else { - $hid = ""; - } - $lineno = 0; - - # skip processing of lex/yacc output files - if ($name =~ /\.[ch]$/) { - $new = $name; - $new =~ s/\.[ch]$/\.y/; - return if -f $new; - $new =~ s/\.y$/\.l/; - return if -f $new; - } - - open(F, $name); - while () { - $lineno ++; - if (/^static\s+const\s+char\s+.*_(help|syntax)\[\]\s*=(.*)/) { - $tag = $1; - $last = 0; - $pending{$tag} = ''; - - # note that the help/syntax string may start on the same line - # as the "static const char"... bit so we pick out that part and - # process it first. - $_ = $2; - LOOP: { - do { - # eat trailing whitespace, new-lines, and carriage returns - s/[\r\n\s]+$//; - - # we're done if we found the terminating ";" - $last = 1 if /;$/; - - # otherwise we need to eat leading whitespace and the leading quote - s/^[\s]*\"//; #" - - # convert \n to a newline - s/\\n/\n/g; - - # eat trailing quotes - s/\";?$//; #" - s/\\\"/\"/g; #" - s/ "/``/g; - s/" /''/g; - $pending{$tag} .= $_; - last if $last; - } while (); - } - # spit out a warning in case we have a malformed help - if ($pending{$tag} =~ /%(start|end)-doc/) { - print "WARNING: $name line $lineno has a $1 string that includes a %start-doc or %end-doc\n"; - print " tag:\n$pending{$tag}\n\n"; - } - next; - } - - if (/%start-doc\s+(\S+)\s+([^"^\s]+|".*?")(\s+(.*))?/) { - # pattern to look for: - # start-doc -> "%start-doc" - # \s+ -> one ore more whitespace - # (\S+) -> string with no whitespace, goes to $1 - # \s+ -> one ore more whitespace - # ([^"^\s]+|".*?") -> a space-less string, or a string delimited by ", goes to $2 - # (\s+(.*))? -> zero or more space separated strings - - $cat = $1; - $key = $2; - # strip leading and trailing quotation marks from the key string - $key =~ s/\A"//g; - $key =~ s/"\Z//g; - $title = $4; - if ($title) { - $title{$cat}{"$key\0$hid"} = $title; - } else { - $title{$cat}{"$key\0$hid"} = $key; - } - $text{$cat}{"$key\0$hid"} .= "\@c $name $lineno\n"; - $hids{$cat}{$hid} = 1; - if ($cat =~ /^(.*_)?actions/) { - $desc{"$key\0$hid"} = $pending{'help'}; - $synt{"$key\0$hid"} = $pending{'syntax'}; - %pending = (); - } - while () { - next if /^\*\/$/; - next if /^\/\*$/; - last if /%end-doc/; - s/\@syntax/\@cartouche\n\@format/g; - s/\@end syntax/\@end format\n\@end cartouche/g; - if (/^\@nodetype\s*(\S+)/) { - $nodetype{$cat}{"$key\0$hid"} = $1; - next; - } - if (/^\@nodename\s*(.+)/) { - $nodename{$cat}{"$key\0$hid"} = $1; - next; - } - $text{$cat}{"$key\0$hid"} .= $_; - } - } - } - close (F); -} Property changes on: trunk/doc/extract-docs ___________________________________________________________________ Deleted: svn:executable ## -1 +0,0 ## -* \ No newline at end of property Index: trunk/doc/gcode_tool_path.pdf =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: trunk/doc/gcode_tool_path.pdf =================================================================== --- trunk/doc/gcode_tool_path.pdf (revision 1036) +++ trunk/doc/gcode_tool_path.pdf (nonexistent) Property changes on: trunk/doc/gcode_tool_path.pdf ___________________________________________________________________ Deleted: svn:mime-type ## -1 +0,0 ## -application/octet-stream \ No newline at end of property Index: trunk/doc/pcb.1 =================================================================== --- trunk/doc/pcb.1 (revision 1036) +++ trunk/doc/pcb.1 (nonexistent) @@ -1,45 +0,0 @@ -.\" -.\" This program is free software; you can redistribute it and/or modify -.\" it under the terms of the GNU General Public License as published by -.\" the Free Software Foundation; either version 2 of the License, or -.\" (at your option) any later version. -.\" -.\" This program is distributed in the hope that it will be useful, -.\" but WITHOUT ANY WARRANTY; without even the implied warranty of -.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -.\" GNU General Public License for more details. -.\" -.\" You should have received a copy of the GNU General Public License -.\" along with this program; if not, write to the Free Software -.\" Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -.\" - -.TH PCB 1 - -.SH NAME -.B pcb -\- Printed circuit board layout tool - -.SH SYNOPSIS -.B pcb [options] [pcb file] - -.SH DESCRIPTION -The -.B pcb -program is a tool for the layout of printed circuit boards. -The complete manual for -.B pcb -is provided in a GNU texinfo format as well as HTML and PDF. -The texinfo version of the manual is typically viewed with the -.B info -program or alternatively with -.B emacs -or a graphical info viewer such as -.B tkinfo. -The PDF and HTML documentation is typically installed as -/usr/local/share/pcb/pcb.html and /usr/local/share/pcb/pcb.pdf. -The prefix "/usr/local" may vary at your site. - - - - Index: trunk/doc/gcode_control_img.eps =================================================================== --- trunk/doc/gcode_control_img.eps (revision 1036) +++ trunk/doc/gcode_control_img.eps (nonexistent) @@ -1,711 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: GIMP PostScript file plugin V 1,17 by Peter Kirchgessner -%%Title: gcode_control_img.eps -%%CreationDate: Mon May 30 02:37:26 2011 -%%DocumentData: Clean7Bit -%%LanguageLevel: 2 -%%Pages: 1 -%%BoundingBox: 0 0 404 231 -%%EndComments -%%BeginProlog -% Use own dictionary to avoid conflicts -10 dict begin -%%EndProlog -%%Page: 1 1 -% Translate for offset -0 0 translate -% Translate to begin of first scanline -0 230.40000000000001 translate -403.20000000000005 -230.40000000000001 scale -% Image geometry -1680 960 1 -% Transformation matrix -[ 1680 0 0 960 0 0 ] -currentfile /ASCII85Decode filter /RunLengthDecode filter -%%BeginData: 51668 ASCII Bytes -image -JcDqRJcDqRJcDqRJcDqRJcDqRJcDqRJcDqRJcDqRJcDqRJcDqRJcDqRJcDqRJcDqRJcDqRJcDqR -JcDqRJcDqRJcDqRJcDqRJcDqRJcDqRJcDqRJcDqRJcDqRJcDqRJcDqRJcDqRJcDqRJcDqRJcDqR -JcDqRJcDqRJcDqRJcDqRJcDqRJcDqRJcDqRJcDqRJcDqRJcDqRJcDqRJcDqRJcDqRJcDqRJcDqR -JcDqRJcDqRJcDqRJcDqRJcDqRJcDqRJcDqRJcDqRJcDqRJcDqRJcDqRJcDqRJcDqRJcDqRJcDqR -nG`K=^]4@!KE(H@!._ib!'c,9nG`K=^]4@!KE(H@!._ib!'c,9nG`K=^]4@!KE(H@!._ib!'c,9 -nG`K=^]4@!KE(H@!._ib!'c,9nG`K=^]4@!KE(H@!._ib!'c,9nG`K=^]4@!jSo5LklA9onG`K= -^]4@!jSo4qkl:]J])V:"!._ib!'fQEkPtSn])V:"!._ib!'fTF!<20^!!g+8nG`K=^]4@!jo5>Y -kPtSb])V:"!._ib!'fTF!;PaX!!0\2nG`K=^]4@!jo5>Mk5`*nnG`K=^]4@!jo5>=k5YL3]DqC# -!._ib!'fTF!5Rat!'e*qnG`K=^]4@!jo5=2k5YK(]DqC#!._ib!'fTFjo>Al]DqC#!._ib!'fWG -!<2*\!!g.9nG`K=^]4@!k5PGZjo>A`]DqC#!._ib!'fWG!;P[V!!0_3nG`K=^]4@!k5PGNjT)pm -nG`K=^]4@!k5PG>jT#:1]`7L$!._ib!'fWG!5R[r!'e-rnG`K=^]4@!k5PF3jT#9&]`7L$!._ib -!'fWGj8]/j]`7L$!._ib!'fZH!<2$Z!!g1:nG`K=^]4@!kPkP[j8]/^]`7L$!._ib!'fZH!;PUT -!!0b4nG`K=^]4@!kPkPOirHalnG`K=^]4@!kPkP?irB(/^&RU%!._ib!'fZH!5RUp!'e0snG`K= -^]4@!kPkO4irB'$^&RU%!._ib!'fZHiW&rh^&RU%!._ib!'f]I!<1sX!!g4;nG`K=^]4@!kl1Y\ -iW&r\^&RU%!._ib!'f]I!;QKm!"\Dqr;Zfu^&RU%!._ib!'f]I!:]pe!$CP,!.b"J^&RU%!._ib -!'f]I!9!eU!'ffL!5SO5!.V`_nG`K=^]4@!kl1Xur;ZhIli-tCr;Zg^^Am^&!._ib!'f]I!.b"J -lMgkRr;Zg>^Am^&!._ib!'f]Ir;ZfulMgkZr;Zg.^Am^&!._ib!'f`J!<2os!!DNd!;ucq!!g7< -nG`K=^]4@!l2Lb]r;Zg&lMgk`r;Zg"^Am^&!._ib!'f`J!;QKm!"\>or;Zfu^Am^&!._ib!'f`J -!;QKm!$CJ*!.b"J^Am^&!._ib!'f`J!:]pe!'f`J!5SO5!.Vc`nG`K=^]4@!l2LbQr;ZhIl2LbA -r;Zg^^]3g'!._ib!'f`J!9!eUkl1YPr;Zg>^]3g'!._ib!'f`J!9!hV!!2<`!;QKm!"ZjEnG`K= -^]4@!l2LbArVup#kl1Y\r;Zg&^]3g'!._ib!'f`J!9!hV!!h`f!<2os!!C"9nG`K=^]4@!l2LbA -rVup/kPtJ\!!0k7nG`K=^]4@!l2LbArVup?kPkO4r;aV4nG`K=^]4@!l2LbArVup_kPkOtr;ZhI -_#Np(!._ib!'f`J!9!hV!.X23!9!eU!'e:!nG`K=^]4@!l2LbArW)*\!:]pe!$B#VnG`K=^]4@! -l2LbArW)*\!;QKm!"ZmFnG`K=^]4@!l2LbArW)*\!;ucq!!g=>nG`K=^]4@!l2LbArW)*\!<2os -!!C%:nG`K=^]4@!l2LbArW)'[r;Zfu_#Np(!._ib!'f`J!9!hVjo5=2r;aY5nG`K=^]4@!l2LbA -rW)'[!5SO5!.VibnG`K=^]4@!l2LbArW)'[!9!eU!'e="nG`K=^]4@!l2LbArW)'[!:]pe!$B&W -nG`K=^]4@!l2LbArW)'[!;QKm!"ZpGnG`K=^]4@!l2LbArW)'[!;ucq!!g@?nG`K=^]4@!l2LbA -rW)'[!<2os!!C(;nG`K=^]4@!l2LbArW)$Zr;Zfu_>j$)!._ib!'f`J!9!hVjSo41r;a\6nG`K= -^]4@!l2LbArW)$Z!5SO5!.VlcnG`K=^]4@!l2LbArW)$Z!9!eU!'e@#nG`K=^]4@!l2LbArW)$Z -!:]pe!$B)XnG`K=^]4@!l2LbArW)$Z!;QKm!"ZsHnG`K=^]4@!l2LbArW)$Z!;ucq!!gC@nG`K= -^]4@!l2LbArW)$Z!<2os!!C+^L+ -mf*9;r;Zg"i;`i!!!9%rrD!V!;c]q_#"-#s7u]q&+9GtJGfHJ"5s4Krr@Sc!!*?( -mf3=ir;QcTrW)fp!5SI3n,EBPmr;QcTrW)fp!5SI3n,EC_ -qZ$U,n,ECcqZ$VGiW&EI!._lc!>"tn!!%NIrrD!V!;c]q_#"-#rrDuo!!!PurrDuo!!%N-s7$$g -JAD3d&,>Pm!.XtI!9!hVqYpQ2qZ-*b!;u]o!"\Pu!;u]o!.Wu-nG`K=_#OKHq!J+^5Q1T^i;N`Q -rrBk3!:Tpfr;-Ho&+BMur;-HoJ)UFsrr@Sc!!*W*mJm5OrVllUrW)fp!5SI3n,ECcqZ$U,n,EC_ -qZ$U\iW&EI!._lc!>"tn!!#7^rrD!V!;c]q_#"-#rrDuo!!!PurrDik!!#7Bs7$$gJAD3d&,>Pm -!'gG^!9!hVqYpQ2qZ-*b!;u]o!"\Pu!;QEk!'fHBnG`K=_#OKHq!J+^+8u3>i;N`QrrBk3!:Tpf -r;-Ho&+BMuq"k$k5N2Y3rr@Sc!!*W*mJm5/rVllUrW)fp!5SI3n,ECcqZ$U,n,EC_qZ$U\iW&EI -!._lc!>"tn!!",>rrD!V!;c]q_#"-#rrDuo!!!PurrDik!!#7Bs7$$gJAD3d&,>Pm!$D1>!9!hV -qYpQ2qZ-*b!;u]o!"\Pu!;QEk!'fHBnG`K=_#OKHq!J+^+8u3>i;N`QrrBk3!:Tpfr;-Ho&+BMu -q"k$k5N2Y3rr@Sc!!*W*mJm5/rVllUrW)fp!5SI3n,ECcqZ$U,n,EC_qZ$U\iW&EI!._lc!>"tn -!!",>rrD!V!;c]q_#"-#rrDuo!!!PurrDuo!!%N-s7$$gJAD3d&,>Pm!$D1>!9!hVqYpQ2qZ-*b -!;u]o!"\Pu!;u]o!.Wu-nG`K=_#OKHq!J+^+8u3>i;N`QrrBk3!:Tpfr;-Ho&+BMur;-HoJ)UFs -rr@Sc!!*W*mJm5OrVllUrW)fp!5SI3n,ECcqZ$U,n,ECcqZ$VGiW&EI!.`8n!!2us!<2rt!>"u) -!!#7ZrrE&q!!#7^rrD!V!;c]q_#"-#rrDuo!!!PurrE&q!9!nHrr@Sn!!!,ts8E!!&,?,(!'g;Z -!<2iq!'gG^!9!hVqYpQ2qZ-*b!;u]o!"\Pu!<2iqi;`EquHZp!9!hVqYpQ2qZ-*b -!;u]o!"\Mt!.b"J!!D0ZnG`K=bQ%VbqZ$d%huE`fq#16n5PY6YJG]EFrrD!V!;c]q_#"-#rrDuo -!!!Ptrr@TJ!!!8^s7$$gJBRun+8Z$A"5j.Z&,?,(!'g8Y!5SO5!!3#t!9!hVqYpQ2qZ-*b!;u]o -!"\Mtqu?^-i;`!!NJ_!!!Q)rVup_mJd1ErW(%>!5SO5 -!.Wl*nG`K=f)Pf#pAb!i"U!Z_!"\l(!!#7NrrD!V!6G0?JGfK(s7$$gJCaeos8)d""5j.Z&,?,( -!'flN!9!hVaT)2=!!1pUnG`K=fDkmPp&Fmh"U!Z_!"\l(!!#7NrrD!V!6P6@rqufs"5X"Hrr@T% -!!39&r:'aj"5j.Z&,?,(!'flN!9!hVao;A=r;Zg&h>d!E!.`]%!XJbpnGi^phuE`fq#16n5OJIN -i;N_urrDim!!!Pcs7$$gJCji'&-'H8!!NJ_!!!Q)rVup_mJd1ErW((?!:]pe!$C%snG`K=fDksp -s+'V>"U!Z_!"\l(!!#7WrrMToqYpQRrW)]m!<@W"rrD!U!!#7>s7$$gJCji&5QC3Q"U!Z_!"\l( -!!#7Ws8N'!J,B6G_#=?/rrVZi#M&hS_#465J)1.orr@T%!!.TKn,NUohuE`fq#16n5PP0[qu?^= -qu6YHrW)`n!l+d:ec,W"r;bXQnG`K=fDksPr9s[i"5j.Z&,?,(!'g5X"7Q9j#Q+Q"!;QTn!!%N" -s8;ot!Sm_Err@TH!<<'!^u>=q!WVra!!NJ_!!!Q)rVup_p\t?2!!!&trrE&s!;ZWpr;HZr+4pMm -rqufs"5NqGrr@TI!!=>Cs8M!X!X&Jln,NUohuE`fq#16n5PP0XJGoQHrrDuq!;ZWpq#16n&(gg] -r;?Tq#Mf@Krr@TJ!!!-"rrDQK!!3E*i:$^M"5j.Z&,?,(!'g5Xr;ZhIrVllmr;cZn!:]sf!!h-U -!;QKm!"[lbnG`K=r;Zg.rVllqirB,ks1n+("U!Z_!"\l(!!#7YrrE&s!!#7^rrDQe!;ZWpi;N]V -"5!PQnGN=e+5Hncrr@TJ!!%NHs5O(\+9-l\!!NJ_!!!Q)rVup_q#:?lr;Zg>rVllUr;cZn!5SR6 -!!1^O!9!eU!'f9=nG`K=rVup!qu6ZSj8]3Fs6fpk"5j.Z&,?,(!'g8Y!;QKm!"]&.!5SR6!!2oq -!.b"JfDbidr;ZhIh#HmD!.b%K!!iE$!;PUT!It+;!!NJ_!!!Q)rVup_q#:?`r;Zg&rVlkJrVup! -q>^?m!.WZ$!.b"Jg]-dC!.b%K#9X!G^]FK8ro=%[s8;_s7l$_"U!Z_!"\l(!!#7YrrBk,!!!,t -rrDup!!"+orrE&s!!!,Us7$$gJGoQKrr@TK!<<'!^ubUu"97lZ!!NJ_!!!Q)rVup_q#:?0oDejr -qYpQnqu?^=g&D'Mr;Zg&g]-dC"b6RQ!WW)r!!48Bi8t"@#QN`N!!NJ_!!!Q)rVup_q#:>EoDek% -qYpQjqu?^-g&D'Ir;Zg.g]-dC"b6RQ#QN`\!!39&puVPX&-'H6!!NJ_!!!Q)rVup_q#:>EoDek5 -qYpQjqu?^-g&D'Ar;Zg>g]-dC"b6RQ&-%1X!!3,tjo>H)s+'P<"U!Z_!"\l(!!#7Ys763j5PkB[ -nGE7d#MK+Wi;EWU5MQ5-rrdiP!$D4;!!,=`jo>EHs6]jj"5j.Z&,?,(!'g8Yo)Jc?qYpQbqu?^% -g&D&fr;ZhIg]-dC"FpIPJ,K0D!?_@(!!.TKmJmCmhuE`fq#16n5PbUHooDejnq>UHQqu?^!gA_0Pr;Zg"gAg[B -"FpISs+'qG!WVZQ!!39&nEp8["5j.Z&,?,(!'g;Z!<2Tj!!i?"!9!bT!!CsT!;ucq!!h6XnG`T@ -!!iQ"!!.TEkPtYhs5<;F"U!Z_!"\l(!!#7ZrrDuh!!!Q*rrBk4!!!&RrrDim!!!P`s7$$jJ,g,X -q#CF;r9++^&-'H5!!NJ_!!!Q)rVup_q>UHmoDek5q>UH1qu?]tgA_0Br;Zg>gAg[B"+U@nq"Xmj -&,tbm![%GmmJmCmhuE`fq#16n5Pb;!<`Ac!!.TK -r;Zg"q#C3k"U!Z_!"\l(!!#7ZrrDuh!;QQo_#+04!S[PRJGfK$s7$$jJ,k)7q#CHss+'>6!WW)r -!!!9!s8)d""5j.Z&,?,(!'g;Z!;uKi!!2lp!5SL4!!1gRr;Zfug&LRA"+UCOJG9*Fs1mn"!Wi>r -r;Zg.q#C3k"U!Z_!"\l(!!#7ZrrDui!!!,rrrBk4!!!&SrrE&s!!!,Ss7$$iJ-#]E!!.T-l2Ukf -s7#se!$D"9qZ$d%huE`fq#16n5Pb"tj -!!,=ar;ZfunG`XL!!!Q)rVup_q>UHoo`+uAq#:?Pqu?^!g]%8hr;ZhIg&LRA!e:gNpAb4!r9=7_ -J,]BH!!D`j"Mb!;&,?,(!'g;Z!<2Wkp\t6Oqu?^!g]%8(r;bLMnG`Q?&)d0^!<`8b!!3,tr;Zm( -s5<_R!!iB#"FpIP&,?,(!'g8Yp&G'np\t6_qu?^%g].3P!!1aPnG`Q?+5lkn!<`>e!!33$q#(0o -&-'HA!!!,ts8E!!&,?,(!'g8Yp&G'pp\t6_qu?^%h#@BRr;Zg"f`1I@!e;B.pAb3prp'Oc"97lh -!!48BJG9*EJ,]HKrUBdd!>"u)!!#7Yrr@TD!!!8urrDil!!!PbrrDuq!!!8Vs7$$iJ3UjD!!*-# -lMptks5=Hr;ZkJrqHHs!WW&us8Mrs!C-AY!!#7YrrBk/!!#7XrrDup!!"+rrrDQe!!"+ns7$$h -J:I4l!IoXd!!48BJGfHKs8;Wl"UG(C!$D7>!!,=ZrVup_q#:?0pAjpe!;u`p!$C"r!9!eU!'f-9 -nG`N>J+WdBIt6kc!C-V_!!33$q"Ogl&,uV0#Q+N$q#16n5PY6Yi;EWU"7cBkrql`r5MZ8=_#465 -J(XejrrIZLo`,"W_!D%%J,]BH!X&Jlp](F=qu?]tqu6ZkrVup_q#:?`r;Zg&nGiCd!.Wf(!.b"J -fDk@?!J(1B!!,="li7(dr;?Ts#QN`W!!,=RrVuqJr;QcdrVup_q#:?hr;Zg.nG`K=r;bUPr;Zfu -fDk@?!J11A!!+2"m/R1is7lNm!Y>=Hp](=Zi;N]V5Q(N]i;N]V5PY6Yr;?Tq+7T:1_#=<6!Sm\T -rqufs"5!SBrrI]Ko`,"7i9^LG#QO;l!!48BJG9*FJ&)$`!$D.=!5SR6!'g8Y!<2os!'fuQ!9!hV -!!D$V!;ucq!!h-UnG`N?r:L$j+5lMd!XJb`r;Zj_s7ZKos+((K!"]#-!.b%K!'g5Xr;ZhInG`LX -rVup'h#@BLr;Zg.fDk@?!J1%=!!*Vgm/R1us1nR5!It+D!!*-#r;Zg&r;Z]q!'g5X!.b%Kn,EC_ -rVup/h#@BDr;Zg>fDk@?!JC1?!!*W"m/R20s+(%J!WW)m!!*-"r;Zg"rVllsr;Zg^p\t?2!!!&g -rrDur!!"+rrrD!U!!#78s7$$hKD>*>!>"\e!!+2Ar;Zm"s7l?h!<`8u!!!&urrDuq!!#7Xrr_`j -!!hrlrVuqJh#@Air;ZhIfDk@?!JBn7!!*>om/R/Orqufu"97lc!!*2squH]q!;QKm!'g5X"8i-! -+7B.1^]4Dirr@TJ!7q2>rrIcAo`,!tnEg2V5Q(H[!XJb`p](="nFHV[J+ipB!!%N:rrVZi#M]:W -!!!&Ns7$$hKCJO6!=/,]!!,=Zr;Zm0s1nC0!=/,c!!%NBrrMTom/I(dJ)(&(rqufs"4mMArrIo5 -o`,!pq!A%^J+3C:!?_@9!!*Vgo)Q9"!;ucq!!h*TnG`NEi:R'N"8M6`!Is&+!!,=`pAb4)i:?rX -rrDim!!!P\s7$$hLZ%h*!<`,a!!.Sbr;ZkJr:^0l&&@f;!!0S/!:]pe!$BelnG`NEi:R'N"8M6` -!WTt6!!3,ppAb4)_"7U,"1S:1i;EWU5M#l(rrIo5o`,!pq!A%^s+((K!Wi>jpAb49JFigA#Ij^5 -_#465J(FYhrrIo5o`,!pq!A%^s+((K!X&J\pAb49JFigA&%DQ=JGfJus7$$hLVWQ_!'^#OMHk -!.Wi)!<2os!!CdOnG`NM_"@[.!W;?c![KQr;Zg& -ec5.=!KY%h!!*,umJm7gs8;ou5Q:?V!'g&Tp&>-l!!",/rrTt9!T!bUq#(0m&(U^LrrJ1ro`,!n -r9aOc!WW)u!It%@!!#7U!!!&mrr_`j!!hrlrVuqJhZ!TFr;Zg>ec5.=!KY%h!!*,umJm7gs8;ou -s7l9f!'g)U!!Doo"2Fm:!Up$gr;HZr+5["ti;EWU5Lof'rrJ1ro`,!nr9aOc!WW-!!Wi>jp&G(W -oDejrp&>#BrW)Ee!;QNn!"[rd!5SO5!.WQ!nG`NM_"@[.!W;?c!#BquHQm!<2Tj!"\#f!.b"Je,Sq;!JfV+!!*2smJm7gs8E!!#Q45p!>!!>!!",6rr@TI -!;ZWpr:Bsh&)dKd!!!&Ks7$$hLZ%h*!<`,b!!*-#rVus(r:L$j&)d-]!'g/VqZ$VGqYpQjoDejr -iVroWr;Zg"e,Sq;!JB>'!!*2kmJm7gs8E!!#Q45p!=.QV!!%NAs8)crJ,90FnFQ\\#N>[_r;?Tq -#Li_BrrIcAo`,!tnEp8W!WW-!!=/Pq!!*>opAb0op&>$kqZ$U\qYpQRoDejniVroQr;Zg.e,Sq; -!JBn7!!*>omJm7gs8E!!#Q45p!<_ic!!!8srrE&q!!#7[rrBk,!!!,[rrDQe!!"+is7$$hKCJO6 -!=/,^!!*-#rVus(r:L$j"8Mcon,ECeqZ$U\qYpPGoDejniVro9r;Zg^e,Sq;!JC1?!!*W"mJm7g -s8E!!#Q45p!Ie<[A5Ci/%!$iqZ$U$VrqcZq5Q(N]q!nCb"8DfqpuqbY"4@/$kqZ$U\r;Qcdnc/Xlp\t6_kl:\gdJr_9!e:g>pAb3rr9XIb -!WW-!!=/Po!!!Q/rrBk4!!#7VrrE&q!!#7]rrD!J!!!,qrrD!A!!!PWs7$$iJ.LT4!!*3"m/R.f -s8E!!#Q4/n!"])/!5SL4!'g,UqZ$VGr;Qc4nc/Xpp\t6/kl:]*dJr_9!e:OFpAb4!q!A%^!WW-! -!=/Po!!",?rrD!T!!#7Us8)crJ,Kf!!*-#rVus(r:Bsi5N)M@!C-)P!!#7UrrDuq!!",=rrD!U!;c]q_#=<6!VcToJE[%65LBH" -rr[cO+7T(+!=/Vj!!*-#rVus(r:BsiJ&)$`!?_+8!!#7UrrE&s!!#7]rrD!V!!!&rrrD!V!!!,q -s6'F_J'e5brr[cO&,>r#!>#+p!!*-#rVus(r:Bsis+((K!>#,,!!#7Ts8;otJ,K:li7%es8E!! -#Q45p!<`,p!!*&t!!#7Trr`0!!$D+_#=<65O&1Ji;N`BrrDin!!!P@s7$$gJGoNM5Q?95!<<)a!!*-#rVus(r:L$j -++X7h!>",f!!#7JrrD!V!:0Xbq#16n+1hLArr@TK!!aVGn,NFns8M9`!_rVup_o)J^i!.XnG -!9!hVq#:Eb!!i8u!;QNn!'e'pnG`K=r;Zg.rVllqkl:_bs8E!!#Q45p!'g>\!=.Q^!!#7Trr`0! -!$D+\!=/,n!!#7T -rr_`j!!iE$!9!hVq#C\!=/,n -!!#7Ts8;otJ,K-!WW-!!=/Pq!!#7\!!*>orVup_ -o`"pjr;Zg^r;QcTrW)co!9!hV!!E#r!;QNn!'e'pnG`K=hZ*ZXs8E!!#Q45p!$D(UGFr;cWm!;QNn!'e'pnG`K=hZ*ZXs8E!!#Q45p!?Zji!!*VgrVup_o`"p\ -r;Zg&r;QcTrW)coqu?_Hq>UHirVup_])V:"!.`r,!UHirVup_])V:"!.`r,!UHirVup_])V:"!.`r,!UHirVup_])V:"!.`r,!!!D!!+1WrVup_o`"oAquHZp -!9!hVqYpQjqu?^-q>UHirVup_])V:"!.`r,!UHirVup_])V:"!.`r,!UHirVup_])V:"!.`r,!$VrqcZq5Q1T^i;N`Q -rrD!T!!!,srrDin!!#6ps7$$gJDU>-!WW-!!=/Pq!!*2squ?`sr;Zg^p&>$kqZ$U\rVllUrW)fp -!9!bT!!E&s!;QNn!'e'pnG`K=hZ*ZXs8E!!#Q45p!UHirVup_])V:"!.`r,!!9!hVqYpQ2 -qu?]tq>UHirVup_])V:"!.`r,!i;N`QrrBk4 -!!!&qrrDin!!#6ps7$$gJDU>-!WW-!!=/Pp!!.S"rVus0q#(0m5PtH\i:R'M+8u3>i;N`QrrBk4 -!!!&qrrDin!!#6ps7$$gJDU>-!WW-!!=/Pp!!,="rVus@nGN=e5PtH\_"@[-+8u3>i;N`QrrBk4 -!!!&qrrDin!!#6ps7$$gJDU>-!WW-!!=/Pp!!,=BrVus`i;EWU5PtH\JFrmB+8u3>i;N`QrrBk4 -!!!&qrrDin!!#6ps7$$gJDU>-!WW-!!=/Pp!!+22rVutK_#4655PtKQ!!",>rrD!V!;c]q_#+04 -!Vu`qq#16n5J$marr@T,!!*-#rVus(r:Bsi+7T70!Iqo`!!#7]rrE&j!!",>rrD!V!;c]q_#+04 -!Vu`qq#16n5J$marr@T,!!*-#rVus(r:Bsi+7T70!Iqo`!!#7]rrDuh!!",>rrD!V!;c]q_#+04 -!Vu`qq#16n5J$marr@T,!!*-#rVus(r:Bsi+7T70!Iqo`!!#7]rrDid!!",>rrD!V!;c]q_#+04 -!Vu`qq#16n5J$marr@T,!!*-#rVus(r:Bsi+7T70!Iqo`!!#7]rrDQ\!!#7^rrD!V!;c]qi;-!WW-!!=/Pp!!+22rVutK_#4655Q1T^q""L`rrD!V!;c]qq"t*l&,Q;+q#(0m -5J$marr@T,!!*-#rVus(r:Bsi+7T70!Iqo`!!#7^rrDQ\!!!&trrD!V!;c]qr;6Np+8Z!;nGN=e -J%G[Lrr@T,!!*-#rVus(r:Bsi+7T70!Iqo`!!#7^rrD!L!!!&trrD!V!;c]qr;6Np+8Z!;i;EWU -J%G[Lrr@T,!!*-#rVus(r:Bsi+7T70!Iqo`!!#7^rrBk,!!!-!rrD!V!;c]qrql`r5PkB[_#48D -s7$$gJDU>-!WW-!!=/Pp!!+22rVutK_#4655Q1T^JFigA#Q4T%i;N`Ps82isJ,90FJGfJYs7$$g -JDU>-!WW-!!=/Pp!!+22rVutK_#4655Q1WR!!!Q-rrD!V!;ZWpJGfKDs8;ot!P/7"rr@T,!!*-# -rVus(r:Bsi+7T70!Iqo`!!#7_rrE&i!!",=rrD!V!;ZWp_#=<6!W)frrqufs"1eI$rr@T,!!*-# -rVus(r:Bsi+7T70!Iqo`!!#7_rrDug!!#7]rrD!V!;ZWpi;N]V"8`#tr;?Tq#J'm(rr@T,!!*-# -rVus(r:Bsi+7T70!Iqo`!!#7_rrDic!!%NHrrD!V!;ZWpnGWCf#Q"H#q#(0m&%V`0rr@T,!!*-# -rVus(r:Bsi+7T70!Iqo`!!#7_rrDic!;lcri;N`PrrDin!!!Q+rrDQe!!"+Os7$$gJDU>-!WW-! -!=/Pp!!+22rVutK_#4655Q:Z_nFQ\\!W2lsi;N`PrrDur!!",;rrD!U!!#6os7$$gJDU>-!WW-! -!=/Pp!!+22rVutK_#4655Q:Z_nFQ\\#Q+N$i;N`Os8DuuJ,90F_#465J%>UKrr@T,!!*-#rVus( -r:Bsi+7T70!Iqo`!!#7_rrD!U!;lcuqu?^=qu6ZSrW)`n!l+d:q>UGFr;aA-nG`K=hZ*ZXs8E!! -#Q42o!?^h1!!.Sbr;Zg^rr2uVrVup!qZ$Qq!.XnG!9!hVq#:Eb!!i?"r;Zfu\Gu'u!.`r,!nG`K=hZ*ZXs8E!!#Q42o!?^h1!!.Sb -r;Zg^rr2uVrVup?nc&U)rW)Bd!:]pe!$A`NnG`K=hZ*ZXs8E!!#Q42o!?^h1!!.Sbr;Zg^rr2uV -rVup_nc&T>rW)Bd!9!eU!'e!nnG`K=hZ*ZXs8E!!#Q42o!?^h1!!.Sbr;Zg^rr2uVrVuqJnc/Of -mf*:&r;ZhIp\t9`#K6Z3rr@T,!!*-#rVus(r:Bsi+7T70!Iqo`!!#7_rrD!V!:g'hrquibrr@TJ -!;?Hm!!%Mfs7$$gJDU>-!WW-!!=/Pp!!+22rVutK_#4655Q:Z_i;N`HrrDuq!:Kmc!!!&orr`0! -!$B2[nG`K=hZ*ZXs8E!!#Q42o!?^h1!!.Sbr;Zg^rr2uVrW)co!Up?krrDim!;HKo!.XnG!<2os -!!Duq"7Q9j#K?`4rr@T,!!*-#rVus(r:Bsi+7T70!Iqo`!!#7_rrD!V!;ZZp!!%NHrrDQe!;QQq -n,N^jrrDuq!!!8urr^%:!!1(=nG`K=hZ*ZXs8E!!#Q42o!?^h1!!.Sbr;Zg^rr2uVrW)fp"8i-! -+8l-=i;EZNrrTt9!W2lsq#(0m&,6)(JGoPfs7$$gJDU>-!WW-!!=/Pp!!+22rVutK_#4655Q:Z_ -i;N`Qrr_`j!!iH%!5SR6!!2lprVuqJr;Qcdr;Zg>p](0l!.W#gnG`K=hZ*ZXs8E!!#Q42o!?^h1 -!!.Sbr;Zg^rr2uVrW)fp"2Fm:!W;rtJGoNK!Vu`qr;HZr+8l-=i;EWU5PY6Yrqufs5K<`mrr@T, -!!*-#rVus(r:Bsi+7T70!Iqo`!!#7_rrD!V!;c]qJGoQHs8;ot"8Vrsq#16n&,cG-_#465J,'$D -r;?Tq+3+?Mrr@T,!!*-#rVus(r:Bsi+7T70!Iqo`!!#7_rrD!V!;c`o!!%NJrrE&s!!!,srrDQf -!!!9%rr@TJ!;HKnq#(0m&'"Y=rr@T,!!*-#rVus(r:Bsi+7T70!Iqo`!!#7_rrD!V!;lcrrqufs -5Q:Z_r;?Tq#PnB"i;N]V"8r2t!!!&orrDQe!!!8Ds7$$gJDU>-!WW-!!=/Pp!!+22rVutK_#465 -5Q:Z_i;N`RrrDuq!!",?rrDim!!!Q*rrBk6!!!&urrE&s!!!,qrrD!U!!!,@s7$$gJDU>-!WW-! -!=/Pp!!+22rVutK_#4655Q:Z_i;N`RrrDid!!",:rr@TA!!!8urrBk+!!%Mqs7$$gJDU>-!WW-! -!=/Pp!!+22rVutK_#4655Q:Z_i;N`RrrDQ\!!#7Zs763j&,6)(_".O++41&Wrr@T,!!*-#rVus( -r:Bsi+7T70!Iqo`!!#7_rrD!V!;lcri:I!LJ,90Frpp*i+8>d8JF`a@#LNM?rr@T,!!*-#rVus( -r:Bsi+7T70!Iqo`!!#7_rrD!V!;lcr_"7X&rrDug!!#7Xrr@T@!!!,Js7$$gJDU>-!WW-!!=/Pp -!!+22rVutK_#4655Q:Z_i;N`RrrBk-!!!&qrrDug!!%NCs7--i!RUl9rr@T,!!*-#rVus(r:Bsi -+7T70!Iqo`!!#7_rrD!V!;lcrJFrmB"8Vrsq""LZs7$*9s7$$gJDU>-!WW-!!=/Pp!!+22rVutK -_#4655Q:Z_i;N`Rrr@TB!!!9"rrDid!!!&orrE&g!!%Mrs7$$gJDU>-!WW-!!=/Pp!!+22rVutK -_#4655Q:Z_i;N`Rs7?9k&,H5*nFQ\\"8Dfqrp]sg5LKN#rr@T,!!*-#rVus(r:Bsi+7T70!Iqo` -!!#7_rrD!V!;lfg!!",:rrDQ\!!!8urrE&g!!"+gs7$$gJDU>-!WW-!!=/Pp!!+22rVutK_#465 -5Q:Z_i;N`SrrE&j!!#7ZrrD!L!!!Q(rrE&g!!!PWs7$$gJDU>-!WW-!!=/Pp!!+22rVutK_#465 -5Q:Z_i;N`SrrE&j!!%NErrD!L!!",8rrDue!!!8Os7$$gJDU>-!WW-!!=/Pp!!+22rVutK_#465 -5Q:Z_i;N`SrrE&j!;QQoi:I!L5PP0Xr:'ae"4@/-!WW-!!=/Pp!!+22rVutK_#4655Q:Z_i;N`S -rrDuj!!!&orrBk-!!%NBrrE&f!!!&Js7$$gJDU>-!WW-!!=/Pp!!+22rVutK_#4655Q:Z_i;N`S -rrDuj!!!,qrrBk-!;6?lrpKj8s7$$gJDU>-!WW-!!=/Pp!!+22rVutK_#4655Q:Z_i;N`SrrE&l -!!!8urrD!N!!!&mrrE&e!!%Mts7$$gJDU>-!WW-!!=/Pp!!+22rVutK_#4655Q:Z_i;N`SrrE&l -!!!Q(rrD!N!!!,ns6fpf5L]Z%rr@T,!!*-#rVus(r:Bsi+7T70!Iqo`!!#7_rrD!V!;uisrq6d8i:[-N#PA&b!!"+is7$$gJDU>-!WW-!!=/Pp!!+22rVutK_#4655Q:Z_i;N`SrrE&l!!#7X -rrD!N!!!Q%rr@T=!!!PYs7$$gJDU>-!WW-!!=/Pp!!+22rVutK_#4655Q:Z_i;N`Rs7QEmJ+rsC -nFch^+8#R5JFEO=#Li_Brr@T,!!*-#rVus(r:Bsi+7T70!Iqo`!!#7_rrD!V!;lfj!!!&nrrDQ^ -!!%N@rrBk(!!!,Ms7$$gJDU>-!WW-!!=/Pp!!+22rVutK_#4655Q:Z_i;N`Rrr@TE!!!8trrDig -!!!&krrBk(!!!&Ks7$$gJDU>-!WW-!!=/Pp!!+22rVutK_#4655Q:Z_i;N`Rrr@TI!:g'hq"t*l -&+9Gti;EWU"8VrsJGfJss7$$gJDU>-!WW-!!=/Pp!!+22rVutK_#4655Q:Z_i;N`RrrBk5!!!&i -rrDup!!",/rrDQe!!!9"rrBk5!!%Mus7$$gJDU>-!WW-!!=/Pp!!+22rVutK_#4655Q:Z_i;N`R -rrBk5!!!&irrDup!!",/rrDim!!!Q*rrD!U!!#75s7$$gJDU>-!WW-!!=/Pp!!+22rVutK_#465 -5Q:Z_i;N`RrrD!U!!!,krrE&r!!#7OrrDuq!!",:rrDQe!!#75s7$$gJDU>-!WW-!!=/Pp!!+22 -rVutK_#4655Q:Z_i;N`RrrDQe!!!8ns82isJ+!=:rqufs5Pb[rr@T,!!*-#rVus( -r:Bsi+7T70!Iqo`!!#7_rrD!V!;lcrq#(0m&+KT!JGfK7s8;otJ,0*Er;?Tq+4U>[rr@T,!!*-# -rVus(r:Bsi+7T70!Iqo`!!#7_rrD!V!;lcrr;?Tq+7T:1_#=<6!UTgdJGoQDrrE&s!!!PZs7$$g -JDU>-!WW-!!=/Pp!!+22rVutK_#4655Q:Z_i;N`RrrE&s!!#7QrrD!V!!!,frr^%:!!2ior;Zg. -eGo%^Hp!.XG:!q60pli.(&!!!&orrDur!!!PZs7$$gJDU>-!WW-!!=/Pp!!+22rVutK_#4655Q:Z_ -i;N`PrrMTom/I(dJ*[+:^]4?8p\t6mrVup/eGo%-!WW-!!=/Pp!!+22rVutK_#4655Q:Z_i;N`!rr^%: -!!2io!<2rt!"[TZnG`K=hZ*ZXs8E!!#Q42o!?^h1!!.Sbr;Zg^rr2uVrW(+@"2Fm:!VcTorr)lt -&(LXKrr@T,!!*-#rVus(r:Bsi+7T70!Iqo`!!#7_rrD!V!6Y-!WW-!!=/Pp -!!+22rVutK_#4655Q:Z_i;N`!rr^%:!!2io!<2rt!"[TZnG`K=hZ*ZXs8E!!#Q42o!?^h1!!.Sb -r;Zg^rr2uVrW(+@"2Fm:!VcTorr)lt&(LXKrr@T,!!*-#rVus(r:Bsi+7T70!Iqo`!!#7_rrD!V -!;ZWqn-A=[!<@W8rr^%:!!2io!<2rt!"[TZnG`K=hZ*ZXs8E!!#Q42o!?^h1!!.Sbr;Zg^rr2uV -rW)corr<%Kmf*@X!!hii"2Fm:!VcTorr)lt&(LXKrr@T,!!*-#rVus(r:Bsi+7T70!Iqo`!!#7_ -rrD!V!;c]tqu?^=mf*@(!!2Ec"2Fm:!VcTorr)lt&(LXKrr@T,!!*-#rVus(r:Bsi+7T70!Iqo` -!!#7_rrD!V!;c]tn,NFnmf37d!.XA8"2Fm:!VcTorr)lt&(LXKrr@T,!!*-#rVus(r:Bsi+7T70 -!Iqo`!!#7_rrD!V!;c]t^]4?8n,ECcrVup?m/I1'!!!&orrE&t!!!PZs7$$gJDU>-!WW-!!=/Pp -!!+22rVutK_#4655Q:Z_i;N`Qrr@TK!:Tpfq#16n&+';u^]4?8p\t6mrVup/eGo%nG`L(rVup!m/I1'!!!&o -rrE&t!!!PZs7$$gJDU>-!WW-!!=/Pp!!+22rVutK_#4655Q:Z_i;N`RrrDim!!!Q+rrMU2q>UGF -r;c3a"2Fm:!VcTorr)lt&(LXKrr@T,!!*-#rVus(r:Bsi+7T70!Iqo`!!#7_rrD!V!;lcrnGN=e -#Q"H$^^']8qu?_HmJd:(!!!&orrE&t!!!PZs7$$gJDU>-!WW-!!=/Pp!!+22rVutK_#4655Q:Z_ -i;N`RrrD!U!!!,trrE*#qYpQpqu?^]mJd:(!!!&orrE&t!!!PZs7$$gJDU>-!WW-!!=/Pp!!+22 -rVutK_#4655Q:Z_i;N`RrrBk+!;c]qr;6Np+79(1^]4?8p\t6mrVup/eGo%- -!WW-!!=/Pp!!+22rVutK_#4655Q:Z_i;N`Rrr@T@!!#7\rrDil!!!Psrr^%:!!2io!<2rt!"[TZ -nG`K=hZ*ZXs8E!!#Q42o!?^h1!!.Sbr;Zg^rr2uVrW)iq!.aY@!$D+-0!!!&orrE&t!!!PZs7$$gJDU>-!WW-!!=/Pp!!+22rVutK_#4655Q:Z_i;N`SrrE&h!!!,u -rrD!L!!!,orr^%:!!2io!<2rt!"[TZnG`K=hZ*ZXs8E!!#Q42o!?^h1!!.Sbr;Zg^rr2uVrW)lr -!<2Nh!!2us!9!JL!!2cm"2Fm:!VcTorr)lt&(LXKrr@T,!!*-#rVus(r:Bsi+7T70!Iqo`!!#7_ -rrD!V!;uisrp^!crrD!K!;6?o^]4?8p\t6mrVup/eGo%-!WW-!!=/Pp!!+22 -rVutK_#4655Q:Z_i;N`SrrDue!!#7]rrBk+!!#7Wrr^%:!!2io!<2rt!"[TZnG`K=hZ*ZXs8E!! -#Q42o!?^h1!!.Sbr;Zg^rr2uVrW)lr!;u?e!$D.=!5S1+!$Cq7"2Fm:!VcTorr)lt&(LXKrr@T, -!!*-#rVus(r:Bsi+7T70!Iqo`!!#7_rrD!V!;uisr:'ae&,cG-_".O+&,-#*^]4?8p\t6mrVup/ -eGo%-!WW-!!=/Pp!!+22rVutK_#4655Q:Z_i;N`SrrDue!!!-!rrBk+!!!,p -rr^%:!!2io!<2rt!"[TZnG`K=hZ*ZXs8E!!#Q42o!?^h1!!.Sbr;Zg^rr2uVrW)lr!;u?e!!3#t -!5S1+!!2fn"2Fm:!VcTorr)lt&(LXKrr@T,!!*-#rVus(r:Bsi+7T70!Iqo`!!#7_rrD!V!;uis -r9s^arrBk*!;?Ep^]4?8p\t6mrVup/eGo%p\t?2!!!&orrE&t!!!PZs7$$gJDU>-!WW-!!=/Pp!!+22rVutK_#465 -5Q:Z_i;N`SrrDud!!#7^rrBk*!!#7Xrr^%:!!2io!<2rt!"[TZnG`K=hZ*ZXs8E!!#Q42o!?^h1 -!!.Sbr;Zg^rr2uVrW)lr!<2Hf!$D1>!9!DJ!$Ct8"2Fm:!VcTorr)lt&(LXKrr@T,!!*-#rVus( -r:Bsi+7T70!Iqo`!!#7_rrD!V!;uisrpTmf&,lM.i:6jJ&,6)+^]4?8p\t6mrVup/eGo%-!WW-!!=/Pp!!+22rVutK_#4655Q:Z_i;N`SrrE&f!!!-"rrD!J!!!,qrr^%:!!2io -!<2rt!"[TZnG`K=hZ*ZXs8E!!#Q42o!?^h1!!.Sbr;Zg^rr2uVrW)iqn,NFhrVllenc/Xlp\t?2 -!!!&orrE&t!!!PZs7$$gJDU>-!WW-!!=/Pp!!+22rVutK_#4655Q:Z_i;N`Rs6fsdrrDQZ!!!&o -rr^%:!!2io!<2rt!"[TZnG`K=hZ*ZXs8E!!#Q42o!?^h1!!.Sbr;Zg^rr2uVrW)iq!.aP=!.Y"J -!;Q*b!!2io"2Fm:!VcTorr)lt&(LXKrr@T,!!*-#rVus(r:Bsi+7T70!Iqo`!!#7_rrD!V!;lcr -JFEO=5Q:Z_q!e@Yrr^%:!!2io!<2rt!"[TZnG`K=hZ*ZXs8E!!#Q42o!?^h1!!.Sbr;Zg^rr2uV -rW)iq!5S((!$D4?!;u?ep\t?2!!!&orrE&t!!!PZs7$$gJDU>-!WW-!!=/Pp!!+22rVutK_#465 -5Q:Z_i;N`RrrBk(!!!Q/rrDue!;HKq^]4?8p\t6mrVup/eGo%^Bn!!3&u!.aV?p\t?2 -!!!&orrE&t!!!PZs7$$gJDU>-!WW-!!=/Pp!!+22rVutK_#4655Q:Z_i;N`RrrDuq!!",:rr@TJ -!<)ot_#=<6!W)frJGoQCrr^%:!!2io!<2rt!"[TZnG`K=hZ*ZXs8E!!#Q42o!?^h1!!.Sbr;Zg^ -rr2uVrW)iq!<2os!'g;Z!5SO5!.Y"J!9!hV!!E)t!5SR6p\t?2!!!&orrE&t!!!PZs7$$gJDU>- -!WW-!!=/Pp!!+22rVutK_#4655Q:Z_i;N`Qs8;otJ,0*Ei;EWU5Q:Z_nGWCf#Q"H#i;N`Nrr^%: -!!2io!<2rt!"[TZnG`K=hZ*ZXs8E!!#Q42o!?^h1!!.Sbr;Zg^rr2uVrW)fp!.b%Kq#:?`r;Zg> -rr2unrVup/qYpQRrW)]m"2Fm:!VcTorr)lt&(LXKrr@T,!!*-#rVus(r:Bsi+7T70!Iqo`!!#7_ -rrD!V!;c]t^]4?8q#:?hr;Zg.rr2urrVup?qYpQRrW)]m"2Fm:!VcTorr)lt&(LXKrr@T,!!*-# -rVus(r:Bsi+7T70!Iqo`!!#7_rrD!V!;c]tn,NFnq#:?lr;Zg&rVuis!.XkF!9!hVp\t?2!!!&o -rrE&t!!!PZs7$$gJDU>-!WW-!!=/Pp!!+22rVutK_#4655Q:Z_i;N`Qrr`0!!$D"9!<2os!!E3" -!l+d:q>UHQrW)]m"2Fm:!VcTor;HZr#LreCrr@T,!!*-#rVus(r:Bsi+7T70!Iqo`!!#7_rrD!V -!;ZZp!!%NCs8;ot!WE$"n,N^hrrD!V!;HKq^]4?8p\t6grVup#eGo%UKb#PS/tJGfKGrrE+Lq>UHQrW)]m"2Fm:!VcTonGWCf!S%/=rr@T, -!!*-#rVus(r:Bsi+7T70!Iqo`!!#7_rrD!V!:9^c_#465J+N[?i;N`Nrr^%:!!2io!9!eUeGo%< -!.`r,!-!WW-!!=/Pp!!+22rVutK_#4655Q:Z_i;N`Bs8;ot -!V?-!WW-!!=/Pp!!+22rVutK -_#4655Q:Z_i;N`Ps8N'!J+imB_#46:J,fQ- -!WW-!!=/Pp!!+22rVutK_#4655Q:Z_i;N`Qrr`0!!$Cq7!9!eU"[E%e^]4E2rrD!V!;HKq^]4?8 -q#:?hqu?^!ec5.=!.`r,!rr@T,!!*-#rVus(r:Bsi+7T70!Iqo`!!#7_rrD!V!;c`o!!%NCrrE&s!!39&nGWCf#Q"H# -i;N`Nrr^%:!!2lp!:]md!!1XMnG`K=hZ*ZXs8E!!#Q42o!?^h1!!.Sbr;Zg^rr2uVrW)iq!<2os -!'g2Wr;Zm"s5-!WW-!!=/Pp!!+22rVutK_#4655Q:Z_i;N`RrrDQe!!!8trrD!U!!#7]!!%NG -rrD!V!;HKq^]4?8q#:?PqZ,1HnG`K=hZ*ZXs8E!!#Q42o!?^h1!!.Sbr;Zg^rr2uVrW)iq!9!eU -!!Drp!:]pe!$;%-!WW-!!=/Pp!!+22rVutK_#4655Q:Z_i;N`Rrr@TE!!!,urrE&m!!!Q,rrD!V!;HKq^]4?8 -q#:?PqZ,1HnG`K=hZ*ZXs8E!!#Q42o!?^h1!!.Sbr;Zg^rr2uVrW)iq!.ahE!!2rrpAb1(qu6ZS -rW)]m"2Fm:!VlZpi;3N)s7$$gJDU>-!WW-!!=/Pp!!+22rVutK_#4655Q:Z_i;N`Rs7QHhrr@TE -!!!9$rrD!V!;HKq^]4?8q#:?`qu?]tec5.=!.`r,!-!WW-!!=/Pp!!+22rVutK -_#4655Q:Z_i;N`SrrE&l!!#7\rrD!P!!!,urrD!V!;HKq^]4?8q#:?`qu?]tec5.=!.`r,!rr@T,!!*-#rVus(r:Bsi+7T70!Iqo`!!#7_rrD!V!;uisrq6-!WW-!!=/Pp!!+22rVutK_#4655Q:Z_ -i;N`SrrDuj!!!,urrE&n!!!&srrD!V!;HKq^]4?8q#:?lqu?^%ec5.=!.`r,!- -!WW-!!=/Pp!!+22rVutK_#4655Q:Z_i;N`SrrDui!;c]qJGB0F!W2lsi;N`Nrr^%:!!2lp!<2lr -!"[W[nG`K=hZ*ZXs8E!!#Q42o!?^h1!!.Sbr;Zg^rr2uVrW)lr!;uKi!.XnG!5SC1!!2us!9!hV -p\t?2!!!&prrE&r!!!P[s7$$gJDU>-!WW-!!=/Pp!!+22rVutK_#4655Q:Z_i;N`SrrDui!!#7\ -rrD!Q!!!&srrD!V!;HKq^]4?8p](-k!$BbknG`K=hZ*ZXs8E!!#Q42o!?^h1!!.Sbr;Zg^rr2uV -rW)lr!;uKi!$D+-!WW-!!=/Pp!!+22 -rVutK_#4655Q:Z_i;N`SrrDui!!!Q,rrDii!!!&srrD!V!;HKq^]4?8p\t6/r;ZhIec5.=!.`r, -!-!WW-!!=/Pp!!+22rVutK_#4655Q:Z_i;N`SrrDui!!!,urrE&o!!!&srrD!V -!;HKq^]4?8p\t6_rVup!eGo%-!WW-!!=/Pp!!+22rVutK_#4655Q:Z_ -i;N`SrrE&j!;c]qJGK6G"8i)ui;N`Nrr^%:!!2io!;ufr!!h$RnG`K=hZ*ZXs8E!!#Q42o!?^h1 -!!.Sbr;Zg^rr2uVrW)lr!<2Tj!.XnG!5SF2!!E,u!9!hVp\t?2!!!&orrE&t!!!PZs7$$gJDU>- -!WW-!!=/Pp!!+22rVutK_#4655Q:Z_i;N`SrrE&j!!#7\rrD!R!!!,urrD!V!;HKq^]4?8pAY5F -!!#75s7$$gJDU>-!WW-!!=/Pp!!+22rVutK_#4655Q:Z_i;N`Rs7?9k+8c'rr@T,!!*-#rVus(r:Bsi+7T70!Iqo`!!#7_rrD!V!;lcr -JFrmB#Q+N$r;$Bn&,ZA,i;N`Nrr^%:!!2cm!J!D`s7$$gJDU>-!WW-!!=/Pp!!+22rVutK_#465 -5Q:Z_i;N`Rrr@TB!!!,urrE&p!!!Q,rrD!V!;HKq^]4?8`W,H-!.`r,!rr2unr;Zg.q>UH1rVup!qYpQRrW)]m"2Fm:!QG*.rr@T,!!+2"r;Zj_i:R'N+7T70!Iqo` -!!#7_rrD!V!;lcrrqufs5Q:Z_r;?Tq#PnB"i;N]V"8`#ti;N`Nrr^%:!!1(=nG`K=hZ*[A_#466 -+7Sq'!?^h1!!.Sbr;Zg^rr2uVrW)fpr;ZhIrr2utr;Zg"q>UHarVup'qYpQRrW)]m"2Fm:!QG*. -rr@T,!!,<7r;Zj/nFZb^+7T70!Iqo`!!#7_rrD!V!;c]qJGoQHs8;ot!Vu`qq#16n&,Q;+i;N`N -rr^%:!!1(=nG`K=hZ*Y+qu?a&q"4Uf+7T70!Iqo`!!#7_rrD!V!;c]t^]4?8r;QbIr;cZn!;ufr -!$D(;!9!hVp\t?2!!!&=s7$$gJDU>,J,B9I#Pdrl!?^h1!!.Sbr;Zg^rr2uVrW)fp"7Q9j#Q4T% -_#465J,0-D!!%NFrrD!V!;HKq^]4?8`W,H-!.`r,!<2lr!<`8m!!+22rVutK_#4655Q:Z_i;N`Q -rr`0!!$D.=!9!eU!'g;Z!l+d:q>UHQrW)]m"2Fm:!QG*.rr@T,!!*#r!!*3"o`,"7nGWCgJ&)!_ -!'gJ_!9!hVq>^Hp!.XqH!:]pe!$D%:!q60pq>UHQrW)]m"2Fm:!QG*.rr@T,!!)rp!!*,uo`,"7 -nGWCgJ&)!_!'gJ_!9!hVq>UKb#Q+N$q#(0m&,?/*!.XhE!9!hVp\t?2!!!&=s7$$gJDU>,r;6Nq -!W;Tj!?^h1!!.Sbr;Zg^rr2uVrW)Kg!;ucq!!hrl!9!hVp\t?2!!!&=s7$$gJD^D.!VlNl!<2Wk -!?^h1!!.Sbr;Zg^rr2uVrW)Kg!<2os!!DZh!9!hVp\t?2!!!&=s7$$gJD^D.!VlNl!<2Wk!?^h1 -!!.Sbr;Zg^rr2uVrW)Hfr;Zfumf*:FrW)]m"2Fm:!QG*.rr@T-!!*,qqZ$Wqo`,"7nGWCgJ&)!_ -!'gJ_!9!hVnG`K=r;c9c!9!hVp\t?2!!!&=s7$$gJD^D.!VlNl!<2Wk!?^h1!!.Sbr;Zg^rr2uV -rW)Hf!5SO5!.XJ;!9!hVp\t?2!!!&=s7$$gJD^D.!V#sd!.OS@!?^h1!!.Sbr;Zg^rr2uVrW)Hf -!9!eU!'frP!9!hVp\t?2!!!&=s7$$gJD^D."7Z0f!.OS@!?^h1!!.Sbr;Zg^rr2uVrW)Hf!:]pe -!$C\0!9!hVp\t?2!!!&=s7$$gJD^D."7Z0f!.XYA!?^h1!!.Sbr;Zg^rr2uVrW)co!Up?jrrDim -!!!Q*rrE+Lq>UHQrW)]m"2Fm:!QG*.rr@T-!!*2kqZ$VGo`,"7nGWCgJ&)!_!'gJ_!9!hVq>^Hp -!.XnG!;ucq!!iB#!q60pq>UHQrW)]m"2Fm:!QG*.rr@T-!!*2kqZ$VGo`,"7nGWCgJ&)!_!'gJ_ -!9!hVqYpZq!!",,r;6Nq!W;Tj!?^h1!!.Sbr;Zg^rr2uVrW)iq!9!eU!!E)tnc/YSqu6ZSrW)]m"2Fm: -!QG*.rr@T,!!)rp!!*,uo`,"7nGWCgJ&)!_!'gJ_!9!hVqu6Z3q#CC*rr2tKo)Jb4qu6ZSrW)]m -"2Fm:!QG*.rr@T,!!*#r!!*3"o`,"7nGWCgJ&)!_!'gJ_!9!hVqu6Z3q#CBsrr2u6o)Jb4qu6ZS -rW)]m"2Fm:!QG*.rr@T,!!%KG!!*2so`,"7nGWCgJ&)!_!'gJ_!9!hVqu6YHp]1,J,B9I#Pdrl!?^h1!!.Sbr;Zg^rr2uVrW)iq!.ahE"+U@NnFHV[ -&,ZA,i;N`Nrr^%:!!1(=nG`K=hZ*X@qu?a&nFZb^+7T70!Iqo`!!#7_rrD!V!;lfj!!>Ics7l0c -!!iE$!9!hVp\t?2!!!&=s7$$gJDU>-5Ci\4!>"\m!!,=RrVutK_#4655Q:Z_i;N`Rs7ZKq+92B= -o)Jaqqu6ZSrW)]m"2Fm:!QG*.rr@T,!!+1Wr;Zj?i:R'NJ+3F;!Iqo`!!#7_rrD!V!;uisrq?Bp -&-)\/o)Jamqu6ZSrW)]m"2Fm:!QG*.rr@T,!!+2"r;Zj__"@[.s7$!f!Iqo`!!#7_rrD!V!;uis -rq?Bm#QFbp!!!,urrD!V!;HKq^]4?8`W,H-!.`r,!>"\u!!.Sbp&G-ps7$!f!Iqo`!!#7_rrD!V -!;uisrq?Bm"9/<#JFigA"8i)ui;N`Nrr^%:!!1(=nG`K=hZ*Z^q#(0ns+'eC!X&JlrVutK_#465 -5Q:Z_i;N`SrrE&m!!!'!rrBk,!!!,urrD!V!;HKq^]4?8`W,H-!.`r,!<`9!!!*-#o`,$us5d`Z -^]4?Vr:L$j5QCZ^!Is&+!!#7_rrD!V!;uisr:U*m+92B=oDejlqu6ZSrW)]m"2Fm:!QG*.rr@T+ -!!RlA!!%NDo`,#BrquftJ)L8*!'gJ_!9!hVr;Qcpp&G1*s8W)j!!!&srrD!V!;HKq^]4?8`W,H- -!.`o+"X!XB!WV*N!!3,tr;ZkJ_#4655Q:Z_i;N`SrrDuj!!!9's7?9k!W2lsi;N`Nrr^%:!!1(= -nG`K=h>d]is1f`V_"Ia0!WVrn!!.Sbr;Zg^rr2uVrW)lr!;uNj!!E6#!.a_B!!2us!9!hVp\t6/ -rW'q;nG`K=h>dN\rVlkJp&G-rs7#se!Iqo`!!#7_rrD!V!;uisr:U*j!WN*!_"@[-!W2lsi;N`N -rrBk6!!%Mgs7$$gJDL8+!WN*!rq-6m#QN`\!!3,8r;Zg^rr2uVrW)lr!;uKirr2ufo`+smqu6ZS -rW)]m!5SR6!'eL'nG`K=h#RHS!;uKi!Y>=Hr;ZluJGfHJ5Q:Z_i;N`SrrE&k!!@`Ns8;Ni!!E,u -!9!hVp\t6/rVup?`rGQ.!.`l*"$chci:R'O+9-lj!!33$JGfHJ5Q:Z_i;N`SrrE&k!!#7YrrD!T -!!!,urrD!V!;HKn_#=<6&'"Y=rr@T*!!p!C-V_!!33$q"t*l5Q:Z_i;N`RrrD!U!!p!It+I!!39&q"t*l5Q:Z_i;N`RrrDQe!!Er;c]o!9!hV!.XbC -r;Zfua8bZ/!.`Aq!Wi>rr;Zm0s1nO4!'gJ_!9!hVqu6Zor;ZpAs8W)s!!!,rrrBk6!!!&rrrD!V -!!#7Xrr@TJ!6>-/rr@Sq!!39&nGN=g+9-lh!!#7_rrD!V!;lcrrqufs5Q:]]!!!&prrD!V!!!,t -rrD!V!!",8rrBk5!!%Mis7$$gJBn2s#QN`\!!,=aqZ$U\rr2uVrW)fpr;ZhIrr2tKr;cWm!:]sf -!!iB#!9!hV!"\i(!9!eU!'eR)nG`K=cN""Ws1nR5!It+G!!#7_rrD!V!;c]qJGoQIrrBk5!!%NE -rrDin!!!Q+rrD!V!!!8urrDQe!!"+^s7$$gJBn2s+9-li!!3,tqZ$U\rr2uVrW)fp"2Fm:!WE#u -i;EWU5PbrrDim!!!Q)rrTt9!Vu`qi;EZMrrE&s!!!,Bs7$$gJBn2rs8;fq!XJb`qZ$U\rr2uV -rW)corr<%KrVllqr;Zg&q#:Eb!!i?"!:]pe!.XbCr;ZfuaT(c0!.`Dr!Wi>rr;Zm0s1nL3!'gJ_ -!9!hVq>UKb#Q4T%rqufs"8Dfr!.XhE!:]pe!'g5X!.b"JaT(c0!.`Dr!X&Jlr;Zm@s+'tH!'gJ_ -!9!hVnc/Of!!2Ke!;QKm!$Ct8!5SO5!.W,jnG`K=ci=+Ps5^L[rr2uVrW)Kg!5SO5!.XG:!;ucq!!i8u -!:]pe!$B>_nG`K=ci=+hs+(%J!WW)o!!#7_rrD!V!:g'hi;EWU5OSOOrqufs"8Dfqq#(0m&'=k@ -rr@Sr!!,=ar;Zm"s7lEj!'gJ_!9!hVnc&UYr;Zg>mJm+b!!2io!;ucq!!gXGnG`K=ci=)rrqufu -"97le!!#7_rrD!V!:g'hq#(0m&+0AsJGfKBrrE&s!!!,Cs7$$gJC"8ss8;fq!XJb`q>^L[rr2uV -rW)Kg!;ucq!!hok!5SO5!.XbCr;ZfuaoCl1!.`Gs!Wi>rr;Zm0s1nI2!'gJ_!9!hVq>UKb#Q+N$ -rqufs"8Mls!.XeD!9!eU!'g5X!.b"JaoCl1!.`Gs!X&Jlr;Zm@s+'qG!'gJ_!9!hVq>^Hp!.XnG -r;Zfuq>UNc!!i=Hr;ZkJrqQNo5Q:Z_i;N`Qrr_`j -!!iE$!5SO5!.XkFrVuqJq>UHmr;Zg&p\t6_r;Zg>b5^u2!.`Gs![%Gmr;Zlur:pUHm -q>^L[qYpQbqZ$U\c2[;5!.`Jt![%Gmr;Zlur:g6l5Q:Z_i;N`RrrBk5!!!&srrD!U!!#7^rrDup -!!",:rrE&p!!!Q+rrDik!!!PSs7$$gJC4Du5QCZ^!Wi>rp](:Yrr2uVrW)iq!5SO5!!2us!:]pe -!$D1>!;u`p!$D"9q>^KtqYpQnqZ$Tuc2[;5!.`Jt!It+I!!39&nFut`5Q:Z_i;N`Rrr@TI!;lcr -q#(0m&,lM.q"t*l&,?/)JGT^9kc2[;5!.`Mu!Wi>rr;Zm0s1nC0!'gJ_!9!hVqu?Nn -!.XqH!<2os!!E3"!:]md!!i[!5SI3!'ed/nG`K=df9FSs5rr2uVqu?^!p]('i!!E)t!;u]o -!!COHnG`K=df9Durqufu"97lb!!#7_rrD!V!;uisr;-Ho+8c'^!!#7_rrD!V!;uisr;-Ho+8c'g?k!9!_ScN!D6!.`Q!!XJb@r;ZkJrq6pnG`K=e,TO\s+(%J!WW)k!!#7_rrD!V!;uis -r;-Ho+8Z!;i;EWX5QCc!qu?]tp\t6mq>^MFqYpQjqZ$VGciIcs1nO4!!2fnq>^MFqYpQnqZ$VGciCs1nO4!!2fn!.aqH!.XkF!;u]o!.W>pnG`K=e,TN!r;?Ts -#QN`U!!#7_rrD!V!;uisrqcZq5PkB[r;?Tt+92B!qu?^!pAY-.qZ$U\qYpQjqZ$U\ci[!;QEk!'eg0 -nG`K=eGoXOs7#se![%Gmp&G(Wrr2uVrW)lr!<2iq!'g;Zr;Zp1s8V$T!!!,prrDQc!!#7[rrDik -!!#70s7$$gJCOW$"97=Ho`+tVrr2uVrW)iq -!5SO5!!2lp!<2rt!tYG3r;6Np+85^7r;-HoJ,90Fr;-HoJ'\/arr@T#!!33$nGN=g+9-la!!#7_ -rrD!V!;lcri;EWU"8Mlrrr)m"&-)\/qu?^]pAY-jqZ$VGqYpQnqZ$VGcipnG`K= -ec5a^s+(%J!WW)i!!#7_rrD!V!;lcrr;?Tq+8Gj9rr)lt&,uS/_#=<6!VQHmrqc]krrE&q!7(W6 -rr@T#!!+2Ar;Zm"s7l3d!'gJ_!9!hVqu6Zqr;Zg^q#:?nrVup/rr2uVrVup#p&>$kqZ-Hl!<2iq -cN!D6!.`W#!C-S^!!39&nFQ\\5Q:Z_i;N`Qs8;otJ,'$Drr)lt&,uS/nGWCf#PA&o!!!&ps82is -!RC`7rr@T#!!.TIr;Zm(s5Er;Zg"cN!D6!.`Z$!Wi>jr;Zm@s+'_A!'gJ_!9!hV!.XnG"7Q9j#P\5urr)lt&,lP-!!%N@ -rr@TJ!!!,rrr@TJ!!!,Hs7$$gJCac&"97!'gJ_!9!hV!$D(;rr<%Kp\t6m -rVup/rVlrg!!i,q!9!eU!"\l)!9!eU!"[BTnG`K=f)Pj_s+(%J!WW)h!!#7_rrD!V!!!Q+rrMTo -pAY-lrVup/r;QctJ+N[?nGN=e+8Gj9nGN=e+3soUrr@T$!!+2Ar;Zm"s7#U[!'gJ_!9!hV!!hok -!<2rt!"\Gr!;QKm!'g8Y!;QKm!'ed/nG`K=f)Ph9rqufu"97<]r;Zluq!nCb5Q:Z_q#(0m&+9Gtrr)lt -&*s5srVurkrrW0"!6kK4rr@T%!!+2Ar;Zm"s7#RZ!'gJ_!;ucq!!hrl!<2rt!"\Ap!T4L\rrM$g -bl@24!.`]%!C-S^!!39&i:6jJ5Q:Z_rqufs"7H0hrr)lt&#B6prr@T%!!.TIr;Zm(s1n1*!'gG^ -r;Zfumf*:drVup/V#Tra!.`]%!WVrn!!3]2JFW[?5Q1T^JGfK9rrE&t!!!P*s7$$gJCso(!WVZf -!!+2AnGiPRrVll5r;ZhIn,ECerVup/V#Tra!.``&!X&J\r;Zj_rp]sg5Q1T^i;EWU5O\UPrr)lt -&#B6prr@T&!!3E*_#466J,Jg:!'gG^!:]pe!$C\0!<2rt!"Yn*nG`K=f`2'as+(%J!WVrb!!#7^ -rrDim!!!PurrE&t!!!P*s7$$gJCso'+929>!Wi>jnGiPRrVllqr;Zg&n,ECerVup/V#Tra!.``& -!C-S^!!39&i:-dI5Q1T^rqufs"7Q6irr)lt&#B6prr@T&!!.TIr;Zm(s1n.)!'gD]r;Zfun,ECe -rVup/V#Tra!.``&!WVrn!!3]2JFNU>5Q(N]JGfK:rrE&t!!!P*s7$$gJD'u)!WVZf!!+2An,NGQ -r;Qc4r;ZhInG`LfrVup/V#Tra!.`c'!X&J\r;Zj_rpTmf5Q(N]i;EWU5Oe[Qrr)lt&#B6prr@T' -!!3E*_#466J,Jd9!'gD]!:]pe!$C_1!<2rt!"Yn*nG`K=g&M0bs+(%J!WVra!!#7]rrDim!!!Q! -rrE&t!!!P*s7$$gJD'u(+929>!Wi>jn,NGQr;Qcpr;Zg&nG`LfrVup/V#Tra!.`c'!C-S^!!39& -i:$^H5Q(N]rqufs"7ZPqu6Z3r;ZhI -nc&UgrVup/V#Tra!.`f(!X&J\r;Zj_rpKge5PtH\i;EWU5OnaRrr)lt&#B6prr@T(!!3E*_#466 -J,Ja8!'gA\!:]pe!$Cb2!<2rt!"Yn*nG`K=gAh9cs+(%J!WVr`!!#7\rrDim!!!Q"rrE&t!!!P* -s7$$gJD1&)+929>!Wi>jmf3>Pqu6Zor;Zg&nc&UgrVup/V#Tra!.`f(!C-S^!!39&i9pXG5PtH\ -rqufs"7cBkrr)lt&#B6prr@T(!!.TIr;Zm(s1n('!'g>[r;Zfunc&UgrVup/V#Tra!.`f(!WVrn -!!3]2JF,+8u3>nGN=f+91a/!'g>[!5SO5!.XS>!<2rt -!"Yn*nG`K=hZ*X@rVllUr;Zj_rpBad5PkB[i;EWU5P"gSrr)lt&#B6prr@T,!!%NIrrBk5!!.TI -mJm5OqYpQbr;Zg>o)A^hrVup/V#Tra!.`r,r;QbIr;Zluq!J+^5PkB[q#(0m&+]`#rr)lt&#B6p -rr@T-!!!&ts8;p!!WVZW!!#7[rrDuq!!!8prrE&t!!!P*s7$$gJD^D-!WE#urqufu"97^Bn!!2Zj!<2rt!"Yn*nG`K=huEcY -nG*%c&-%1J!!#7Zrr@TJ!:p-irr)lt&#B6prr@T-!!*,iq#CF;s6Tdd5Pb^Qts7#CU!'g;Z!;ucq!!i,q!<2rt!"Yn*nG`K=huEcYnG3+d"97^O^O\rp0Ub5PY6Yi;EWU5P4sUrpToms7$$gJD^D.!V#pc!It%6!!#7YrrDQe!!",5rrE&f!!#6h -s7$$gJD^D.!V#pc!WVr]!!#7YrrDim!!!Q%rrE&f!!"+Hs7$$gJD^D.!V#sd!Wi>jli7#Mq#:?l -r;Zg&o`"pjn,NG!ZN'Fo!.`u-!$VrpKgeJ$]1Err@T-!!*,iqZ$X]r9F=_5PP0XnGN=e+8,X6rpKge5I:CZrr@T-!!*,iqZ$X] -q!.n[5PP0Xq#(0m&,#r&rpKge+1)":rr@T-!!*,iqZ$X]nEU&S5PP0Xr;?Tq#PJ)srpKge&$u<* -rr@T-!!*,iqZ$X]i9L@C5PP0Xrqufs"82ZorpKge#IFI"rr@T-!!*,iqZ$X]_!:t#5PG-U!!!&m -rrE&e!!!,-s7$$gJD^D.!V#sd!C),#!!#7Wrr@TJ!;6?lrpKge!OMgqrr@T-!!*2kqZ$U\l2UfK -pAY-.r;ZhIpAY-lmJsTnnG`K=huEc[nG<1c53`+J5PG*Wi;EWU5PG*WrpBadJ$f7Frr@T-!!*2k -qZ$U[l2UfKpAY-^r;Zg>p&FF[!'djjnG`K=huEc[nG<1c53`+J5PG*Wq#(0m&,#tj!!"+Js7$$g -JD^D."7Z0f!']ZJ!'g2W!;ucq!!i2s!.aM$V -JGfK@rrD!G!!!&,s7$$gJD^D."7Z0f!']ZJ!'g/V!5SO5!.X_B!:]CV[/]Xq!.`u-!<_ig!!#4J -!!#7VrrD!U!!#7WrrDi^!!%MVs7$$gJD^D."7Z0f!']ZJ!'g/V!:]pe!$Cq7!;u6b!'dmknG`K= -huEc[nG<1c53`+J5P>$Vq#(0m&,#tj!!"+Ks7$$gJD^D."7Z0f!']ZJ!'g/V!;ucq!!i2s!5S%' -!"ZL;nG`K=huEc[nG<1c53`+J5P>$Vrqufs"6][ar;?Tq#IXU$rr@T-!!*2kqZ$U[l2UfKo`+ji -!!29_!<2os!!BY/nG`K=huEc[nG<1c53`+J5P4sUJGfK1s8;ot!O_ssrr@T-!!*2kqZ$U[l2UfK -o`"p,r;ZhIkPkO4r;a8*nG`K=huEc[nG<1c53`+J5P4sUi;EWU5Ni%H_#465J%#CHrr@T-!!*2k -qZ$U[l2UfKo`"p\r;Zg>kPkP?r;Zg^[f>js!.`u-!<_ig!!#4J!!#7UrrDim!!!PmrrDQe!!"+L -s7$$gJD^D."7Z0f!']ZJ!'g,U!;ucq!!h]e!;QKm!"ZOkPkP?r;Zg^\,Yst -!.`u-!,"8i,_!!#7SrrD!U!!#7HrrBk5!!%MYs7$$gJA;-b5P"gSnGN=e -+6WY(i;EWU5Iga_rr@Sb!!#7SrrDim!!!PmrrDQe!!"+Ns7$$gJA;-b5P"gSr;?Tq#Nu*eq#(0m -&%MZ/rr@Sb!!#7SrrE&s!!!,arrDuq!!!86s7$$gJA;-b5OndP!!!&_rrE&s!!!,2s7$$gJA;-b -5OnaRJGfK1s8;ot!P&1!rr@Sb!!#7RrrBk5!!%N3rr@TJ!4`'urr@Sb!!#7RrrD!U!!#7HrrBk5 -!!%MZs7$$gJA;-b5OnaRnGN=e+6WY(i;EWU5Ipg`rr@Sb!!#7RrrDim!!!PmrrDQe!!"+Os7$$g -JA;-b5OnaRr;?Tq#Nu*eq#(0m&%V`0rr@Sb!!#7RrrE&s!!!,arrDuq!!!87s7$$gJA;-b5Oe^O -!!!&_rrE&s!!!,3s7$$gJA;-b5Oe[QJGfK1s8;ot!P/7"rr@Sb!!#7QrrBk5!!%N3rr@TJ!4i.! -rr@Sb!!#7QrrD!U!!#7HrrBk5!!%M[s7$$gJA;-b5Oe[QnGN=e+6WY(i;EWU5J$marr@Sb!!#7Q -rrDim!!!PmrrDQe!!"+Ps7$$gJA;-b5Oe[Qr;?Tq#Nu*eq#(0m&%_f1rr@Sb!!#7QrrE&s!!!,a -rrDuq!!!88s7$$gJA;-b5O\XN!!!&_rrE&s!!!,4s7$$gJA;-b5O\UPJGfK1s8;ot!P8=#rr@Sb -!!#7PrrBk5!!%N3rr@TJ!4r4"rr@Sb!!#7PrrD!U!!#7HrrBk5!!%M\s7$$gJA;-b5O\UPnGN=e -+6WY(i;EWU5J-sbrr@Sb!!#7PrrDim!!!PmrrDQe!!"+Qs7$$gJA;-b5O\UPr;?Tq#Nu*eq#(0m -&%hl2rr@Sb!!#7PrrE&s!!!,arrDuq!!!89s7$$gJA;-b5OSRM!!!&_rrE&s!!!,5s7$$gJA;-b -5OSOOJGfK1s8;ot!PAC$rr@Sb!!#7OrrBk5!!%N3rr@TJ!5&:#rr@Sb!!#7OrrD!U!!#7HrrBk5 -!!%M]s7$$gJA;-b5OSOOnGN=e+6WY(i;EWU5J7$crr@Sb!!#7OrrDim!!!PmrrDQe!!"+Rs7$$g -JA;-b5OSOOr;?Tq#Nu*eq#(0m&%qr3rr@Sb!!#7OrrE&s!!!,arrDuq!!!8:s7$$gJA;-b5OJLL -!!!&_rrE&s!!!,6s7$$gJA;-b5OJINJGfK1s8;ot!PJI%rr@Sb!!#7NrrBk5!!%N3rr@TJ!5/@$ -rr@Sb!!#7NrrD!U!!#7HrrBk5!!%M^s7$$gJA;-b5OJINnGN=e+6WY(i;EWU5J@*drr@Sb!!#7N -rrDim!!!PmrrDQe!!"+Ss7$$gJA;-b5OJINr;?Tq#Nu*eq#(0m&&rr@Sb!!#7NrrE&s!!!,a -rrDuq!!!8;s7$$gJA;-b5OAFK!!!&_rrE&s!!!,7s7$$gJA;-b5OACMJGfK1s8;ot!PSO&rr@Sb -!!#7MrrBk5!!%N3rr@TJ!58F%rr@Sb!!#7MrrD!U!!#7HrrBk5!!%M_s7$$gJA;-b5OACMnFln_ -#OVNki;EWU5JI0err@Sb!!#7MrrDig!!!8krrDQe!!*o=^]3g'!._ib!'fiM!;uQk!!hok!;QEk -!'e:!nG`K=^]4@!m/I(bpAb0umJd1aqZ$U,_#Np(!._ib!'ffLpAb0umJd1cqZ$Tu_#Np(!._ib -!'ffL!.ahE!!hljq>e>2nG`K=^]4@!li-t#p](:!m/I'9qZ$VG_>j$)!._ib!'ffL!9!VP!!hlj -!5SI3!'e="nG`K=^]4@!li-tSp](:!m/I(DqZ$U<_>j$)!._ib!'ffL!;Qj$)!._ib!'ffL!<2`n!!hlj!;u]o!!C(;nG`K=^]4@! -lMpVZ!!hlj!<2iq!!0q9nG`K=^]4@!lMgj7q#CC"li6e]_>j$)!._ib!'fcK!5SC1!!hii!.aqH -_>j$)!._ib!'fcK!9!YQ!!hii!5SI3!.VlcnG`K=^]4@!lMgkRq#CC"li-tCqZ$VG_Z0-*!._ib -!'fcK!;Q?i!!hii!:]jc!'e@#nG`K=^]4@!lMgk^q#CC"li-t[qZ$U\_Z0-*!._ib!'fcK!<2co -!!hii!;u]o!$B)XnG`K=^]4@!l2UPZ!!hii!<2iq!$B)XnG`K=^]4@!l2La6q>^L#lMp_]!$B)X -nG`K=^]4@!l2Lb!q>^L#lMp_]!$B)XnG`K=^]4@!l2LbAq>^L#li-taqZ$U,_Z0-*!._ib!'f`J -!:]gb!!hii!<2iq!"ZsHnG`K=^]4@!l2LbYq>^L#li-taqZ$U,_Z0-*!._ib!'f`J!;uZn!!hii -!<2iq!"ZsHnG`K=^]4@!l2Lb_q>^L#li-taqZ$U,_Z0-*!._ib!'f]Iq>^L#li-taqZ$U,_Z0-* -!._ib!'f]I!.aqH!!hii!<2iq!"ZsHnG`K=^]4@!kl1XuqZ$U$li-taqZ$U,_Z0-*!._ib!'f]I -!9!_S!!hii!<2iq!"ZsHnG`K=^]4@!kl1YPqZ$U$lMp_]!$B)XnG`K=^]4@!kl1YXqZ$U$lMp_] -!$B)XnG`K=^]4@!kl1Y\qZ$U$lMp_]!$B)XnG`K=^]4@!kl1Y^qZ$U$lMp_]!$B)XnG`K=^]4@! -kl1Y^qZ$U$lMgj7qu?^]_Z0-*!._ib!'f]I!<2iq!!hfh!.atI!'e@#nG`K=^]4@!kl1Y^qZ$U$ -lMgk"qu?_H_Z0-*!._ib!'f]I!<2iq!!hfh!5SL4!.VlcnG`K=^]4@!kl1Y^qZ$U$lMgkBquFS5 -nG`K=^]4@!kl1Y^qZ$U$lMgkBquFS5nG`K=^]4@!kl1Y^qZ$U$lMgkRr;Zfu_>j$)!._ib!'f]I -!<2iq!!hfh!;QKm!!C(;nG`K=^]4@!kl1Y^qZ$U$lMgk^r;Zg&_>j$)!._ib!'f]I!<2iq!!hfh -!<2os!"ZpGnG`K=^]4@!kl1Y^qZ$U$l2U\^!$B&WnG`K=^]4@!kl1Y^qZ$U$l2La6rVup__>j$) -!._ib!'f]I!<2iq!!hcg!5SR6!.VibnG`K=^]4@!kl1Y^qZ$U$l2LbArW'b6nG`K=^]4@!kl1Y^ -qZ$U$l2Lk\!!!,:s7$$gJA;-b5Nr+IrqcZq#O26jrVup/_#Np(!._ib!'f]I!<2iq!!h`f!e:88 -_#Np(!._ib!'f]I!<2iq!!h`f!Vcc3s7$$gJA;-b5D/ues0)HRs0)HRs0)HRs0)HRs0)HRs0)HR -s0)HRs0)HRs0)HRs0)HRs0)HRs0)HRs0)HRs0)HRs0)HRs0)HRs0)HRs0)HRs0)HRs0)HRs0)HR -s0)HRs0)HRs0)HRs0)HRs0)HRs0)HRs0)HRs0)HRs0)HRs0)HRs0)HRs0)HRs0)HRs0)HRs0)HR -s0)HRs0)HRs0)HRs0)HRs0)HRs0)HRs0)HRs0)HRs0)HRs0)HRs0)HRs0)HRs0)HRs0)HRs0)HR -s0)HRs0)HRs0)HRs0)HRs0)HRs0)HRs0)HRs0)HRs0)HRs0)HRs0)HRs0)HRs0)HRs0)HRs0)HR -s0)HRs0)HRs0)HRs0)HRs0)HRs0)HRs0)HRs0)HRs0)HRs0)HRs0)HQ~> -%%EndData -showpage -%%Trailer -end -%%EOF Index: trunk/doc/thermal.pdf =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: trunk/doc/thermal.pdf =================================================================== --- trunk/doc/thermal.pdf (revision 1036) +++ trunk/doc/thermal.pdf (nonexistent) Property changes on: trunk/doc/thermal.pdf ___________________________________________________________________ Deleted: svn:mime-type ## -1 +0,0 ## -application/octet-stream \ No newline at end of property Index: trunk/doc/refcard.tex =================================================================== --- trunk/doc/refcard.tex (revision 1036) +++ trunk/doc/refcard.tex (nonexistent) @@ -1,258 +0,0 @@ -% $Id$ -% -% COPYRIGHT -% -% PCB, interactive printed circuit board design -% Copyright (C) 1994, 1995 Thomas Nau -% Copyright (C) 1998, 1999, 2000, 2001 harry eaton -% Copyright (C) 2009 Chitlesh Goorah -% -% This program is free software; you can redistribute it and/or modify -% it under the terms of the GNU General Public License as published by -% the Free Software Foundation; either version 2 of the License, or -% (at your option) any later version. -% -% This program is distributed in the hope that it will be useful, -% but WITHOUT ANY WARRANTY; without even the implied warranty of -% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -% GNU General Public License for more details. -% -% You should have received a copy of the GNU General Public License -% along with this program; if not, write to the Free Software -% Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -% -% Contact addresses for paper mail and Email: -% Thomas Nau, Schlehenweg 15, 88471 Baustetten, Germany -% Thomas.Nau@rz.uni-ulm.de - - -\documentclass[11pt,landscape]{article} -\usepackage{multicol} -\usepackage{calc} -\usepackage{ifthen} -\usepackage[landscape,left=2.5cm,top=2cm,right=2cm,bottom=2cm,nohead]{geometry} - -% Turn off header and footer -\pagestyle{empty} - -% Redefine section commands to use less space -\makeatletter -\renewcommand{\section}{\@startsection{section}{1}{0mm}% - {-1ex plus -.5ex minus -.2ex}% - {0.5ex plus .2ex}%x - {\normalfont\large\bfseries}} -\renewcommand{\subsection}{\@startsection{subsection}{2}{0mm}% - {-1explus -.5ex minus -.2ex}% - {0.5ex plus .2ex}% - {\normalfont\normalsize\bfseries}} -\renewcommand{\subsubsection}{\@startsection{subsubsection}{3}{0mm}% - {-1ex plus -.5ex minus -.2ex}% - {1ex plus .2ex}% - {\normalfont\small\bfseries}} -\makeatother - -% Define BibTeX command -\def\BibTeX{{\rm B\kern-.05em{\sc i\kern-.025em b}\kern-.08em - T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}} - -% Don't print section numbers -\setcounter{secnumdepth}{0} - - -\setlength{\parindent}{0pt} -\setlength{\parskip}{0pt plus 0.5ex} - -%------------------------------------------------------------------ -% some new commands to define the modifier keys -% -\newcommand{\Shift}{{\it [S]}} -\newcommand{\Ctrl}{{\it [C]}} -\newcommand{\Mod}{{\it [M]}} -\newcommand{\Btn}{{\it Btn}} -\newcommand{\Fun}{{\it F}} - -\begin{document} -\raggedright -\footnotesize -\begin{multicols}{3} - - -% multicol parameters -% These lengths are set only within the two main columns -%\setlength{\columnseprule}{0.25pt} -\setlength{\premulticols}{1pt} -\setlength{\postmulticols}{1pt} -\setlength{\multicolsep}{1pt} -\setlength{\columnsep}{2pt} - -\begin{center} - \Large{\textbf{PCB Command reference}} - \footnote{http://pcb.gpleda.org/index.html} - \footnote{Obviously \Shift, \Ctrl, \Mod, \Fun \space and \Btn \space mean the shift, - control, modifier1 (BTNMOD for buttons), function key and mouse button.} \\ -\end{center} - -\section{Misc operations} -\begin{tabular}{@{}ll@{}} -backspace & remove object \\ -\Shift\Ctrl\Btn1 & remove object \\ -scroll wheel & vertical pan \\ -\Shift scroll wheel & horizontal pan \\ -\Btn1 & current mode action\\ -u & undo operation \\ -\Shift r & redo operation \\ -\Shift\Ctrl u & clear undo-list \\ -tab & switch viewing side \\ -cursor key & move crosshair 1 grid\\ -\Shift cursor key! & move crosshair 10 grid\\ -\end{tabular} - - -\section{Connections} -\begin{tabular}{@{}ll@{}} -\Shift f & reset found connections \\ -f & find connections \\ -\Shift backspace & remove connections \\ -\end{tabular} - - -\section{User (:) commands} -\begin{tabular}{@{}ll@{}} -:DRC() & check layout for rule violations \\ -:l [file] & load data file \\ -:le [file] & load element to buffer \\ -:m [file] & load layout to buffer \\ -:q & quit application \\ -:rn [file] & load netlist \\ -:s [file] & save data as file \\ -\end{tabular} - -\section{Display} -\begin{tabular}{@{}ll@{}} -c & center display \\ -g & increase grid spacing \\ -\Shift g & decrease grid spacing \\ -\Ctrl m & mark location \\ -r & clear and redraw output \\ -z & zoom in \\ -\Shift z & zoom out \\ -v & zoom extents \\ -\Shift\Btn3 & temporary zoom extents \\ -\end{tabular} - - -\section{Selections} -\begin{tabular}{@{}ll@{}} -\Btn2 & select/deselect object \\ -\Shift\Btn2 & toggle object to selection \\ -drag \Btn2 & select only objects in box \\ -drag \Shift\Btn2 & add box to selection \\ -\Shift m & move selected to current layer \\ -\end{tabular} - - -\section{Copy and move} -\begin{tabular}{@{}ll@{}} -drag \Btn2 & move object or selection\\ -drag \Mod\Btn2 & copy object \\ -drag \Shift\Mod\Btn2 & override rubberband \& move \\ -m & move to current layer \\ -\end{tabular} - - -\section{Pastebuffer} -\begin{tabular}{@{}ll@{}} -\Ctrl x & copy selected objects to buffer \\ - & and enter pastebuffer mode \\ -\Shift \Ctrl x & cut selected objects to buffer \\ - & and enter pastebuffer mode \\ -\Btn1 & in pastebuffer mode copy to layout \\ -\Shift \Fun7 & rotate 90 degree cc \\ -\Ctrl 1$\cdots$5 & select buffer \# 1$\cdots$5 \\ -\end{tabular} - - -\section{Sizing} -\begin{tabular}{@{}ll@{}} -s & increase size of TLAPV\footnotemark\\ -\Shift s & decrease size of TLAPV\\ -\Mod s & increase drill size of PV \\ -\Shift\Mod s & decrease drill size of PV \\ -k & increase clearance of LAPV\\ -\Shift\ k & decrease clearance of LAPV\\ -\end{tabular} -\footnotetext{TLAPV: text, line, arc, pin or via} - - -\section{Element} -\begin{tabular}{@{}ll@{}} -d & display pinout \\ -\Shift d & open pinout window \\ -h & hide/show element name \\ -n & change element name \\ -\end{tabular} - - -\section{Pin/pad} -\begin{tabular}{@{}ll@{}} -n & change name \\ -q & toggle square flag \\ -\end{tabular} - - -\section{Via} -\begin{tabular}{@{}ll@{}} -\Fun1 & enter via-mode \\ -\Ctrl v & increase initial size \\ -\Shift \Ctrl v & decrease initial size \\ -\Mod v & inc. initial drilling hole \\ -\Shift\Mod v & dec. initial drilling hole \\ -\Ctrl h & convert via to mounting hole \\ -\end{tabular} - - -\section{Lines and arcs} -\begin{tabular}{@{}ll@{}} -\Fun2 & enter line mode \\ -\Fun3 & enter arc mode \\ -l & increase initial line size \\ -\Shift l & decrease initial line size \\ -period & toggle 45 degree enforcement \\ -/ & cycle multiline mode \\ -\Shift & override multiline mode \\ -\end{tabular} - - -\section{Polygon} -\begin{tabular}{@{}ll@{}} -\Fun5 & enter rectangle-mode \\ -\Fun6 & enter polygon-mode \\ -\Shift p & close path \\ -insert & enter insert point mode \\ -\end{tabular} - - -\section{Text} -\begin{tabular}{@{}ll@{}} -\Fun4 & enter text-mode \\ -n & edit string \\ -t & increase initial text size \\ -\Shift t & decrease initial text size \\ -\end{tabular} - - -\section{Rats nest} -\begin{tabular}{@{}ll@{}} -w & add all rats \\ -\Shift w & add rats to selected pins/pads \\ -e & delete all rats \\ -\Shift e & delete selected rats \\ -o & optimize all rats \\ -\Shift o & optimize selected rats \\ -\end{tabular} - - -\end{multicols} - - -\end{document} Index: trunk/doc/wire_size.tab =================================================================== --- trunk/doc/wire_size.tab (revision 1036) +++ trunk/doc/wire_size.tab (nonexistent) @@ -1,102 +0,0 @@ -# $Id$ -# - -97 .0059 -96 .0063 -95 .0067 -94 .0071 -93 .0075 -92 .0079 -91 .0083 -90 .0087 -89 .0091 -88 .0095 -87 .0100 -86 .0105 -85 .0110 -84 .0115 -83 .0120 -82 .0125 -81 .0130 -80 .0135 -79 .0145 -78 .0160 -77 .0180 -76 .0200 -75 .0210 -74 .0225 -73 .0240 -72 .0250 -71 .0260 -70 .0280 -69 .0292 -68 .0310 -67 .0320 -66 .0330 -65 .0350 -64 .0360 -63 .0370 -62 .0380 -61 .0390 -60 .0400 -59 .0410 -58 .0420 -57 .0430 -56 .0465 -55 .0520 -54 .0550 -53 .0595 -52 .0635 -51 .0670 -50 .0700 -49 .0730 -48 .0760 -47 .0785 -46 .0810 -45 .0820 -44 .0860 -43 .0890 -42 .0935 -41 .0960 -40 .0980 -39 .0995 -38 .1015 -37 .1040 -36 .1065 -35 .1100 -34 .1110 -33 .1130 -32 .1160 -31 .1200 -30 .1285 -29 .1360 -28 .1405 -27 .1440 -26 .1470 -25 .1495 -24 .1520 -23 .1540 -22 .1570 -21 .1590 -20 .1610 -19 .1660 -18 .1695 -17 .1730 -16 .1770 -15 .1800 -14 .1820 -13 .1850 -12 .1890 -11 .1910 -10 .1935 -9 .1960 -8 .1990 -7 .2010 -6 .2040 -5 .2055 -4 .2090 -3 .2130 -2 .2210 -1 .2280 - - Index: trunk/doc/puller.pcb =================================================================== --- trunk/doc/puller.pcb (revision 1036) +++ trunk/doc/puller.pcb (nonexistent) @@ -1,848 +0,0 @@ -# release: pcb 1.99s - -PCB["" 110000 30000] - -Grid[10000.00000000 0 0 1] -Cursor[0 0 0.000000] -Thermal[0.500000] -DRC[1000 1000 1000 1000 1500 1000] -Flags(0x0000000000001c40) -Groups("1,c:2,s:3:4:5:6:7:8") -Styles["Signal,1000,3600,2000,1000:Power,2500,6000,3500,1000:Fat,5000,10000,5000,1000:Skinny,600,2402,1181,600"] - -Symbol[' ' 1800] -( -) -Symbol['!' 1200] -( - SymbolLine[0 4500 0 5000 800] - SymbolLine[0 1000 0 3500 800] -) -Symbol['"' 1200] -( - SymbolLine[0 1000 0 2000 800] - SymbolLine[1000 1000 1000 2000 800] -) -Symbol['#' 1200] -( - SymbolLine[0 3500 2000 3500 800] - SymbolLine[0 2500 2000 2500 800] - SymbolLine[1500 2000 1500 4000 800] - SymbolLine[500 2000 500 4000 800] -) -Symbol['$' 1200] -( - SymbolLine[1500 1500 2000 2000 800] - SymbolLine[500 1500 1500 1500 800] - SymbolLine[0 2000 500 1500 800] - SymbolLine[0 2000 0 2500 800] - SymbolLine[0 2500 500 3000 800] - SymbolLine[500 3000 1500 3000 800] - SymbolLine[1500 3000 2000 3500 800] - SymbolLine[2000 3500 2000 4000 800] - SymbolLine[1500 4500 2000 4000 800] - SymbolLine[500 4500 1500 4500 800] - SymbolLine[0 4000 500 4500 800] - SymbolLine[1000 1000 1000 5000 800] -) -Symbol['%' 1200] -( - SymbolLine[0 1500 0 2000 800] - SymbolLine[0 1500 500 1000 800] - SymbolLine[500 1000 1000 1000 800] - SymbolLine[1000 1000 1500 1500 800] - SymbolLine[1500 1500 1500 2000 800] - SymbolLine[1000 2500 1500 2000 800] - SymbolLine[500 2500 1000 2500 800] - SymbolLine[0 2000 500 2500 800] - SymbolLine[0 5000 4000 1000 800] - SymbolLine[3500 5000 4000 4500 800] - SymbolLine[4000 4000 4000 4500 800] - SymbolLine[3500 3500 4000 4000 800] - SymbolLine[3000 3500 3500 3500 800] - SymbolLine[2500 4000 3000 3500 800] - SymbolLine[2500 4000 2500 4500 800] - SymbolLine[2500 4500 3000 5000 800] - SymbolLine[3000 5000 3500 5000 800] -) -Symbol['&' 1200] -( - SymbolLine[0 4500 500 5000 800] - SymbolLine[0 1500 0 2500 800] - SymbolLine[0 1500 500 1000 800] - SymbolLine[0 3500 1500 2000 800] - SymbolLine[500 5000 1000 5000 800] - SymbolLine[1000 5000 2000 4000 800] - SymbolLine[0 2500 2500 5000 800] - SymbolLine[500 1000 1000 1000 800] - SymbolLine[1000 1000 1500 1500 800] - SymbolLine[1500 1500 1500 2000 800] - SymbolLine[0 3500 0 4500 800] -) -Symbol[''' 1200] -( - SymbolLine[0 2000 1000 1000 800] -) -Symbol['(' 1200] -( - SymbolLine[0 4500 500 5000 800] - SymbolLine[0 1500 500 1000 800] - SymbolLine[0 1500 0 4500 800] -) -Symbol[')' 1200] -( - SymbolLine[0 1000 500 1500 800] - SymbolLine[500 1500 500 4500 800] - SymbolLine[0 5000 500 4500 800] -) -Symbol['*' 1200] -( - SymbolLine[0 2000 2000 4000 800] - SymbolLine[0 4000 2000 2000 800] - SymbolLine[0 3000 2000 3000 800] - SymbolLine[1000 2000 1000 4000 800] -) -Symbol['+' 1200] -( - SymbolLine[0 3000 2000 3000 800] - SymbolLine[1000 2000 1000 4000 800] -) -Symbol[',' 1200] -( - SymbolLine[0 6000 1000 5000 800] -) -Symbol['-' 1200] -( - SymbolLine[0 3000 2000 3000 800] -) -Symbol['.' 1200] -( - SymbolLine[0 5000 500 5000 800] -) -Symbol['/' 1200] -( - SymbolLine[0 4500 3000 1500 800] -) -Symbol['0' 1200] -( - SymbolLine[0 4500 500 5000 800] - SymbolLine[0 1500 0 4500 800] - SymbolLine[0 1500 500 1000 800] - SymbolLine[500 1000 1500 1000 800] - SymbolLine[1500 1000 2000 1500 800] - SymbolLine[2000 1500 2000 4500 800] - SymbolLine[1500 5000 2000 4500 800] - SymbolLine[500 5000 1500 5000 800] - SymbolLine[0 4000 2000 2000 800] -) -Symbol['1' 1200] -( - SymbolLine[500 5000 1500 5000 800] - SymbolLine[1000 1000 1000 5000 800] - SymbolLine[0 2000 1000 1000 800] -) -Symbol['2' 1200] -( - SymbolLine[0 1500 500 1000 800] - SymbolLine[500 1000 2000 1000 800] - SymbolLine[2000 1000 2500 1500 800] - SymbolLine[2500 1500 2500 2500 800] - SymbolLine[0 5000 2500 2500 800] - SymbolLine[0 5000 2500 5000 800] -) -Symbol['3' 1200] -( - SymbolLine[0 1500 500 1000 800] - SymbolLine[500 1000 1500 1000 800] - SymbolLine[1500 1000 2000 1500 800] - SymbolLine[2000 1500 2000 4500 800] - SymbolLine[1500 5000 2000 4500 800] - SymbolLine[500 5000 1500 5000 800] - SymbolLine[0 4500 500 5000 800] - SymbolLine[500 3000 2000 3000 800] -) -Symbol['4' 1200] -( - SymbolLine[0 3000 2000 1000 800] - SymbolLine[0 3000 2500 3000 800] - SymbolLine[2000 1000 2000 5000 800] -) -Symbol['5' 1200] -( - SymbolLine[0 1000 2000 1000 800] - SymbolLine[0 1000 0 3000 800] - SymbolLine[0 3000 500 2500 800] - SymbolLine[500 2500 1500 2500 800] - SymbolLine[1500 2500 2000 3000 800] - SymbolLine[2000 3000 2000 4500 800] - SymbolLine[1500 5000 2000 4500 800] - SymbolLine[500 5000 1500 5000 800] - SymbolLine[0 4500 500 5000 800] -) -Symbol['6' 1200] -( - SymbolLine[1500 1000 2000 1500 800] - SymbolLine[500 1000 1500 1000 800] - SymbolLine[0 1500 500 1000 800] - SymbolLine[0 1500 0 4500 800] - SymbolLine[0 4500 500 5000 800] - SymbolLine[1500 3000 2000 3500 800] - SymbolLine[0 3000 1500 3000 800] - SymbolLine[500 5000 1500 5000 800] - SymbolLine[1500 5000 2000 4500 800] - SymbolLine[2000 3500 2000 4500 800] -) -Symbol['7' 1200] -( - SymbolLine[0 5000 2500 2500 800] - SymbolLine[2500 1000 2500 2500 800] - SymbolLine[0 1000 2500 1000 800] -) -Symbol['8' 1200] -( - SymbolLine[0 4500 500 5000 800] - SymbolLine[0 3500 0 4500 800] - SymbolLine[0 3500 500 3000 800] - SymbolLine[500 3000 1500 3000 800] - SymbolLine[1500 3000 2000 3500 800] - SymbolLine[2000 3500 2000 4500 800] - SymbolLine[1500 5000 2000 4500 800] - SymbolLine[500 5000 1500 5000 800] - SymbolLine[0 2500 500 3000 800] - SymbolLine[0 1500 0 2500 800] - SymbolLine[0 1500 500 1000 800] - SymbolLine[500 1000 1500 1000 800] - SymbolLine[1500 1000 2000 1500 800] - SymbolLine[2000 1500 2000 2500 800] - SymbolLine[1500 3000 2000 2500 800] -) -Symbol['9' 1200] -( - SymbolLine[0 5000 2000 3000 800] - SymbolLine[2000 1500 2000 3000 800] - SymbolLine[1500 1000 2000 1500 800] - SymbolLine[500 1000 1500 1000 800] - SymbolLine[0 1500 500 1000 800] - SymbolLine[0 1500 0 2500 800] - SymbolLine[0 2500 500 3000 800] - SymbolLine[500 3000 2000 3000 800] -) -Symbol[':' 1200] -( - SymbolLine[0 2500 500 2500 800] - SymbolLine[0 3500 500 3500 800] -) -Symbol[';' 1200] -( - SymbolLine[0 5000 1000 4000 800] - SymbolLine[1000 2500 1000 3000 800] -) -Symbol['<' 1200] -( - SymbolLine[0 3000 1000 2000 800] - SymbolLine[0 3000 1000 4000 800] -) -Symbol['=' 1200] -( - SymbolLine[0 2500 2000 2500 800] - SymbolLine[0 3500 2000 3500 800] -) -Symbol['>' 1200] -( - SymbolLine[0 2000 1000 3000 800] - SymbolLine[0 4000 1000 3000 800] -) -Symbol['?' 1200] -( - SymbolLine[1000 3000 1000 3500 800] - SymbolLine[1000 4500 1000 5000 800] - SymbolLine[0 1500 0 2000 800] - SymbolLine[0 1500 500 1000 800] - SymbolLine[500 1000 1500 1000 800] - SymbolLine[1500 1000 2000 1500 800] - SymbolLine[2000 1500 2000 2000 800] - SymbolLine[1000 3000 2000 2000 800] -) -Symbol['@' 1200] -( - SymbolLine[0 1000 0 4000 800] - SymbolLine[0 4000 1000 5000 800] - SymbolLine[1000 5000 4000 5000 800] - SymbolLine[5000 3500 5000 1000 800] - SymbolLine[5000 1000 4000 0 800] - SymbolLine[4000 0 1000 0 800] - SymbolLine[1000 0 0 1000 800] - SymbolLine[1500 2000 1500 3000 800] - SymbolLine[1500 3000 2000 3500 800] - SymbolLine[2000 3500 3000 3500 800] - SymbolLine[3000 3500 3500 3000 800] - SymbolLine[3500 3000 4000 3500 800] - SymbolLine[3500 3000 3500 1500 800] - SymbolLine[3500 2000 3000 1500 800] - SymbolLine[2000 1500 3000 1500 800] - SymbolLine[2000 1500 1500 2000 800] - SymbolLine[4000 3500 5000 3500 800] -) -Symbol['A' 1200] -( - SymbolLine[0 1500 0 5000 800] - SymbolLine[0 1500 500 1000 800] - SymbolLine[500 1000 2000 1000 800] - SymbolLine[2000 1000 2500 1500 800] - SymbolLine[2500 1500 2500 5000 800] - SymbolLine[0 3000 2500 3000 800] -) -Symbol['B' 1200] -( - SymbolLine[0 5000 2000 5000 800] - SymbolLine[2000 5000 2500 4500 800] - SymbolLine[2500 3500 2500 4500 800] - SymbolLine[2000 3000 2500 3500 800] - SymbolLine[500 3000 2000 3000 800] - SymbolLine[500 1000 500 5000 800] - SymbolLine[0 1000 2000 1000 800] - SymbolLine[2000 1000 2500 1500 800] - SymbolLine[2500 1500 2500 2500 800] - SymbolLine[2000 3000 2500 2500 800] -) -Symbol['C' 1200] -( - SymbolLine[500 5000 2000 5000 800] - SymbolLine[0 4500 500 5000 800] - SymbolLine[0 1500 0 4500 800] - SymbolLine[0 1500 500 1000 800] - SymbolLine[500 1000 2000 1000 800] -) -Symbol['D' 1200] -( - SymbolLine[500 1000 500 5000 800] - SymbolLine[2000 1000 2500 1500 800] - SymbolLine[2500 1500 2500 4500 800] - SymbolLine[2000 5000 2500 4500 800] - SymbolLine[0 5000 2000 5000 800] - SymbolLine[0 1000 2000 1000 800] -) -Symbol['E' 1200] -( - SymbolLine[0 3000 1500 3000 800] - SymbolLine[0 5000 2000 5000 800] - SymbolLine[0 1000 0 5000 800] - SymbolLine[0 1000 2000 1000 800] -) -Symbol['F' 1200] -( - SymbolLine[0 1000 0 5000 800] - SymbolLine[0 1000 2000 1000 800] - SymbolLine[0 3000 1500 3000 800] -) -Symbol['G' 1200] -( - SymbolLine[2000 1000 2500 1500 800] - SymbolLine[500 1000 2000 1000 800] - SymbolLine[0 1500 500 1000 800] - SymbolLine[0 1500 0 4500 800] - SymbolLine[0 4500 500 5000 800] - SymbolLine[500 5000 2000 5000 800] - SymbolLine[2000 5000 2500 4500 800] - SymbolLine[2500 3500 2500 4500 800] - SymbolLine[2000 3000 2500 3500 800] - SymbolLine[1000 3000 2000 3000 800] -) -Symbol['H' 1200] -( - SymbolLine[0 1000 0 5000 800] - SymbolLine[2500 1000 2500 5000 800] - SymbolLine[0 3000 2500 3000 800] -) -Symbol['I' 1200] -( - SymbolLine[0 1000 1000 1000 800] - SymbolLine[500 1000 500 5000 800] - SymbolLine[0 5000 1000 5000 800] -) -Symbol['J' 1200] -( - SymbolLine[0 1000 1500 1000 800] - SymbolLine[1500 1000 1500 4500 800] - SymbolLine[1000 5000 1500 4500 800] - SymbolLine[500 5000 1000 5000 800] - SymbolLine[0 4500 500 5000 800] -) -Symbol['K' 1200] -( - SymbolLine[0 1000 0 5000 800] - SymbolLine[0 3000 2000 1000 800] - SymbolLine[0 3000 2000 5000 800] -) -Symbol['L' 1200] -( - SymbolLine[0 1000 0 5000 800] - SymbolLine[0 5000 2000 5000 800] -) -Symbol['M' 1200] -( - SymbolLine[0 1000 0 5000 800] - SymbolLine[0 1000 1500 2500 800] - SymbolLine[1500 2500 3000 1000 800] - SymbolLine[3000 1000 3000 5000 800] -) -Symbol['N' 1200] -( - SymbolLine[0 1000 0 5000 800] - SymbolLine[0 1000 0 1500 800] - SymbolLine[0 1500 2500 4000 800] - SymbolLine[2500 1000 2500 5000 800] -) -Symbol['O' 1200] -( - SymbolLine[0 1500 0 4500 800] - SymbolLine[0 1500 500 1000 800] - SymbolLine[500 1000 1500 1000 800] - SymbolLine[1500 1000 2000 1500 800] - SymbolLine[2000 1500 2000 4500 800] - SymbolLine[1500 5000 2000 4500 800] - SymbolLine[500 5000 1500 5000 800] - SymbolLine[0 4500 500 5000 800] -) -Symbol['P' 1200] -( - SymbolLine[500 1000 500 5000 800] - SymbolLine[0 1000 2000 1000 800] - SymbolLine[2000 1000 2500 1500 800] - SymbolLine[2500 1500 2500 2500 800] - SymbolLine[2000 3000 2500 2500 800] - SymbolLine[500 3000 2000 3000 800] -) -Symbol['Q' 1200] -( - SymbolLine[0 1500 0 4500 800] - SymbolLine[0 1500 500 1000 800] - SymbolLine[500 1000 1500 1000 800] - SymbolLine[1500 1000 2000 1500 800] - SymbolLine[2000 1500 2000 4500 800] - SymbolLine[1500 5000 2000 4500 800] - SymbolLine[500 5000 1500 5000 800] - SymbolLine[0 4500 500 5000 800] - SymbolLine[1000 4000 2000 5000 800] -) -Symbol['R' 1200] -( - SymbolLine[0 1000 2000 1000 800] - SymbolLine[2000 1000 2500 1500 800] - SymbolLine[2500 1500 2500 2500 800] - SymbolLine[2000 3000 2500 2500 800] - SymbolLine[500 3000 2000 3000 800] - SymbolLine[500 1000 500 5000 800] - SymbolLine[500 3000 2500 5000 800] -) -Symbol['S' 1200] -( - SymbolLine[2000 1000 2500 1500 800] - SymbolLine[500 1000 2000 1000 800] - SymbolLine[0 1500 500 1000 800] - SymbolLine[0 1500 0 2500 800] - SymbolLine[0 2500 500 3000 800] - SymbolLine[500 3000 2000 3000 800] - SymbolLine[2000 3000 2500 3500 800] - SymbolLine[2500 3500 2500 4500 800] - SymbolLine[2000 5000 2500 4500 800] - SymbolLine[500 5000 2000 5000 800] - SymbolLine[0 4500 500 5000 800] -) -Symbol['T' 1200] -( - SymbolLine[0 1000 2000 1000 800] - SymbolLine[1000 1000 1000 5000 800] -) -Symbol['U' 1200] -( - SymbolLine[0 1000 0 4500 800] - SymbolLine[0 4500 500 5000 800] - SymbolLine[500 5000 1500 5000 800] - SymbolLine[1500 5000 2000 4500 800] - SymbolLine[2000 1000 2000 4500 800] -) -Symbol['V' 1200] -( - SymbolLine[0 1000 0 4000 800] - SymbolLine[0 4000 1000 5000 800] - SymbolLine[1000 5000 2000 4000 800] - SymbolLine[2000 1000 2000 4000 800] -) -Symbol['W' 1200] -( - SymbolLine[0 1000 0 5000 800] - SymbolLine[0 5000 1500 3500 800] - SymbolLine[1500 3500 3000 5000 800] - SymbolLine[3000 1000 3000 5000 800] -) -Symbol['X' 1200] -( - SymbolLine[0 1000 0 1500 800] - SymbolLine[0 1500 2500 4000 800] - SymbolLine[2500 4000 2500 5000 800] - SymbolLine[0 4000 0 5000 800] - SymbolLine[0 4000 2500 1500 800] - SymbolLine[2500 1000 2500 1500 800] -) -Symbol['Y' 1200] -( - SymbolLine[0 1000 0 1500 800] - SymbolLine[0 1500 1000 2500 800] - SymbolLine[1000 2500 2000 1500 800] - SymbolLine[2000 1000 2000 1500 800] - SymbolLine[1000 2500 1000 5000 800] -) -Symbol['Z' 1200] -( - SymbolLine[0 1000 2500 1000 800] - SymbolLine[2500 1000 2500 1500 800] - SymbolLine[0 4000 2500 1500 800] - SymbolLine[0 4000 0 5000 800] - SymbolLine[0 5000 2500 5000 800] -) -Symbol['[' 1200] -( - SymbolLine[0 1000 500 1000 800] - SymbolLine[0 1000 0 5000 800] - SymbolLine[0 5000 500 5000 800] -) -Symbol['\' 1200] -( - SymbolLine[0 1500 3000 4500 800] -) -Symbol[']' 1200] -( - SymbolLine[0 1000 500 1000 800] - SymbolLine[500 1000 500 5000 800] - SymbolLine[0 5000 500 5000 800] -) -Symbol['^' 1200] -( - SymbolLine[0 1500 500 1000 800] - SymbolLine[500 1000 1000 1500 800] -) -Symbol['_' 1200] -( - SymbolLine[0 5000 2000 5000 800] -) -Symbol['a' 1200] -( - SymbolLine[1500 3000 2000 3500 800] - SymbolLine[500 3000 1500 3000 800] - SymbolLine[0 3500 500 3000 800] - SymbolLine[0 3500 0 4500 800] - SymbolLine[0 4500 500 5000 800] - SymbolLine[2000 3000 2000 4500 800] - SymbolLine[2000 4500 2500 5000 800] - SymbolLine[500 5000 1500 5000 800] - SymbolLine[1500 5000 2000 4500 800] -) -Symbol['b' 1200] -( - SymbolLine[0 1000 0 5000 800] - SymbolLine[0 4500 500 5000 800] - SymbolLine[500 5000 1500 5000 800] - SymbolLine[1500 5000 2000 4500 800] - SymbolLine[2000 3500 2000 4500 800] - SymbolLine[1500 3000 2000 3500 800] - SymbolLine[500 3000 1500 3000 800] - SymbolLine[0 3500 500 3000 800] -) -Symbol['c' 1200] -( - SymbolLine[500 3000 2000 3000 800] - SymbolLine[0 3500 500 3000 800] - SymbolLine[0 3500 0 4500 800] - SymbolLine[0 4500 500 5000 800] - SymbolLine[500 5000 2000 5000 800] -) -Symbol['d' 1200] -( - SymbolLine[2000 1000 2000 5000 800] - SymbolLine[1500 5000 2000 4500 800] - SymbolLine[500 5000 1500 5000 800] - SymbolLine[0 4500 500 5000 800] - SymbolLine[0 3500 0 4500 800] - SymbolLine[0 3500 500 3000 800] - SymbolLine[500 3000 1500 3000 800] - SymbolLine[1500 3000 2000 3500 800] -) -Symbol['e' 1200] -( - SymbolLine[500 5000 2000 5000 800] - SymbolLine[0 4500 500 5000 800] - SymbolLine[0 3500 0 4500 800] - SymbolLine[0 3500 500 3000 800] - SymbolLine[500 3000 1500 3000 800] - SymbolLine[1500 3000 2000 3500 800] - SymbolLine[0 4000 2000 4000 800] - SymbolLine[2000 4000 2000 3500 800] -) -Symbol['f' 1000] -( - SymbolLine[500 1500 500 5000 800] - SymbolLine[500 1500 1000 1000 800] - SymbolLine[1000 1000 1500 1000 800] - SymbolLine[0 3000 1000 3000 800] -) -Symbol['g' 1200] -( - SymbolLine[1500 3000 2000 3500 800] - SymbolLine[500 3000 1500 3000 800] - SymbolLine[0 3500 500 3000 800] - SymbolLine[0 3500 0 4500 800] - SymbolLine[0 4500 500 5000 800] - SymbolLine[500 5000 1500 5000 800] - SymbolLine[1500 5000 2000 4500 800] - SymbolLine[0 6000 500 6500 800] - SymbolLine[500 6500 1500 6500 800] - SymbolLine[1500 6500 2000 6000 800] - SymbolLine[2000 3000 2000 6000 800] -) -Symbol['h' 1200] -( - SymbolLine[0 1000 0 5000 800] - SymbolLine[0 3500 500 3000 800] - SymbolLine[500 3000 1500 3000 800] - SymbolLine[1500 3000 2000 3500 800] - SymbolLine[2000 3500 2000 5000 800] -) -Symbol['i' 1000] -( - SymbolLine[0 2000 0 2500 800] - SymbolLine[0 3500 0 5000 800] -) -Symbol['j' 1000] -( - SymbolLine[500 2000 500 2500 800] - SymbolLine[500 3500 500 6000 800] - SymbolLine[0 6500 500 6000 800] -) -Symbol['k' 1200] -( - SymbolLine[0 1000 0 5000 800] - SymbolLine[0 3500 1500 5000 800] - SymbolLine[0 3500 1000 2500 800] -) -Symbol['l' 1000] -( - SymbolLine[0 1000 0 4500 800] - SymbolLine[0 4500 500 5000 800] -) -Symbol['m' 1200] -( - SymbolLine[500 3500 500 5000 800] - SymbolLine[500 3500 1000 3000 800] - SymbolLine[1000 3000 1500 3000 800] - SymbolLine[1500 3000 2000 3500 800] - SymbolLine[2000 3500 2000 5000 800] - SymbolLine[2000 3500 2500 3000 800] - SymbolLine[2500 3000 3000 3000 800] - SymbolLine[3000 3000 3500 3500 800] - SymbolLine[3500 3500 3500 5000 800] - SymbolLine[0 3000 500 3500 800] -) -Symbol['n' 1200] -( - SymbolLine[500 3500 500 5000 800] - SymbolLine[500 3500 1000 3000 800] - SymbolLine[1000 3000 1500 3000 800] - SymbolLine[1500 3000 2000 3500 800] - SymbolLine[2000 3500 2000 5000 800] - SymbolLine[0 3000 500 3500 800] -) -Symbol['o' 1200] -( - SymbolLine[0 3500 0 4500 800] - SymbolLine[0 3500 500 3000 800] - SymbolLine[500 3000 1500 3000 800] - SymbolLine[1500 3000 2000 3500 800] - SymbolLine[2000 3500 2000 4500 800] - SymbolLine[1500 5000 2000 4500 800] - SymbolLine[500 5000 1500 5000 800] - SymbolLine[0 4500 500 5000 800] -) -Symbol['p' 1200] -( - SymbolLine[500 3500 500 6500 800] - SymbolLine[0 3000 500 3500 800] - SymbolLine[500 3500 1000 3000 800] - SymbolLine[1000 3000 2000 3000 800] - SymbolLine[2000 3000 2500 3500 800] - SymbolLine[2500 3500 2500 4500 800] - SymbolLine[2000 5000 2500 4500 800] - SymbolLine[1000 5000 2000 5000 800] - SymbolLine[500 4500 1000 5000 800] -) -Symbol['q' 1200] -( - SymbolLine[2000 3500 2000 6500 800] - SymbolLine[1500 3000 2000 3500 800] - SymbolLine[500 3000 1500 3000 800] - SymbolLine[0 3500 500 3000 800] - SymbolLine[0 3500 0 4500 800] - SymbolLine[0 4500 500 5000 800] - SymbolLine[500 5000 1500 5000 800] - SymbolLine[1500 5000 2000 4500 800] -) -Symbol['r' 1200] -( - SymbolLine[500 3500 500 5000 800] - SymbolLine[500 3500 1000 3000 800] - SymbolLine[1000 3000 2000 3000 800] - SymbolLine[0 3000 500 3500 800] -) -Symbol['s' 1200] -( - SymbolLine[500 5000 2000 5000 800] - SymbolLine[2000 5000 2500 4500 800] - SymbolLine[2000 4000 2500 4500 800] - SymbolLine[500 4000 2000 4000 800] - SymbolLine[0 3500 500 4000 800] - SymbolLine[0 3500 500 3000 800] - SymbolLine[500 3000 2000 3000 800] - SymbolLine[2000 3000 2500 3500 800] - SymbolLine[0 4500 500 5000 800] -) -Symbol['t' 1000] -( - SymbolLine[500 1000 500 4500 800] - SymbolLine[500 4500 1000 5000 800] - SymbolLine[0 2500 1000 2500 800] -) -Symbol['u' 1200] -( - SymbolLine[0 3000 0 4500 800] - SymbolLine[0 4500 500 5000 800] - SymbolLine[500 5000 1500 5000 800] - SymbolLine[1500 5000 2000 4500 800] - SymbolLine[2000 3000 2000 4500 800] -) -Symbol['v' 1200] -( - SymbolLine[0 3000 0 4000 800] - SymbolLine[0 4000 1000 5000 800] - SymbolLine[1000 5000 2000 4000 800] - SymbolLine[2000 3000 2000 4000 800] -) -Symbol['w' 1200] -( - SymbolLine[0 3000 0 4500 800] - SymbolLine[0 4500 500 5000 800] - SymbolLine[500 5000 1000 5000 800] - SymbolLine[1000 5000 1500 4500 800] - SymbolLine[1500 3000 1500 4500 800] - SymbolLine[1500 4500 2000 5000 800] - SymbolLine[2000 5000 2500 5000 800] - SymbolLine[2500 5000 3000 4500 800] - SymbolLine[3000 3000 3000 4500 800] -) -Symbol['x' 1200] -( - SymbolLine[0 3000 2000 5000 800] - SymbolLine[0 5000 2000 3000 800] -) -Symbol['y' 1200] -( - SymbolLine[0 3000 0 4500 800] - SymbolLine[0 4500 500 5000 800] - SymbolLine[2000 3000 2000 6000 800] - SymbolLine[1500 6500 2000 6000 800] - SymbolLine[500 6500 1500 6500 800] - SymbolLine[0 6000 500 6500 800] - SymbolLine[500 5000 1500 5000 800] - SymbolLine[1500 5000 2000 4500 800] -) -Symbol['z' 1200] -( - SymbolLine[0 3000 2000 3000 800] - SymbolLine[0 5000 2000 3000 800] - SymbolLine[0 5000 2000 5000 800] -) -Symbol['{' 1200] -( - SymbolLine[500 1500 1000 1000 800] - SymbolLine[500 1500 500 2500 800] - SymbolLine[0 3000 500 2500 800] - SymbolLine[0 3000 500 3500 800] - SymbolLine[500 3500 500 4500 800] - SymbolLine[500 4500 1000 5000 800] -) -Symbol['|' 1200] -( - SymbolLine[0 1000 0 5000 800] -) -Symbol['}' 1200] -( - SymbolLine[0 1000 500 1500 800] - SymbolLine[500 1500 500 2500 800] - SymbolLine[500 2500 1000 3000 800] - SymbolLine[500 3500 1000 3000 800] - SymbolLine[500 3500 500 4500 800] - SymbolLine[0 5000 500 4500 800] -) -Symbol['~' 1200] -( - SymbolLine[0 3500 500 3000 800] - SymbolLine[500 3000 1000 3000 800] - SymbolLine[1000 3000 1500 3500 800] - SymbolLine[1500 3500 2000 3500 800] - SymbolLine[2000 3500 2500 3000 800] -) -Via[30000 20000 10000 2000 0 5000 "" ""] -Via[80000 20000 10000 2000 0 5000 "" ""] -Layer(1 "component") -( - Line[10000 20000 20000 20000 2000 2000 "clearline"] - Line[40000 20000 50000 20000 2000 2000 "clearline"] - Line[60000 20000 70000 20000 2000 2000 "clearline"] - Line[100000 20000 84848 11254 2000 2000 "clearline"] - Arc[30000 20000 10000 10000 2000 2000 270 -90 "clearline"] - Arc[30000 20000 10000 10000 2000 2000 270 90 "clearline"] - Arc[80000 20000 10000 10000 2000 2000 270 -29 "clearline"] - Arc[80000 20000 10000 10000 2000 2000 270 90 "clearline"] -) -Layer(2 "solder") -( -) -Layer(3 "GND") -( -) -Layer(4 "power") -( -) -Layer(5 "signal1") -( -) -Layer(6 "signal2") -( -) -Layer(7 "signal3") -( -) -Layer(8 "signal4") -( -) -Layer(9 "silk") -( -) -Layer(10 "silk") -( - Line[33000 20000 38000 20000 500 2000 "clearline"] - Line[40000 13000 40000 18000 500 2000 "clearline"] - Line[42000 20000 47000 20000 500 2000 "clearline"] - Line[40000 22000 40000 27000 500 2000 "clearline"] - Line[77848 11254 82848 11254 500 2000 "clearline"] - Line[84848 4254 84848 9254 500 2000 "clearline"] - Line[86848 11254 91848 11254 500 2000 "clearline"] - Line[84848 13254 84848 18254 500 2000 "clearline"] - Arc[40000 20000 2000 2000 500 2000 0 -90 "clearline"] - Arc[39999 20001 2001 2001 500 2000 270 -90 "clearline"] - Arc[40002 20002 1998 1998 500 2000 180 -90 "clearline"] - Arc[40002 19998 2002 2002 500 2000 90 -90 "clearline"] - Arc[84848 11254 2000 2000 500 2000 0 -90 "clearline"] - Arc[84847 11255 2001 2001 500 2000 270 -90 "clearline"] - Arc[84850 11256 1998 1998 500 2000 180 -90 "clearline"] - Arc[84850 11252 2002 2002 500 2000 90 -90 "clearline"] -) Index: trunk/doc/pcb.html =================================================================== --- trunk/doc/pcb.html (revision 1036) +++ trunk/doc/pcb.html (nonexistent) @@ -1,13072 +0,0 @@ - - -Pcb - - - - - - - - - -

Pcb

-
- -


-Next: , -Up: (dir) - -
- -

Pcb

- -

This document is a manual for Pcb, the open source, interactive printed circuit -board layout system. - -

- - -
- -


-Next: , -Previous: Top, -Up: Top - -
- -

Copying

- -

Copyright © 1994,1995,1996,1997 Thomas Nau - -

Copyright © 1998,1999,2000,2001,2002 harry eaton - -

This program is free software; you may redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -

This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANT-ABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - - -

- -


-Next: , -Previous: Copying, -Up: Top - -
- -

History

- -

Pcb is a handy tool for laying out printed circuit -boards. - -

Pcb was first written by Thomas Nau for an Atari ST in 1990 and -ported to UNIX and X11 in 1994. -It was not intended as a professional layout system, -but as a tool which supports people who do some -home-developing of hardware. - -

The second release 1.2 included menus for the first time. This made -Pcb easier to use and thus a more important tool. - -

Release 1.3 introduced undo for highly-destructive commands, -more straightforward action handling and scalable fonts. Layer-groups -were introduced to group signal-layers together. - -

Release 1.4 provided support for add-on device drivers. -Two layers (the solder and the component side) -were added to support SMD elements. The handling of libraries -was also improved in 1.4.1. Support for additional devices like -GERBER plotters started in 1.4.4. The undo feature was expanded -and the redo-feature added in 1.4.5. - -

harry eaton took over pcb development beginning with Release 1.5, -although he contributed some code beginning with Release 1.4.3 - -

Release 1.5 provides support for rats-nest generation from simple net -lists. It also allows for automatic clearances around pins that pierce -a polygon. A variety of other enhancements including a Gerber RS-274X -driver and NC drill file generation have also been added. - -

Release 1.6 provides automatic screen updates of changed regions. -This should eliminate most of the need for the redraw ((R key). -Also some changes to what order items under the cursor are selected -were made for better consistency - it is no longer possible to -accidentally move a line or line point that is completely obscured -by a polygon laying over top of it. Larger objects on the upper -most layers can be selected ahead of smaller objects on lower layers. -These changes make operations more intuitive. A new mode of line -creation was added that creates two line on 45 degree angles -with a single click. The actual outline of the prospective line(s) are -now shown during line creation. An arc creation mode was added. -Drawn arcs are quarter circles and can be useful for high frequency -controlled impedance lines. (You can have eighth circle arc if the -source is compiled with -DARC45, but be aware that the ends of such -arcs can never intersect a grid point). Two new flags for pins and -vias were created - one indicates that the pin or via is purely a -drill hole and has no copper annulus. You can only toggle this flag -for vias - for elements, it must be an integral part of the element -definition. The other flag controls whether the pad will be round -or octagonal. There is also now a feature for converting the contents -of a buffer into an element. - -

Release 1.6.1 added the ability to make groups of action commands bound to -a single X11 event to be undone by a single undo. Also a simple design rule -checker was added - it checks for minimum spacing and overlap rules. Plus -many fixes for bugs introduced with the many changes of 1.6 - -

Release 1.7 added support for routing tracks through polygons without touching -them. It also added support for unplated drill files, and drawing directly -on the silk layer. A Netlist window for easily working with netlist was also added. - -

Release 2.0 adds an auto-router, a new simpler library mechanism, much improved -support for graphically creating (and editing) elements, viewable solder-mask -layers (and editing), snap to pins and pads, netlist entry by drawing rats, element -files (and libraries) that can contain whole sub-layouts, metric grids, improved -user interface, a GNU autoconf/automake based build system, and a host -of other improvements. - -

Special thanks goes to: -

     Thomas Nau (who started the project and wrote the early versions).
-     C. Scott Ananian (who wrote the auto-router code).
-     Bernhard Daeubler (Bernhard.Daeubler@physik.uni-ulm.de)
-     Harald Daeubler (Harald.Daeubler@physik.uni-ulm.de)
-     DJ Delorie (djdelorie@users.sourceforge.net)
-     Larry Doolittle (ldoolitt@recycle.lbl.gov)
-     Dan McMahill (danmc@users.sourceforge.net)
-     Roland Merk (merk@faw.uni-ulm.de)
-     Erland Unruh (Erland.Unruh@malmo.trab.se)
-     Albert John FitzPatrick III (ajf_nylorac@acm.org)
-     Boerge Strand (borges@ifi.uio.no)
-     Andre M. Hedrick (hedrick@Astro.Dyer.Vanderbilt.Edu)
-
-

who provided all sorts of help including porting Pcb to -several operating systems and platforms, bug fixes, library enhancement, -user interface suggestions and more. In addition to these people, -many others donated time for bug-fixing and -other important work. Some of them can be identified in the source code -files. Thanks to all of them. If you feel left out of this list, I -apologize; please send me an e-mail and I'll try to correct the omission. - - -

- -


-Next: , -Previous: History, -Up: Top - -
- -

1 Overview

- -

-Pcb is an open source printed circuit board editor. -Pcb includes many professional features such as: -

    -
  • Up to 16 copper layer designs by default. By changing a compile time setting, this -can be set as high as needed. -
  • RS-274X (Gerber) output -
  • NC Drill output -
  • Centroid (X-Y) data output -
  • Postscript and Encapsulated Postscript output -
  • Autorouter -
  • Trace optimizer -
  • Rats nest -
  • Design Rule Checker (DRC) -
  • Connectivity verification -
  • Pcb is Free Software -
  • Can interoperate with free schematic capture tools such as gEDA and - xcircuit -
  • Runs under Linux, NetBSD, Solaris, and other similar operating -systems. -
  • Windows version is available -
- - -
- -


-Next: , -Previous: Overview, -Up: Top - -
- -

2 Introduction

- -

-Each layout consists of several, mostly independent, objects. This chapter -gives an overview of the object types and their relationship to each other. -For a complete description of how to use Pcb, refer to -Getting Started. -The layout is generated on-screen on a grid that can have its origin -at any desired location. -The X coordinate increases to the right, Y increases down to the bottom. -All distances and sizes in Pcb are measured in mils -(0.001 inch). One unit on the coordinate display is one mil in -distance on the board. -The grid may be set on a metric pitch, but is only correct to within -the nearest +/- 0.01 mil because Pcb stores all dimensions as -integer multiples of 1/100 of a mil or 0.00001 inch. - -

The sections in this chapter are sorted by the -order of appearance of the objects within a layout file. - -

- -
- -


-Next: , -Up: Intro - -
- -

2.1 Symbols

- -

-The top object is the layout itself. It uses a set of symbols -that resides at the first logical level. Each symbol is uniquely identified -by a seven bit ASCII code. All layout objects share the same set of -symbols. These symbols are used to form text objects on the silkscreen -and copper layers. Undefined symbols are drawn as filled rectangles. - -

Every font file is preprocessed by a user-defined command when it is loaded. -For details see ‘fontCommand’, Resources. - -

- -


-Next: , -Previous: Symbol Objects, -Up: Intro - -
- -

2.2 Vias

- -

-Vias provide through-hole connectivity across all layers. -While vias look a lot like element pins, don't use vias -for adding elements to the layout, even if that seems -easier than creating a new element. The default solder-mask -will cover over vias, so you won't be able to solder to them. -Of course, you can change this so that vias also have -solder-mask cut-outs, but it is not the default. -Vias are also useful for defining arbitrary drill points such as -those used for mounting a board. Vias used in this way have -a special flag set so that they have no annular copper ring, -and also appear in the unplated drill file. Ctrl-H key over -a via switches it between being a pure-mounting hole and a regular via. -You can assign a name to a via, which is useful during the creation -of new element definitions. -Each via exists on all copper layers. (i.e. -blind and buried vias are not supported) - -

- -


-Next: , -Previous: Via Objects, -Up: Intro - -
- -

2.3 Elements

- -

-Elements represent the components on a board. -Elements are loaded from ASCII coded files in a -similar manner to the layout file itself, or from the -library selector window. -An element is composed of lines and arcs on the silk-screen -layer (used to define the package outline), pins -(or pads for SMD) and three labels that define the -description, the element's layout-name (which also -appears on the silk-screen layer) and its value. You -can choose which of the names are displayed on the screen -with the Screen menu; however, the silk screen in -the printout will always show the layout-name. -Element pins are contained on the first logical level -and so reside on all layers, but the pads of surface-mount -elements reside on only the component or solder -layers. An element can have a mixture of pins, pads -(on one or both sides), and mounting holes. - -

A mark is used to position the element with -respect to the cross hair during pasting. -The mark will lie on a grid point when the element -is positioned. The mark is drawn as a small diamond -shape, but is only visible when both the silk -and pins/pads layers are visible. -All parts of an element are treated as one unit, except for -the name. -It is not possible to delete a single pin or move -only part of an element on the layout. -You can resize separate pieces of an element, -but doing so is usually a bad idea. You can move/rotate -the element name independently of the element it belongs -to. When you move an element name, a line is draw from -the cursor to the element mark so it is easy to tell -which element the name belongs to. - -

Each pin and pad has two string identifiers, one is the -"name" which is a functional description of the pin -(e.g. "clock in") and the other is the "number" of the -pin which is used to identify it in a netlist. The "number" -is usually an integer, but it can be any string. You -can edit the "name" of each pin of an element, but the -"number" is embedded in the element definition and is -determined when the new element is first created. -Pads are similar to lines on a layer but they must be oriented -either vertically or horizontally. -Pads can have either rounded or square ends. Pins -can be round, square, or octagonal. - -

Elements are supported by several special layers: silk, pins/pads and -far-side. The silk layer shows the package outline and -also holds legend text and element names. The pins/pads layer is used to toggle -whether the element's pins and pads are displayed. The far-side layer controls visibility -of objects (silkscreen and pads) that are on the far (i.e. not currently viewed) side -of the board. - -

The “oldlib” style of footprint libraries distributed with -Pcb rely upon the M4 macro processor. M4 is typically -installed under the name m4 on most unix-like operating -systems. It is recommended that you use the GNU version of M4 to -avoid limitations found in some vendor implementations. See the m4 -man page on your system for more information. -Every element file is preprocessed by a user-defined command when the file is read. -For details see ‘elementCommand’, Resources. m4, the default -value of ‘elementCommand’, allows you to create libraries for -package definitions that are shared by all elements. -The old element libraries distributed with Pcb expect m4 or an -equivalent to be the elementCommand. The new library scheme simply has -each element stored in a self-contained file, so there is no need to learn -m4 to add to the libraries. - -

Pcb can create a list of -all connections from one (or all) elements to the others or a list of -unconnected pins. -It can also verify the layout connections against a netlist file. -The element's ‘layout-name’ is the name used to identify the element -in a netlist file (see Netlist File). - -

The old libraries, or very old (pre-1.6) layout files may have -incorrect pin numbering since there was no concept of pin numbers -when they were created. Pcb uses the order of appearance of -the pin definitions in the layout or library file if it uses the -old format, but there is no guarantee that it will be correct for -these old objects. - -

Be aware that a few of the old library parts may still be incorrectly -implemented regarding pin-numbering. All of the DIL (Dual- -Inline-Pins) parts are correct and most of the others are too, -but you should verify the pin numbering -of any non-DIL part before using an old library part. -(use the ‘generate object report’ in the Info menu -to see what Pcb thinks a pin's number is) -All of the old -library names begin with a ~, so you can easily identify them. -The old libraries also may contain other sorts of errors, -including incorrect pin spacing, silkscreen overlapping solder areas, etc. -Check carefully any element in the old library before using it! -As the new library grows, the old library will be pared down to -at least remove all of the elements with errors, but this will -take time. - -

You can make your own element definitions graphically now. -Simply draw vias for the pins, lines on the solder and/or -component layers for surface-mount pads (they must be either horizontal -or vertical), -and lines and arcs on the silkscreen layer for the silkscreen -outline. You should name (N key) each via and copper line with the pin number. -Once you are happy with the geometry, select everything that is to become part of -the element, then choose ‘convert selection to element’ from the Select menu. -Afterwords you can make pin (or pad) one -square if you like, and give the element its various names. You can also give -the pins and pads their functional names. Note that the -element mark corresponds to the position you click after choosing the -conversion from the menu, so decide where the mark goes and make -sure it falls on a grid point before you request the conversion. -If the vias/lines are not named, then the pin numbering will correspond to the -order in which they were placed. - -

When you create a new element, remember that silkscreen lines -should never overlap the copper part of the -pins or pads, as this can interfere with soldering. The silkscreen -should identify the maximum extent of the element package so it -is easy to see how close elements can be placed together. - -

If you want to make an element similar to an existing one, you can -break an element into constituent pieces from the Buffer menu. -Paste the pieces to the layout, make the necessary changes, then -convert it back into an element. If the pin numbers haven't changed, -there is no need to name each via/line as they are pre-named when -the element was broken apart. When you create a new element, you -can save it to a file in order to have easy access to it the next -time you run Pcb. - -

- -


-Next: , -Previous: Element Objects, -Up: Intro - -
- -

2.4 Layers

- -

-Every layout consists of several layers that can be used independently -or treated as a group. -Layer groups can be used to logically separate (and color-code) -different traces (e.g. power and signal); however, all -layers within a group reside on the same physical -copper layer of a board, so using different layers within the same -group won't provide electrical separation where they touch or overlap. -For details, see ‘layerGroups’, Resources. -Each layer is drawn in a color defined in the resource file -and identified by a name that you can change (for details -see ‘layerColor’, Resources.) -Layers are really just containers for line, arc, polygon, and text objects. The -component and solder layers contain SMD elements as well, but the -file structure doesn't reflect that fact directly. - -

Each layer group -represents a physical layer on the printed circuit board. If you want to make -a four layer board, you'll need to have at least four layer groups. -Connections between layer groups are established only through element pins and vias. -The relationship between a specific layer and the board itself is configurable from -the ‘Edit layer groups’ option in the Settings menu. -The layer groups corresponding to the physical layers: component-side -and solder-side are always defined and you must map at least one -logical layer to each, even if you plan to make a single-sided board. -You are not obligated to put tracks on either of them. -Surface mount elements always reside on either the component-side or the -solder-side layer group. When you paste an element from the buffer, -it will go onto whichever side of the board you are viewing. -You can swap which side of the board you are viewing by pressing -the Tab key, or by selecting ‘view solder side’ from the -Screen menu. -The layer groups just have a name or number associated with them - where -they are sandwiched in the board is left for you to tell the -manufacturer. - -

The silkscreen layer is special because there are actually two silkscreen -layers, one for the top (component) and one for the bottom (solder) side -of the board. Which silk layer you draw on is determined by the side of the -board that you are viewing. If you are viewing the component side, then -drawing on the silk layer draws to the component-side silk layer. - -

The netlist layer is another special layer. It shows rat's-nest lines -(i.e. guides that show how the netlist expects the element to interconnect). -If you make this the active layer, you can use the Line tool to add -entries into the netlist, or to delete connections from the netlist -window. Except for these two purposes, you should not -make the netlist layer the active layer. Usually there is no need to -do this because a separate schematic package should be used to create the -netlist. Pcb can automatically draw all of the rats from -the netlist. In some cases you may want to make a small change without -going to the trouble of modifying the schematic, which is why this -facility is provided. - -

- -


-Next: , -Previous: Layer Objects, -Up: Intro - -
- -

2.5 Lines

- -

-Lines are used to draw tracks on the pc board. -When in the line mode, each Btn1 -press establishes one end of a line. -Once the second point is defined, the line is drawn -and a new line started where the first one ended. -You can abandon the new starting point in favor -of another by pressing Ctrl-Btn1, or -Btn3, but don't use Btn2. -The undo function (U key or ‘undo last operation’ -from the Edit menu) will take you back -point by point if you use it while in the line mode. - -

New lines can be restricted to 45 degree angles if desired. You can toggle this -restriction on and off while creating lines by pressing the period key. -If the 45 degree restriction is turned on, then the / (forward slash) key -can be used to cycle through three different modes of 45 degree line creation. -One mode just creates a single line forced to the nearest 45 degree vector. The next -mode creates two lines from the start to end points such that the first line leaves the -start point at a 90 degree vector, and the second line enters the end point on a 45 -degree vector. The last mode creates two lines such that the first line leaves the -start point on a 45 degree vector and arrives at the end point on a 90 degree vector. -You can temporarily swap between the last two modes by holding the Shift key down. - -

It is simple to edit a line object by breaking it into pieces (insert point mode), -moving an end point or the whole line (Arrow tool), -or changing the layer it resides on (M key moves the line under the pointer -to the active layer). -In the case when two line segments meet at exactly the same -point you can delete the intermediate point, otherwise the delete tool removes an entire line. -Feel free to experiment -since Pcb will allow you to undo and redo anything that materially affects your work. -If you switch active layers in the midst of placing lines a via will automatically be -placed, when necessary, in order to continue the connection. - -

If you draw a line inside a polygon, it will either plow through the -polygon creating a clearance, or touch the polygon. This behavior is -selectable in the Settings menu for new lines. To change the -behavior of an existing line, hit the J key with the cross hair -over the line. You can increase the size of the clearance by 2 mils on -each edge with the with the -K key. Shift-K will decrease the clearance by 2 mils. -The increment may be changed from 2 mils through the application -resource file. -The clearance can be also increased, decreased and set -by the ChangeClearSize action. - -

Lines do not need to intersect the center of a pin, pad, via, or other -line for Pcb to understand that they make electrical connection. -If the connection is too tenuous, running the design rule checker will report -that the connection may break if the line width shrinks slightly. - -

- -


-Next: , -Previous: Line Objects, -Up: Intro - -
- -

2.6 Arcs

- -

-Pcb can handle arcs of any angular extent, but when you -create an arc with the Arc tool, it will -be a quarter circle (this means they always bend a right angle). Arcs are very similar -to lines otherwise. They are created on the active layer and have the same thickness -that new lines will have. The various clicks for creating lines work pretty much the -same way for creating arcs. -In order to make the arc curve in the desired direction, drag the mouse along -the tangent line from the starting position towards the end position. If the grid is -too coarse, it may not be possible to distinguish whether you've moved over then up, -or up then over, so if you can't seem to make the arc go in the direction you want, try pressing -the Shift key while drawing the arc. Decreasing the grid spacing may also help. -Alternatively you can draw the wrong arc, then -rotate and move it where you want. Like the Line tool, after an arc is drawn a new -starting point is established at the end point. - -

Whenever a starting point is established -by either the Line or Arc tools it will be retained if you switch directly between the -tools (e.g. F2 key for Lines, F8 key for Arcs. Arcs can either touch or -clear polygons just like lines do. Of course connection -searches, undo and all the other features you'd expect work with arcs too. - -

- -


-Next: , -Previous: Arc Objects, -Up: Intro - -
- -

2.7 Polygons

- -

-Sometimes it's useful to fill large areas with solid copper. -The way to do this is with polygons. -Polygons can be created in either the polygon mode or the rectangle mode. -In the polygon mode, you'll have to define each corner of the polygon -with a mouse click (Btn1). When the last point is clicked -exactly on top of the starting point, the polygon is finished. -Since this can be hard to do, the Shift-P key will enter the -final point for you, closing the polygon. -If the 45 degree angle restriction is turned on -and you try to close the polygon when it is not possible, you'll get a -warning instead. If you haven't finished entering a polygon, but want to -undo one (or more) of the points that you've already defined, use the -undo command (U key). - -

With the rectangle tool, defining -the two diagonally opposite corners is sufficient, but of course the resulting -polygon is a rectangle. -Like lines, a polygon can by edited by deleting, inserting and moving the points -that define it. Pins and vias always clear through polygons without -touching them when first positioned. You must add a thermal with the thermal -tool in order to connect pins and vias to polygons. Thermals can be added and removed by -clicking Btn1 with the thermal tool over the pin or via. -The thermal tool always -places a thermal to polygons on the active layer, so if the tool doesn't -seem to work, it's probably because the polygon you want to touch is not -on the active layer. You can change the style of thermal used or make -a solid connection by holding down Shift while clicking -Btn1 with the thermal tool over the pin or via. - -

Pcb is capable of handling complex polygons, but -using a number of simpler ones improves performance of the connection tracing code. -You also must be careful not to create polygons that touch or overlap themselves. -The fabricated board may not look the way you expect if you violate this -principle. It is always ok to have two (or more) polygons touch or overlap -each other, but not for points within the same polygon to do so. - -

The great advantage to this new polygon behavior is that simple or complex ground -and/or power planes can be easily made with polygons and seen on the screen. -If you don't want this auto-clearance behavior, or you load a layout created by -an early version of Pcb, the old behavior -(shorts to all piercing pins and vias) is available. A ‘ChangeSize’ -operation (S key) toggles a polygon between the new and old polygon/pin -behavior. - -

- -


-Next: , -Previous: Polygon Objects, -Up: Intro - -
- -

2.8 Text

- -

-Text objects should be used to label a layout or to put additional -information on the board. Elements have their ‘layout-name’ labels on the -silk-screen layer. If you are making a board without a silkscreen, -you can use copper text to label the elements, but you have to do -this manually. - -

Text is always horizontal when first created, but the -rotate mode can align it along 0, 90, 180 and 270 degree angles. -Text on the far side of the board will automatically appear mirror-imaged. - -

Warning: TEXT OBJECTS ON A COPPER LAYER CREATE COPPER LINES BUT THEY ARE NOT SCANNED FOR -CONNECTIONS OR TESTED FOR CREATING SHORTS VS. THE NETLIST. NEITHER ARE TEXT OBJECTS TESTED AGAINST ANY DESIGN RULES. - -

- -


-Previous: Text Objects, -Up: Intro - -
- -

2.9 Nets

- -

-Layout files also contain the netlist that describes how the elements -are supposed to be interconnected. This list of connections can be -loaded from a netlist file (see Netlist File), or -entered by drawing rat-lines as described -previously. Each net has a name and routing style associated with it. -The net contains a list of all element layout-name names and -pin numbers that should -be connected to the net. Loading a netlist file will replace all -existing nets with the ones from the file. -The Netlist window provides an easy way to -browse through the net list. You can display the rat's-nest by selecting -‘optimize rats-nest’ from the Connects menu. If you move or rotate elements, -the rat's-nest will automatically follow the movements, but they won't -necessarily show the shortest paths until you optimize them again. - - -

- -


-Next: , -Previous: Intro, -Up: Top - -
- -

3 Getting Started

- -

-The goal of this chapter is to give you enough information to learn how -Pcb works and how to develop your layouts to make the best use of Pcb's -features. All event translations (i.e. the buttons and keys you -press) refer to the default application resource file shipped with Pcb. -There is probably no need to change this unless your window -manager uses some of the button events itself; however, if you want -to customize the behavior of Pcb then changing the resource file -is usually the best way to do it. - -

Get yourself a printout of this chapter and User Commands, if you -haven't already done so, and follow the examples. - -

Start Pcb (the actual command will use all lower-case letters) -without any additional options. -If you get the error message: - -

         can't find default font-symbol-file 'default_font'
-
-

then the font searchpath or filename in the application resource -file is wrong. Be sure that your m4 program supports search paths. -If not, get GNU m4. -For other messages, see problems. -Another quick-start is provided by pcbtest.sh in the src -directory. If some features don't seem to work, try running pcbtest.sh, -if that works, then Pcb hasn't been installed properly. - -

- -
- -


-Next: , -Up: Getting Started - -
- -

3.1 The Application Window

- -

The main window consists of five areas: -the menu at the top, the layer control in the upper left, the tool buttons -located below the layer controls, the Layout area to the right of these, and the -status line at the bottom of the window. - -

- - - -

3.1.1 Menus

- -

-The menus are located at the top of the Layout area. Most, but not all, -of their functions are also available from the keyboard. Similarly, some -functions are only achievable through the keyboard or command entry. -Some menu entries such as ‘center layout’ in the Screen menu require a certain cross hair position. -In this case a prompt message will popup at the bottom of the screen -with wording similar to the following: -

     move pointer to the appropriate screen position and press a button
-
-

Any mouse button will do the job, whereas any key except the arrow (cursor) keys -will cancel the operation. If it seems like the menu hasn't done what you -expected, check to see if it is waiting for the position click. For details see Actions. - -

Pressing Btn3 in the Layout area also pops up a menu with many of the most common operations (except -when you're in the midst of drawing a line or arc). When -a choice in the Btn3 popup menu needs a cross hair position, it uses the position -where the cross hair was when Btn3 was pressed. For example, to get detailed -information on an object, place the cross hair over the object, press Btn3, then -choose ‘object report’. If you pop up the Btn3 menu but don't want to -take any of the actions, click on one of the headers in the menu. - - - -

File
This menu offers a choice of loading, saving and printing data, saving -connection information to a file or quitting the application. Most -of the entries in the File menu are self explanatory. -Selecting -‘print layout’ pops up a printer control dialog. -A selection of several device drivers is available from the printer control -dialog. Presently PostScript, encapsulated PostScript, -and GerberX are supported. The GerberX driver produces -all of the files necessary to have the board professionally manufactured. -The connection saving features in the File menu produce outputs in an -arcane format that is not too useful. They do not produce netlist -files. - -


Edit
The Edit menu provides the usual cut, copy, paste -which work on selections. To learn how to -create complex selections, see Arrow Tool. -The Edit menu also -provides access to Undo and Redo of the last operation. These -can also be accomplished with the U key and Shift-R -key. Finally, the Edit menu allows you to change the names -of: the layout, the active layer, or text objects on the layout. - -


Screen
The Screen menu supports most functions related to -the whole Layout area. There are various entries to change the grid to some popular -values, the zoom factor, and which kind of element name is displayed. -You can also re-align the grid origin and turn on and off the display -of the grid. -Before changing the grid alignment, I recommend that you zoom in as close as -possible so that you're sure the grid -points appear exactly where you want them. - -

The Screen menu also allows you to turn on and off the -visibility of the solder-mask layer. When the solder-mask layer -is made visible it obscures most of the layout, so only turn -this on when you really want to know what the solder-mask will -look like. The solder-mask that you see belongs to the -side of the board you are viewing, which can be changed with -the ‘view solder side’ option, also found in the Screen menu. -When the solder-mask is displayed, the pin and pad clearance adjustments -(see Line Objects) alter the size of mask cut-outs. - -


Sizes
The Sizes menu allows you to select a group of line thickness, via diameter, via drill -size, and clearance (keepaway) (collectively called a "routing style") to be copied to the "active" sizes. -You can also change the names given to the routing styles and adjust their values from -this menu. The "active" sizes are also adjustable from this menu. -The "active" sizes are shown in the status-line and control the initial size of new vias, -drilling holes, lines, clearances, text-objects and also the maximum dimensions of the -board layout. - -


Settings
The Settings menu controls several operating configuration -parameters. The ‘edit layer groups’ entry brings up a dialog -that allows you to change the way layers are grouped. Layer grouping -is described in Layer Objects. The ‘all-direction lines’ -entry controls -the clipping of lines to 45-degree angles. You can also control -whether moving individual objects causes the attached lines to -"rubber band" with the move or not from the Settings menu. Another -entry controls whether the starting clip angle for the two-line -mode (see Line Objects) alternates every other line. You can -also control whether element names must be unique from the Settings -menu. When unique element names are enforced, copying a new element -will automatically create a unique ‘layout-name’ name for it -provided that the name originally ended with a digit (e.g. -U7 or R6). The Settings menu allows you to control -whether the cross hair will snap to pins and pads even when they -are off-grid. Finally you can control whether new lines and -arcs touch or clear intersecting polygons from this menu. - -


Select
This menu covers most of the operations that work with selected objects. -You may either (un)select all visible objects on a layout or only the ones -which have been found by the last connection scan see - - -. -You can delete all selected objects from this menu. -Other entries in the Select menu change the sizes of selected objects. -Note that a select action only affects those objects that are -selected and have their visibility turned on in the Layer Control -panel. The Select menu also provides a means for selecting objects -by name using unix Regular Expressions. - -


Buffer
From the Buffer menu you may select one out of five -buffers to use, rotate or clear its contents or save the buffer contents -to a file. You can also use the ‘break buffer element to pieces’ entry -to de-compose an element into pieces for editing. -Note: only objects with visibility turned on are pasted to the layout. If -you have something in a buffer, then change which side of the board you -are viewing, the contents of the buffer will automatically be mirrored -for pasting on the side you are viewing. It is not necessary to clear -a buffer before cutting or copying something into it - it will automatically -be cleared first. - -


Connects
The entries available through the Connects menu allow you to find -connections from objects and to manipulate these. -You can also optimize or erase rat's nests from this menu. Finally, -the ‘auto-route all rats’ entry allows you to auto-route -all connections show by the rat's nest. The auto-router will use -any visible copper layer for routing, so turn off the visibility of any -layers you don't want it to use. The auto-router will automatically -understand and avoid any traces that are already on the board, but -it is not restricted to the grid. Finally, -the auto-router routes using the active sizes (except for nets that -have a route-style defined). Pcb always knows which tracks -were routed by the auto-router, and you can selectively remove them -without fear of changing tracks that you have manually routed -with the ‘rip-up all auto-routed tracks’ entry in the Connects -menu. The ‘design rule checker’ entry runs a check for copper -areas that are too close together, or connections that touch too -tenuously for reliable production. The DRC stops when the first -problem is encountered so after fixing a problem be sure to -run it again until no problems are found. -
          Warning: COPPER TEXT IS IGNORED BY THE DRC CHECKER.
-
-


Info
The ‘generate object report’ entry from the Info menu -provides a way to get detailed information -about an object, such as its coordinates, dimensions, etc. -You can also get a report summarizing all of the drills -used on the board with ‘generate drill summary’. Lastly, -you can get a list of all pins, pads and vias that were -found during a connection search. - -


Window
The Window menu provides a way to bring each of Pcb's -windows to the front. The Library window is used to -bring elements from the library into the paste-buffer. The -Message Log window holds the various messages that -Pcb sends to the user. The Netlist window shows -the list of connections desired. - -
- -

Now that you're familiar with the various menus, it's time -to try some things out. From the File menu choose -‘load layout’, navigate to the tutorial folder, then -load the file ‘tut1.pcb’. - -

- - -


-Next: , -Previous: Menu, -Up: Application Window - -
- -

3.1.2 The Status-line and Input-field

- -

-The status-line is located at the bottom edge of the main window. -During normal operation the status information is visible there. -When a selected menu operation requires an additional button click, the -status-line is replaced by a message telling you to position the cursor -and click. -When a text input is required, the status-line is replaced by the -Input-field which has a prompt for typing the input. - -

The status-line shows, from left to right, the side of the board that you -are viewing (Tab key changes this), the current grid values, -if new lines are restricted to 45 degrees, -which type of 45 degree line mode is active, whether rubberband move and -rotate mode is on (R), and the zoom factor. -This information is followed by the active line-width, via-size -and drilling hole, keepaway spacing, and text scaling. Last is the active buffer number and the -name of the layout. An asterisk appearing at the far left indicates that the -layout has been modified since the last save. -Note that the name of the layout is not the same -thing as the filename of the layout. -Change the grid factor to 1.0 mm from the Screen menu. Observe how the -status line shows the new grid setting. Except for the case of the metric -grid, all dimensions in the status line are in units of 0.001 inch (1 mil). - -

The input-field pops up (temporarily replacing the status-line) whenever user input -is required. Two keys are bound to the input field: the Escape key -aborts the input, Return accepts it. Let's change the name of a component -on the board to see how the input-field works. Position the cross hair over -R5, and press the N key. The input field pops-up showing the name -for you to edit. Go ahead and change the name, then hit return. Notice the name -of the element changed. Now undo the change by pressing the U key. You can -position the cross hair over the name, or the element before pressing the -N key. - -

Now select ‘realign grid’ from the Screen menu. Notice that the -status line has been replaced with an instruction to position the cursor -where you want a grid point to fall. In this case, since the cross hair -can only fall on a grid point, you must move the tip of the finger cursor -to the place where you want a grid point to appear. Do not worry that -the cross hair is not coincident with the cursor. Click Btn1 at -your chosen location. See how the grid has shifted, and the status line -has returned. - -

The present cross hair position is displayed in the upper right corner of the window. -Normally this position is an absolute coordinate, but you can anchor a marker at -the cross hair location by pressing Ctrl-M (try it now) and then the -display will read both the absolute cross hair position as well as the difference -between it and the marker. The numbers enclosed in < > are the X and Y distances -between the cross hair and the mark, while the numbers enclosed in parenthesis -are the distance and angle from the mark to the cross hair. The values displayed -are always in units of 0.001 inch (1 mil). -Pressing Ctrl-M again turns the marker off. - -

- -

3.1.3 The Layer Controls

- -

-The layer control panel, located in the upper left, is used to turn on -and off the display of layer groups and to select the active drawing layer. -If a layer hasn't been named, the label "(unknown)" is used as the default. -If this happens, it probably means the application resources are not installed -properly. - -

The upper buttons are used to switch layers on and off. Click -<Btn1> on one or more of them. Each click toggles the setting. -If you turn off the currently active layer, another one that is visible -will become active. If there are no others visible, you will not be -able to turn off the active layer. -When the layers are grouped, clicking on these buttons will toggle -the visibility of all layers in the same group. This is a good idea because -layers in the same group reside on the same physical layer of -the actual board. Notice that this example has 2 groups each having -3 layers, plus two other layers named ‘unused’. -Use the ‘Edit layer groups’ option in the ‘Settings’ menu to -change the layer groupings in the lesstif GUI or the ‘Preferences’ -dialog from the ‘File’ menu in the GTK+ GUI. Note that changing the -groupings can radically alter the connectivity on the board. -Grouping layers is only useful for helping you to color-code -signals in your layout. Note that grouping layers actually reduces the number -of different physical layers available for your board, so to make an eight -layer board, you cannot group any layers. - -

The far side button turns on and off the visibility of elements -(including SMD pads) on the opposite (to the side you're viewing) -board side, as well as silk screening on that side. It does not -hide the x-ray view of the other copper layers, these must be turned off -separately if desired. Use the tab key to view the entire board from the other -side. To see a view of what the back side of the board will actually look like, -make the solder layer the active layer then press tab until the status -line says "solder" on the right, then turn off the visibility of all layers -except solder, pins/pads, vias, and silk. Now turn them all back on. - -

The lowest button, named active, is used to change the active -drawing layer. Pressing <Btn1> on it pops up a menu to select which -layer should be active. -Each entry is labeled with the layer's name and drawn in its color. -The active layer is automatically made visible. The active layer is -always drawn on top of the other layers, so the ordering of layers -on the screen does not generally reflect the ordering of the manufactured -board. Only the solder, component, silkscreen, and solder-mask layers -are always drawn in their physical order. Bringing the active layer -to the top makes it easier to select and change objects on the active layer. -Try changing the active layer's name to ABC by selecting -‘edit name of active layer’ from the ‘Edit’ menu. -Changing the active layer can also be done by pressing keys -1..MAX_LAYER. - -

Turn off the visibility of the component layer. -Now make the component layer the active layer. Notice that it -automatically became visible. Try setting a few -other layers as the active layer. You should also experiment -with turning on and off each of the layers to see what happens. - -

The netlist layer is a special layer for adding connections to -the netlist by drawing rat lines. This is not the recommended -way to add to the netlist, but occasionally may be convenient. -To learn how to use the netlist layer see Net Objects. - -

- -


-Next: , -Previous: Layer Controls, -Up: Application Window - -
- -

3.1.4 The Tool Selectors

- -

-The tool selector buttons reside below the layer controls. -They are used to select which layout tool to use in the drawing -area. Each tool performs its function when Btn1 is pressed. -Every tool gives the cursor a unique shape that identifies it. -The tool selector buttons themselves are icons that illustrate their function. -Each layout tool can also be selected from the keyboard: -

         F1 key       Via tool
-         F2 key       Line tool
-         F3 key       Arc tool
-         F4 key       Text tool
-         F5 key       Rectangle tool
-         F6 key       Polygon tool
-         F7 key       Buffer tool
-         F8 key       Delete tool
-         F9 key       Rotate tool
-         Insert key   Insert-point tool
-         F10 key      Thermal tool
-         F11 key      Arrow tool
-         F12 key      Lock tool
-
-

Some of the tools are very simple, such as the Via tool. Clicking -Btn1 with the Via tool creates a via at the cross hair position. -The via will have the diameter and drill sizes that are active, -as shown in the status line. -The Buffer tool is similar. With it, <Btn1> copies -the contents of the active buffer to the layout, but only -those parts that reside on visible layers are copied. -The Rotate tool allows you to rotate elements, arcs, and text objects -90 degrees counter-clockwise with each click. Holding the Shift -key down changes the Rotate tool to clockwise operation. -Anything including groups of objects -can be rotated inside a buffer using the rotate buffer menu option. - -

The Line tool is explained in detail in Line Objects. Go read -that section if you haven't already. -Activate the Line tool. Set the active layer to the solder layer. -Try drawing some lines. Use the U key to undo some of the -lines you just created. Zoom in a bit closer with the Z key. -Draw some more lines. Be sure to draw some separate lines by starting -a new anchor point with Ctrl-Btn1. Change the ‘crosshair snaps to pin/pads’ -behavior in the Settings menu. Now draw a line. Notice that -the new line points must now always be on a grid point. It might not -be able to reach some pins or pads with this setting. Increase the active line thickness -by pressing the L key. Note that the status line updates -to reflect the new active line thickness. Now draw another line. Before completing the -next line, make the component layer active by pressing the 4 key. -Now finish the line. Notice that a via was automatically placed where -you switched layers. Pcb does not do any checks to make sure that -the via could safely be placed there. Neither does it interfere with -your desire to place lines haphazardly. It is up to you to place -things properly when doing manual routing with the Line tool. - -

The Arc tool is explained in detail in Arc Objects. Its -use is very similar to the Line tool. - -

The Rectangle tool, Polygon tool and Thermal tool are explained in detail in -Polygon Objects. Go read that section. -Remember that the Thermal tool will only create and destroy thermals -to polygons on the active layer. Use the Rectangle tool to make a -small copper plane on the component layer. Now place a via in the -middle of the plane. Notice that it does not touch the plane, and -they are not electrically connected. Use the Thermal tool to make -the via connect to the plane. Thermals allow the via or pin to -be heated by a soldering iron without having to heat the entire -plane. If solid connections were made to the plane, it could be -nearly impossible to solder. Shift-click on the via with the Thermal -tool to change the style of thermal used or to make the connection -solid. Click on the via again with the Thermal tool to remove the -connection to the plane. - -

The Insert-point tool is an editing tool that allows you to add -points into lines and polygons. The -Insert-point tool enforces the 45 degree line -rule. You can force only the shorter line segment to 45 -degrees by holding the Shift key down while inserting the point. -Try adding a point into one of the lines you created. Since line -clipping is turned on, you may need to move the cross hair quite far -from the point where you first clicked on the line. Turn off the -line clipping by selecting ‘all-direction lines’ from the -Settings menu (or hit -the Period key). Now you can place an inserted point anywhere. -Try adding a point to the rectangle you made earlier. Start by clicking -somewhere along an edge of the rectangle, then move the pointer to -a new location and click again. - -

The delete-mode deletes the object beneath the cursor with each -Btn1 click. -If you click at an end-point that two lines have in common, it will replace the two lines with a single line -spanning the two remaining points. This can be used to delete an "inserted" -point in a line, restoring the previous line. Now delete one of the original corner -points of the polygon you were just playing with. To do this, place the cross hair over the -corner and click on it with the Delete tool. You could also use the Backspace key -if some other tool is active. Try deleting some of -the lines and intermediate points that you created earlier. Use undo -repeatedly to undo all the changes that you've made. Use redo -a few times to see what happens. Now add a new line. Notice that -you can no longer use redo since the layout has changed since -the last undo happened. The undo/redo tree is always pruned in this -way (i.e. it has a root, but no branches). - -

The Arrow tool is so important, it has its own section: Arrow Tool. -Go read it now. - -

The Lock tool allows you to lock objects on the layout. When an object -is locked, it can't be selected, moved, rotated, or resized. This is -useful for very large objects like ground planes, or board-outlines that -are defined as an element. With such large objects, nearly anywhere you -click with the Arrow tool will be on the large object, so it could be -hard to draw box selections. If you lock an object, the Arrow tool will -behave as if it didn't exist. You cannot unlock an object with undo. -You must click on it again with the Lock tool. If an object is locked, -previous changes to it cannot be undone either. When you lock -an object, a report message about it is popped up and will always tell -you what object it is, and that it is locked if you just locked it. -Other than noticing your inability to manipulate something, the only -way to tell an object is locked is with a report from the Info -menu. Use the Lock tool sparingly. - -

- -


-Previous: Tool Selectors, -Up: Application Window - -
- -

3.1.5 Layout Area

- -

-The layout area is where you see the layout. The cursor shape depends -on the active tool when the pointer is moved into the layout area. -A cross hair follows the mouse pointer with respect to the grid setting. -Select a new grid from the Screen menu. -The new value is updated in the status line. -A different way to change the grid is -Shift<Key>g to decrease or <Key>g to increase -it, but this only works for English (integer mil) grids. -The grid setting is saved along with the data when you save a pcb layout. -For homemade layouts a value around 50 is a good setting. -The cursor can also be moved in the layout area with the cursor (arrow) keys or, for larger -distances, by pressing the Shift modifier together with a cursor key. - -

- -


-Next: , -Previous: Application Window, -Up: Getting Started - -
- -

3.2 Log Window

- -

-This optional window is used to display all kind of messages including -the ones written to stderr by external commands. The main advantage -of using it is -that its contents are saved in a scrolling list until the -program exits. Disabling this feature by setting the resource -useLogWindow to false will generate popup windows to display -messages. The stderr of external commands will appear on Pcbs -stderr which normally is the parent shell. I suggest you iconify -the log window after startup for example by setting *log.iconic to -true in the resource file. If raiseLogWindow is set true, -the window will deiconify and raise itself whenever new messages are to be -displayed. - -

- -


-Next: , -Previous: Log Window, -Up: Getting Started - -
- -

3.3 Library Window

- -

-The library window makes loading elements (or even partial layouts) easy. -Just click the appropriate library from the list on the left. A list -of its elements then appears on the right. Select an element -from the list by clicking on its description. Selecting an element from the -library will also automatically copy the element into -the active buffer, then invoke the Buffer tool so -you can paste it to the layout. Elements in the old library should be -taken with a grain of salt (i.e. check them carefully before -using). The old library names all begin with ~ so you can easily distinguish between -the old and new libraries. All of the elements in the new library -should be thoroughly vetted, so you -can use them with confidence. The new libraries are stored simply -as directories full of element files, so making additions to the -new library is easy since there is no need to learn m4. -For details on the old libraries, -check-out Library File and Library Contents File. For -details on the format of an element file used for the new libraries, -see Element File. - -

- -


-Next: , -Previous: Library Window, -Up: Getting Started - -
- -

3.4 Netlist Window

- -

-The netlist window is very similar to the library window. On the left -is a list of all of the nets, on the right is the list of connections -belonging to the chosen net. The chosen net is highlighted in the -list and also shown on the second line of the window in red. If the -net name has a star to the left of it then it is "disabled". A disabled -net is treated as if it were not in the net list. This is useful, for -example, if you plan to use a ground plane and don't want the ground -net showing up in the rat's nest. You can enable/disable individual -nets by double-clicking the net name. If you want to enable or disable -all nets at once, there are two buttons at the top of the netlist -window for this purpose. - -

The button labeled ‘Sel Net On Layout’ -can be used to select (on the layout) everything that is connected -(or is supposed to be connected) to the net. If you click on a -connection in the connection list, it will select/deselect -the corresponding pin or pad in the layout and also center the layout -window where it is located. If you "Find" (‘lookup connection -to object’ in the Connects menu [also F key]), a pin -or pad it will also choose the net and connection in the netlist window -if it exists in the netlist. - -

If no netlist exists for the layout, then the netlist window does not -appear. You can load a netlist from a file from the File menu. The -format for netlist files is described in Netlist File. - -

- -


-Next: , -Previous: Netlist Window, -Up: Getting Started - -
- -

3.5 Drawing and Removing Basic Objects

- -

-hace begging gutting here, and do a real-world tutorial example. - -

There are several ways of creating new objects: you can draw them yourself, -you can copy an existing object (or selection), or you can load an element from a file or -from the Library window. Each type of object has a particular tool for creating it. - -

The active tool can be selected from the tool selectors in the bottom -left corner or by one of the function keys listed earlier in this chapter. -Each <Btn1> press with the tool tells the application to create -or change the appropriate object or at least take -the first step to do so. Each tools causes the cursor to take -on a unique shape and also causes the corresponding -tool selector button to be highlighted. You can use either cue -to see which tool is active. - -

Insert mode provides the capability of inserting new points into existing -polygons or lines. The 45 degree line clipping is now enforced when selected. -Press and hold the shift key while positioning the new point to only clip -the line segment to the nearer of the two existing points to 45 degrees. -You can also toggle the 45-degree clipping in the middle of a point -insertion by pressing the <Key>. -If the shift key is not depressed and the 45 degree line clipping mode -is on, both new line segments must be on 45 degree angles - greatly -restricting where the new point may be placed. In some cases this can cause -confusion as to whether an insertion has been started since the two new -lines may be forced to lie parallel on top of the original line until the -pointer is moved far from the end points. - -

Removing objects, changing their size or moving them only applies to objects -that are visible when the command is executed. - -

- -
- -


-Next: , -Up: Drawing and Removing - -
- -

3.5.1 Common Drawing and Removing Methods

- -

-There are several keystrokes and button events referring to an object -without identifying its type. Here's a list of them: - -

<Btn1> creates (or deletes) an object depending on the -current mode. - -

<Key>BackSpace or <Key>Delete removes the visible -object at the cursor location. When more than one object exists at the -location, the order of removal is: via, line, text, polygon and -element. The drawn layer order also affects the search - whatever is -top - most (except elements) is affected before lower items. Basically -all this means that what is removed is probably just what you expect. -If for some reason it isn't, undo and try again. -Only one object is removed for each keystroke. If two or more -of the same type match, the newest one is removed. - -

Use <Key>s and Shift<Key>s to change the size (width) -of lines, arcs, text objects, pins, pads and vias, or to toggle the style -of polygons (whether pins and vias automatically have clearances). - -

<Key>n changes the name of pins, pads, vias, the -string of a text object, or the currently displayed label of an element. - -

<Key>m moves the line, arc, or polygon under the cross hair to the -active layer if it wasn't on that layer already. - -

<Key>u (undo) recovers from an unlimited number of operations -such as creating, removing, moving, copying, selecting etc. It works like -you'd expect even if you're in the midst of creating something. - -

Shift<Key>r restores the last undone operation provided no other -changes have been made since the undo was performed. - -

<Key>tab changes the board side you are viewing. - -

For a complete list of keystrokes and button events see Translations. - -

- -


-Next: , -Previous: Common, -Up: Drawing and Removing - -
- -

3.5.2 Lines

- -

-To draw new lines you have to be in line-mode. Get there either by -selecting it from the Tool palette or by pressing <Key>F2. -Each successive notify event creates a new line. The -adjustment to 45 degree lines is done automatically if it is selected from the -Display menu. You can toggle the 45 degree mode setting by -pressing the <Key>. (That is the period key). When 45 degree enforcement -is turned on there are three distinct modes of line creation: a single -line on the closest 45 degree vector towards the cross hair (but not necessarily -actually ending at the cross hair), two lines created such that the first leaves -the start point on a 90 degree vector and the second arrives at the cross hair -on a 45 degree vector, and finally two lines created such that the first leaves -the start point on a 45 degree vector and the second arrives at the cross hair -on a 90 degree vector. These last two modes always connect all the way from -the start and end points, and all lines have angles in 45 degree multiples. -The <Key>/ cycles through the three modes. The status line shows a -text icon to indicate which of the modes is active and the lines following -the cross hair motion show the outline of the line(s) that will actually be created. -Press <Key>Escape to leave line-mode. - -

<Key>l, Shift<Key>l and the entries in the -Sizes menu change the initial width of new lines. This width is also -displayed in the status line. - -

- -


-Next: , -Previous: Lines, -Up: Drawing and Removing - -
- -

3.5.3 Arcs

- -

-An Arc is drawn with the arc-tool. Get there either by selecting it -from the Tool palette or by pressing <Key>F8. Press Btn1 to -define the starting point for the arc. Drag the mouse towards the desired -end point along the path you want the arc to follow. The outline of the arc that -will be created is shown on the screen as you move the mouse. Arcs are always -forced to be 90 degrees and have symmetrical length and width ( i.e. they are -a quarter circle). The next Btn1 click creates the arc. It will have -the same width as new lines (displayed in the status line) and appear on the -active layer. The arc leaves the starting point towards the cross hair along -the axis whose distance from the cross hair is largest. Normally this means that -if you drag along the path you want the arc to follow, you'll get what you -want. If the grid is set to the arc radius, then the two distances will be -equal and you won't be able to get all of the possible directions. If this -is thwarting your desires, reduce the grid spacing (!Shift<Key>G) and -try again. - -

- -


-Next: , -Previous: Arcs, -Up: Drawing and Removing - -
- -

3.5.4 Polygons and Rectangles

- -

-A polygon is drawn by defining all of its segments as a series of -consecutive line segments. If the first point matches a new one and if -the number of points is greater than two, then the polygon is closed. -Since matching up with the first point may be difficult, you may use -Shift<Key>p to close the polygon. The Shift<Key>p won't -work if clipping to 45 degree lines is selected -and the final segment cannot match this condition. -I suggest you create simple convex polygons in order to avoid a strong -negative impact on the performance of the connection scanning routines. -The rectangle-mode is just an easy way to generate rectangular polygons. -Polygon-mode also is selected by <Key>F6 whereas -rectangle-mode uses <Key>F4. -Pressing a <Btn1> at two locations creates a rectangle by -defining two of its corners. -<Key>Insert brings you to insert-point-mode which lets you -add additional points to an already existing polygon. -Single points may be removed by moving the cross hair to them and selecting -one of the delete actions (remove-mode, BackSpace, or Delete. This only works -if the remaining polygon will still have three or more corners. -Pressing <Key>u or <Key>p while entering a new polygon -brings you back to the previous corner. Removing a point does not -force clipping to 45 degree angles (because it's not generally possible). -Newly created polygons will not connect to pins or vias -that pierce it unless you create a thermal (using the thermal mode) to make -the connection. If the edge of a polygon gets too close to a pin or via that -lies outside of it, a warning will be issued and the pin will be given a -special color. Increasing the distance between them will remove the warning -color. - -

- -


-Next: , -Previous: Polygons, -Up: Drawing and Removing - -
- -

3.5.5 Text

- -

-Pressing <Key>F5 or clicking one of the text selector buttons -changes to text-mode. -Each successive notify event (<Btn1>) -pops up the input line at the bottom and queries for a string. -Enter it and press <Key>Return to confirm or -<Key>Escape to abort. -The text object is created with its upper left corner at the current pointer -location. -The initial scaling is changed by <Key>t and -Shift<Key>t or from the Sizes menu. - -

Now switch to rotate-mode and press -<Btn1> at the text-objects location. Text objects -on the solder side of the layout are automatically mirrored and -flipped so that they are seen correctly when viewing the solder-side. - -

Use <Key>n to edit the string. - -

TEXT OBJECTS ON COPPER LAYERS CREATE COPPER LINES BUT THEY ARE NOT SCANNED FOR -CONNECTIONS. If they are moved to the silkscreen layer, they -no longer create copper. - -

- -


-Next: , -Previous: Text, -Up: Drawing and Removing - -
- -

3.5.6 Vias

- -

-The initial size of new vias may be changed by <Key>v and -Shift<Key>v or by selecting the appropriate entry from the -Sizes menu. Mod1<Key>v and Mod1 Shift<Key>v do -the same for the drilling hole of the via. -The statusline is updated with the new values. -Creating a via is similar to the other objects. Switch to via-mode -by using either the selector button or <Key>F1 then press -<Key>] or <Btn1> to create one. -<Key>n changes the name of a via. If you want to create a mounting -hole for your board, then you can place a via where you want the hole to -be then convert the via into a hole. The conversion is done by pressing -!Ctrl<Key>h with the cross hair over the via. Conceptually it is -still a via, but it has no copper annulus. If you create such a hole in -the middle of two polygons on different layers, it will short the layers. -Theoretically you could arrange for such a hole not to be plated, but a -metal screw inserted in the hole would still risk shorting the layers. -A good rule is to realize that holes in the board really are vias between -the layers and so place them where they won't interfere with connectivity. -You can convert a hole back into a normal via with the same keystroke used -to convert it in the first place. - -

- -


-Next: , -Previous: Vias, -Up: Drawing and Removing - -
- -

3.5.7 Elements

- -

-Some of the functions related to elements only work if both the package -layer and the pin layer are switched on. - -

Now that you're familiar with many of the basic commands, it is -time to put the first element on the layout. -First of all, you have to load data into the paste buffer. -There are four ways to do this: -

        1) load the data from a library
-        2) load the data from a file
-        3) copy data from an already existing element
-        4) convert objects in the buffer into an element
-
-

We don't have any elements on the screen yet nor anything in the -buffer, so we use number one. - -

Select lsi from the menu in the library window press -<Btn1> twice at the appropriate text-line to get -the MC68030 CPU. -The data is loaded and the mode is switched to pastebuffer-mode. -Each notify event now creates one of these beasts. Leave the mode -by selecting a different one or by <Key>Escape which resets -all modes.. -The cross hair is located at the mark position as defined by -the data file. Rotating the buffer contents is done by selecting -the rotate entry of the Buffer menu or by pressing -Shift<Key>F3. The contents of the buffer -are valid until new data is loaded into it either by a cut-to-buffer -operation, copy-to-buffer operation or by loading a new data file. -There are 5 buffers -available (possibly more or less if changed at compile time -with the MAX_BUFFER variable in globalconfig.h). -Switching between them is done by selecting a menu entry or -by Shift<Key>1..MAX_BUFFER. -Each of the two board sides has its own buffers. - -

The release includes all data files for the circuits that are used -by the demo layout. The elements in the LED example are not found in the library, -but you can lift them from the example itself if you want. -If you have problems with the color of the cross hair, change the resource -cross hairColor setting to a different one. - -

Now load a second circuit, the MC68882 FPU for example. -Create the circuit as explained above. You now have two different unnamed -elements. Unnamed means that the layout-name of the element -hasn't been set yet. Selecting description from the Display -menu displays the description string of the two circuits which -are CPU and FPU. The values of the circuits are set to MC68030 and MC68882. -Each of the names of an element may be changed -by <Key>n at the elements location and editing the old name in -the bottom input line. Naming pins and vias is similar to elements. -You can hide the element name so that it won't appear on the board -silkscreen by pressing <key>h with the cursor over the element. -Doing so again un-hides the element name. - -

Entering :le and selecting an element data file is -the second way to load circuits. - -

The third way to create a new element is to copy an existing one. -Please refer to Moving and Copying. - -

The fourth way to create a new element is to convert a buffer's contents -into an element. Here's how it's done: Select the Via-tool from the -Tool pallet. Set the grid spacing to something appropriate for -the element pin spacing. Now create a series of vias where the pins -go. Create them in pin number order. It is often handy to place a reference -point (!Ctrl<Key>m) in the center of the first pin in order to measure -the location of the other pins. Next make a solder-side layer the active -layer from the active-layer popup menu. Now draw the outline of -the element using lines and arcs. When you're done, select everything that -makes up the element with a box selection (<Btn3Down> drag, -<Btn3Up>). Now select "cut selection to buffer" from the Buffer -menu. Position the cursor over the center of pin 1 and press the left -button to load the data into the buffer. -Finally select "convert buffer to element" from the Buffer menu. -You'll only want to create elements this way if they aren't already in the -library. It's also probably a good idea to do this before starting any of -the other aspects of a layout, but it isn't necessary. - -

To display the pinout of a circuit move to it and press Shift<Key>d -or select show pinout from the Objects menu. A new window -pops up and displays the complete pinout of the element. This display can -be difficult to read if the component has been rotated 90 degrees :-( -therefore, the new window will show an un-rotated view so the pin names -are readable. -<Key>d displays the name of one or all pins/pads inside the -Layout area, this is only for display on-screen, it has no effect on any -printing of the layout. - -

You also may want to change a pin's or pad's current size by pressing -<Key>s to increase or Shift<Key>s to decrease it. While -this is possible, it is not recommended since care was probably taken -to define the element structure in the first place. You can also change the thickness -of the element's silkscreen outline with the same keys. You can -change whether a pin or SMD pad is rounded or square with the <Key>q. -SMD pads should usually have squared ends. Finally, you can change whether -the non-square pins are round or octagonal with the !Ctrl<Key>o. - -

SMD elements and silkscreen objects are drawn in the "invisible object" -color if they are located on the opposite side of the board. - -

For information on element connections refer to Connection Lists. - -

- -


-Previous: Elements, -Up: Drawing and Removing - -
- -

3.5.8 Pastebuffer

- -

-The line-stack and element-buffer of former releases have been replaced -by 5 (possibly more or less if changed at compile time -with the MAX_BUFFER variable in globalconfig.h) -multi-purpose buffers that are selected by -Shift<Key>1..MAX_BUFFER. The status line shows which buffer is -the active one. -You may load data from a file or layout into them. -Cut-and-paste works too. -If you followed the instructions earlier in this chapter you should -now have several objects on the screen. Move the cross hair to one of them -and press <Btn3Down> to toggle its selection flag. (If you drag the -mouse while the button is down, a box selection will be attempted instead -of toggling the selection.) The object -is redrawn in a different color. You also may want to try -moving the pointer while holding the third button down and -release it on a different location. This selects all objects inside the -rectangle and unselects everything else. If you want to add a box selection -to an existing selection, drag with Mod1<Btn3Down> instead. -Dragging Shift Mod1<Btn3Down> unselects objects in a box. -Now change to pastebuffer-mode and select some operations from the -Buffer menu. Copying objects to the buffer is available as -Mod1<Key>c while cutting them uses Mod1<Key>x as -shortcut. Both clear the buffer before new data is added. -If you use the menu entries, you have to supply a cross hair position by -pressing a mouse button. The objects are attached to the pastebuffer -relative to that cross hair location. -Element data or PCB data may be merged into an existing layout by loading -the datafiles into the pastebuffer. Both operations are available from -the File menu or as user commands. - -

- -


-Next: , -Previous: Drawing and Removing, -Up: Getting Started - -
- -

3.6 Moving and Copying

- -

-All objects can be moved including element-names, by -<Btn2Down>, dragging the pointer while holding the button down -and releasing it at the new location of the object. If you use -Mod1<Btn2Down> instead, the object is copied. Copying does not work for -element-names of course. You can move all selected objects with -Shift <Btn1>. This uses the Pastebuffer, so -it will remove whatever was previously in the Pastebuffer. -Please refer to Pastebuffer. -If you want to give a small nudge to an object, but you don't think -that the mouse will give you the fine level of control that you want, -you can position the cursor over the object, press <Key>[, -move it with the arrow keys, then press <Key>] when it's at the -desired position. Remember that all movements are forced onto grid coordinates, so -you may want to change the grid spacing first. - -

To move a trace or group of traces to a different layer, first select -the tracks to be moved. It's easiest to do this if you shut off everything -but that layer first (i.e. silk, pins, other layers, etc). -Now set the current layer to be the new layer. -Press Shift-M to move all the selected tracks to the current layer. -See the MoveToCurrentLayer action for more details. - -

- -


-Next: , -Previous: Moving and Copying, -Up: Getting Started - -
- -

3.7 Loading and Saving

- -

-After your first experience with Pcb you will probably want to save -your work. :s name passes the data to an external program which -is responsible for saving it. For details see saveCommand in -Resources. -Saving also is available from the File menu, either with or -without supplying a filename. Pcb reuses the last -filename if you do not pass a new one to the save routine. - -

To load an existing layout either select load layout data from the -File menu or use :l filename. A file select box pops up if you -don't specify a filename. Merging existing layouts into the new one is -supported either by the File menu or by :m filename. - -

Pcb saves a backup of the current layout at a user specified interval. -The backup filename is created by appending a dash, "-", to the .pcb filename. -For example, if you are editing the layout in projects/board.pcb then the -backup file name will be projects/board.pcb-. If the layout is new and -has not been saved yet, then the backup file name is PCB.####.backup where the "####" -will be replaced by the process ID of the currenting running copy of Pcb. -This default backup file name may be changed at compilation time via the -BACKUP_NAME -variable in globalconfig.h). During critical -sections of the program or when data would be lost it is saved as -PCB.%i.save. This file name may be changed at compile time -with the SAVE_NAME variable in globalconfig.h. - -

- -


-Next: , -Previous: Loading and Saving, -Up: Getting Started - -
- -

3.8 Printing

- -

-Pcb now has support for device drivers, -PostScript, encapsulated PostScript, -and Gerber RS-274X drivers are -available so far. The Gerber RS-274X -driver additionally generates a numerical control (NC) drill file for -automated drilling, -a bill of materials file to assist in materials procurement and -inventory control, and a centroid (X-Y) file which includes the -centroid data needed -by automatic assembly (pick and place) machines. - I recommend the use of GhostScript if you -don't have a PostScript printer for handling the PostScript -output. Printing always generates -a complete set of files for a specified driver. -See the page about -the Print() action for additional information about the filenames. -The control panel offers a number of options. Most of them are not available -for Gerber output because it wouldn't make sense, for example, to scale the gerber output -(you'd get an incorrectly made board!) The options are: - - - - -

device
The top menu button selects from the available device drivers. - -


rotate
Rotate layout 90 degrees counter-clockwise before printing (default). - -


mirror
Mirror layout before printing. Use this option depending -on your production line. - -


color
Created colored output. All colors will be converted to black if this option -is inactive. - -


outline
Add a board outline to the output file. The size is determined by the -maximum board size changeable from the sizes menu. The outline appears -on the top and bottom sides of the board, but not on the internal layers. -An outline can be useful for determining where to shear the board from the -panel, but be aware that it creates a copper line. Thus it has the potential -to cause short circuits if you don't leave enough room from your wiring -to the board edge. Use a viewer to see what the output outline looks like -if you want to know what it looks like. - -


alignment
Additional alignment targets are added to the output. The distances between -the board outline is set by the resource alignmentDistance. Alignment -targets should only be used if you know for certain that YOU WILL BE USING -THEM YOURSELF. It is extremely unlikely that you will want to have alignment -targets if you send gerber files to a commercial pcb manufacture to be made. - -


scaling
It's quite useful to enlarge your printout for checking the layout. -Use the scrollbar to adjust the scaling factor to your needs. - -


media
Select the size of the output media from this menu. The user defined size -may be set by the resource media either from one of the well known -paper sizes or by a X11 geometry specification. -This entry is only available if you use X11R5 or later. -For earlier releases the user defined size or, if not available, A4 -is used. -Well known size are: -
          	A3
-          	A4
-          	A5
-          	letter
-          	tabloid
-          	ledger
-          	legal
-          	executive
-
-


offset
Adjust the offsets of the printout by using the panner at the right side -of the dialog box. -This entry is only available if you use X11R5 or later. A zero -offset is used for earlier releases. - -


8.3 filenames
Select this button to generate DOS compatible filenames for the output files. -The command input area will disappear if selected. - -


commandline
Use this line to enter a command (starts with |) or a filename. -A %f is replaced by the current filename. -The default is set by the resource printCommand. - -
- -

The created file includes some labels which are guaranteed to stay unchanged -

-
PCBMIN
identifies the lowest x and y coordinates in mil. - -
PCBMAX
identifies the highest x and y coordinates in mil. - -
PCBOFFSET
is set to the x and y offset in mil. - -
PCBSCALE
is a floating point value which identifies the scaling factor. - -
PCBSTARTDATA
PCBENDDATA
all layout data is included between these two marks. You may use them with an -awk script to produce several printouts on one piece of paper by -duplicating the code and putting some translate commands in front. -Note, the normal PostScript units are 1/72 inch. -
- -
- -


-Next: , -Previous: Printing, -Up: Getting Started - -
- -

3.9 Exporting a layout

- -

-To export a layout choose Export layout from the File menu, then -select the desired exporter. - -

- -
- -


-Next: , -Up: Exporting - -
- -

3.9.1 Bill of materials (bom)

- -

-Produces a bill of materials (BOM) file and a centroid (XY) file. - -

- -


-Next: , -Previous: bom, -Up: Exporting - -
- -

3.9.2 G-code (gcode)

- -

-The gcode exporter can generate RS274/NGC G-CODE files to be used with a CNC mill to -produce pcb's by mechanically removing copper from the perimeter of all elements. - -

The elements are enlarged in order to compensate for the cutting tool size so -that the remaining copper corresponds to the original size; however all -polygons are left unchanged and will end up being a little smaller; this is not a -problem because the electrical connection is done with traces, which are correctly -enlarged. - -

A .cnc file is generated for every copper layer, with the bottom layer mirrored so -that the milling is done right; of course it's not possible to produce directly -multi-layer (more than 2) pcb's with this method, but the cnc files for -intermediate layers are generated anyways. - -

A drill file is also generated, and it contains all drills regardless of the hole -size; the drilling sequence is optimized in order to require the least amount of -movement. - -

The export function generates an intermediate raster image before extracting the contour -of copper elements, and this image is saved as well (in .png format) for inspection. - -

When the spacing between two elements is less than the tool diameter they will merge -and no isolation will be cut between them; the control image should be checked for -this behaviour. - -

Possible workarounds are: increasing spacing, decreasing the tool size, increasing -the intermediate image resolution. - -

To maximize the chance of producing correct pcb's it would be better to increase -the DRC clearance to at least the tool diameter and use traces as thick as possible; -the rule is: use the largest element that will not prevent the isolation cut. - -

The exporter parameters are: - -

-
basename
base name for generated files - -
dpi
intermediate image resolution; affects precision when extracting contours - -
mill depth
should be the copper depth - -
safe z
Z value when moving between polygons - -
tool radius
copper elements are enlarged by this amount - -
drill depth
depth of drills - -
measurement unit
for all parameters above, can be mm,um,inch,mil; g-code is always mm or inch -
- -

All .cnc files specify Z values as parameters, so that it's easy to -change them without the need to run the exporter again. - -

Operation was verified with the EMC2 g-code interpreter. - -

Following is a sample layout that is converted with default settings: -

Sample Layout
- -

The control image shows that the spacing is sufficient: -

Control Image
- -

The final tool path follows the perimeter of all elements: -

Resulting Tool Path
- -
- -


-Next: , -Previous: gcode, -Up: Exporting - -
- -

3.9.3 Gerber (gerber)

- -

-Produces RS274-X (a.k.a. gerber) photo plot files and Excellon drill files. - -

- -


-Next: , -Previous: gerber, -Up: Exporting - -
- -

3.9.4 Nelma (nelma)

- -

-Numerical analysis package export. - -

- -


-Next: , -Previous: nelma, -Up: Exporting - -
- -

3.9.5 Image (png)

- -

-Produces GIF/JPEG/PNG image files. - -

- -


-Next: , -Previous: png, -Up: Exporting - -
- -

3.9.6 Postscript (ps)

- -

-Export as postscript. -Can be later converted to pdf. - -

- -


-Previous: ps, -Up: Exporting - -
- -

3.9.7 Encapsulated Postscript (eps)

- -

-Export as eps (encapsulated postscript) for inclusion in other documents. -Can be later converted to pdf. - -

- -


-Previous: Vendor drill mapping, -Up: Getting Started - -
- -

3.10 Connection Lists

- -

-After completing parts of your layout you may want to check if all drawn -connections match the ones you have in mind. This is probably best done -in conjunction with a net-list file: see Rats Nest. -The following examples give more rudimentary ways to examine -the connections. -

         1) create at least two elements and name them
-         2) create some connections between their pins
-         3) optionally add some vias and connections to them
-
-

Now select lookup connection from the Connections menu, -move the cursor to a pin or via and press any mouse button. Pcb -will look for all other pins and/or vias connected to the one you have -selected and display the objects in a different color. -Now try some of the reset options available from the same menu. - -

There also is a way to scan all connections of one element. Select -a single element from the menu and press any button at the -element's location. All connections of this element will be saved -to the specified file. -Either the layout name of the element or its canonical name is used to -identify pins depending on the one which is displayed on the screen -(may be changed by Display menu). - -

An automatic scan of all elements is initiated by choosing -all elements. It behaves in a similar fashion to scanning a single -element except the resource resetAfterElement -is used to determine if connections should be reset before a new element is -scanned. Doing so will produce very long lists because the power lines are -rescanned for every element. By default the resource is set to false -for this reason. - -

To scan for unconnected pins select unused pins from the same -menu. - -

- -


-Next: , -Previous: Exporting, -Up: Getting Started - -
- -

3.11 Arrow Tool

- -

-Some commands mentioned earlier in this chapter also are able to operate on all -selected and visible objects. The Arrow tool is used to select/deselect -objects and also to move objects or selections. If you click and release -on an object with the Arrow tool, it will unselect everything else and -select the object. Selected objects change color to reflect that -they are selected. If you Shift click, it will add the object to -(or remove) the object from the existing selection. If you drag with -the mouse button down with the Arrow tool, one of several things could -happen: if you first pressed the button on a selected object, you -will be moving the selection to where you release the button. If you -first pressed the button on an unselected object, you will be moving -that object. If you first pressed the button over empty space, you -will be drawing a box to select everything inside the box. The Shift -key works the same way with box selections as it does with single objects. - -

Moving a single un-selected object is different from moving a selection. -First of all, you can move the end of line, or a point in a polygon this -way which is impossible by moving selections. Secondly, if rubber banding -is turned on, moving a single object will rubber-band the attached lines. -Finally, it is faster to move a single object this way since there is no need -to select it first. - -

You can select any visible object unless it is locked. If you select an -object, then turn off its visibility with the Layer controls, it won't -be moved if you move the remaining visible selection. - -

If you have not configured to use strokes in the Pcb user interface, then -the middle mouse button is automatically bound to the arrow tool, regardless -of the active tool (which is bound to the first mouse button). So using -the middle button any time is just like using the first mouse button -with the Arrow tool active. - -

The entries of the Selection menu are hopefully self-explanatory. -Many of the Action Commands can take various key words that make -them function on all or some of the selected items. - -

- -


-Next: , -Previous: Arrow Tool, -Up: Getting Started - -
- -

3.12 Rats Nest

- -

-If you have a netlist that corresponds to the layout you are working on, you -can use the rats-nest feature to add rat-lines to the layout. -First you will need to load a netlist file (see :rn, -User Commands). -<Key>w adds rat-lines on the active layer using the current -line thickness shown in the status line (usually you'll want them to be thin lines). -Only those rat-lines that fill in missing connectivity (since you have -probably routed some connections already) are added. -If the layout is already completely wired, nothing will be added, and you will -get a message that the wiring is complete. - -

Rat-lines are lines having the special property that they only connect to pins and -pads at their end points. Rat-lines may be drawn differently to other lines -to make them easier to identify since they have special behavior and cannot -remain in a completed layout. -Rat-lines are added in the minimum length straight-line tree pattern -(always ending on pins or pads) that satisfies the missing connectivity in the circuit. -Used in connection with moves and rotates of the elements, they are extremely useful for -deciding where to place elements on the board. The rat-lines will always automatically -rubberband to the elements whether or not the rubberband mode is on. The only way for -you to move them is by moving the parts they connect to. -This is because it is never desirable to have the rat-lines disconnected from -their element pins. Rat-lines will normally criss-cross -all over which gives rise to the name "rats nest" describing a layout connected with -them. If a SMD pad is unreachable on the active layer, a warning will be issued -about it and the rat-line to that pad will not be generated. - -

A common way to use rats nests is to place some -elements on the board, add the rat-lines, and then use a series of moves/rotates of the -elements until the rats nest appears to have minimum tangling. You may want to iterate this step -several times. Don't worry if the layout looks messy - as long as you can get a sense for whether -the criss-crossing is better or worse as you move things, you're fine. -After moving some elements around, you may want to optimize the rats nest <Key>o -so that the lines are drawn between the closest points (this can change once you've moved components). -Adding rat-lines only to selected pads/pins (Shift<Key>w) -is often useful to layout a circuit a little bit at a time. -Sometimes you'll want to delete all the rat-lines (<Key>e) or -selected rat-lines (Shift<Key>e) in order to reduce confusion. -With a little practice you'll be able to achieve a near optimal component placement with -the use of a rats nest. - -

Rat-lines are not only used for assisting your element placement, they can also help -you to route traces on the board. -Use the <Key>m to convert a rat-line under the cursor into -a normal line on the active layer. -Inserting a point into a rat-line will also cause the two new lines to be normal lines -on the board. -Another way that you can use rat-lines is to -use the <Key>f with the cursor over a pad or pin. All of the pins and -pads and rat-lines belonging to that net will be highlighted. This is a helpful way to -distinguish one net from the rest of the rats nest. You can then route those tracks, -turn off the highlighting (Shift<Key>f) and repeat the process. This will work even -if the layer that the rat-lines reside on is made invisible - so only the pins and pads -are highlighted. -Be sure to erase the rat-lines (<Key>e erases them all) once you've -duplicated their connectivity by adding your own lines. -When in doubt, the <Key>o will delete only those -rat-lines that are no longer needed. - -

If connections exist on the board that are not listed in the netlist when -<Key>w is pressed, warning messages are issued and the affected pins and -pads are drawn in a special warnColor until the next Notify() event. -If the entire layout agrees completely with the netlist, a message informs you that -the layout is complete and no rat-lines will be added (since none are needed). -If the layout is complete, but still has rat-lines then you will be warned -that rat-lines remain. If you get no message at all it's probably because some -elements listed in the net list can't be found and where reported in an earlier -message. -There shouldn't be any rat-lines left in a completed layout, only normal lines. - -

The Shift<Key>w is used to add rat-lines to only those missing connections among -the selected pins and pads. This can be used to add rat-lines in an incremental -manner, or to force a rat-line to route between two points that are not the -closest points within the net. Often it is best to add the rats nest in an incremental fashion, laying -out a sub-section of the board before going further. This is easy to accomplish since -new rat-lines are never added where routed connectivity already makes the necessary -connections. - -

- -


-Next: , -Previous: Rats Nest, -Up: Getting Started - -
- -

3.13 Design Rule Checking

- -

-After you've finished laying out a board, you may want to check -to be certain that none of your interconnections are too closely -spaced or too tenuously touching to be reliably fabricated. The design -rule checking (DRC) function does this for you. Use the command ":DRC()" (without -the quotes of course) to invoke the checker. If there are no problem areas, -you'll get a message to that effect. If any problem is encountered, you will get -a message about it and the affected traces will be highlighted. One part of the -tracks of concern will be selected, while the other parts of concern will have the -"FindConnection" highlighting. The screen will automatically be centered in the -middle of the object having the "FindConnection" (Green) highlighting. The middle of -the object is also the coordinates reported to be "near" the problem. The actual trouble -region will be somewhere on the boundary of this object. If the two parts are -from different nets then there is some place where they approach each -other closer than the minimum rule. If the parts are from the same net, then -there is place where they are only barely connected. Find that place and connect -them better. - -

After a DRC error is found and corrected you must run the DRC again because -the search for errors is halted as soon as the first problem is found. Unless you've -been extremely careless there should be no more than a few design rule errors -in your layout. The DRC checker does not check for minimum spacing rules to -copper text, so always be very careful when adding copper text to a layout. -The rules for the DRC are specified in the application resource file. The minimum -spacing value (in mils) is given by the Settings.Bloat value. The default -is 7 mils. The minimum touching overlap (in mils) is given by the -Settings.Shrink value. This value defaults to 5 mils. Check with your -fabrication process people to determine the values that are right for you. - -

If you want to turn off the highlighting produced by the DRC, perform an -undo (assuming no other changes have been made). To restore the highlighting, -use redo. The redo will restore the highlighting quickly without re-running -the DRC checker. - -

- -


-Next: , -Previous: Design Rule Checking, -Up: Getting Started - -
- -

3.14 Trace Optimizer

- -

-PCB includes a flexible trace optimizer. The trace optimizer can be run -after auto routing or hand routing to clean up the traces. - -

-
Auto-Optimize
Performs debumpify, unjaggy, orthopull, vianudge, and viatrim, in that -order, repeating until no further optimizations are performed. - -
Debumpify
Looks for U shaped traces that can be shortened or eliminated. - -
Unjaggy
Looks for corners which could be flipped to eliminate one or more -corners (i.e. jaggy lines become simpler). - -
Vianudge
Looks for vias where all traces leave in the same direction. Tries to -move via in that direction to eliminate one of the traces (and thus a -corner). - -
Viatrim
Looks for traces that go from via to via, where moving that trace to a -different layer eliminates one or both vias. - -
Orthopull
Looks for chains of traces all going in one direction, with more traces -orthogonal on one side than on the other. Moves the chain in that -direction, causing a net reduction in trace length, possibly eliminating -traces and/or corners. - -
SimpleOpts
Removing unneeded vias, replacing two or more trace segments in a row -with a single segment. This is usually performed automatically after -other optimizations. - -
Miter
Replaces 90 degree corners with a pair of 45 degree corners, to reduce -RF losses and trace length. - -
- -
- -


-Next: , -Previous: Trace Optimizer, -Up: Getting Started - -
- -

3.15 Searching for elements

- -

-To locate text or a specific element or grouping of similar elements -choose ‘Select by name’ from the Select menu, then choose the -appropriate subsection. At the bottom of the screen the prompt -pattern: appears. Enter the text or Regular Expressions -of the text to be found. Found text will be highlighted. - -

- -


-Next: , -Previous: Searching for elements, -Up: Getting Started - -
- -

3.16 Measuring distances

- -

-To measure distances, for example the pin-to-pin pitch of a part to -validate a footprint, place the cursor at the starting -measurement point, then press !Ctrl<Key>m. This marks the -current location with a X. The X mark is now the zero point -origin for the relative cursor position display. The cursor display -shows both absolute position and position relative to the mark as -the mouse is moved away from the mark. If a mark is already present, -the mark is removed and the cursor display stops displaying relative -cursor coordinates. - -

- -


-Next: , -Previous: Measuring distances, -Up: Getting Started - -
- -

3.17 Vendor Drill Mapping

- -

-Pcb includes support for mapping drill holes to a specified set -of sizes used by a particular vendor. Many PCB manufacturers have a -prefered set of drill sizes and charge extra when others are used. -The mapping can be performed on an existing design and can also be -enabled to automatically map drill holes as vias and elements are -instantiated. - -

The first step in using the vendor drill mapping feature is to create -a resource file describing the capabilities of your vendor. The file -format is the resource file format described in Resource Syntax. -A complete example is given below. - -

     # Optional name of the vendor
-     vendor = "Vendor Name"
-     
-     # units for dimensions in this file.
-     # Allowed values:  mil/inch/mm
-     units = mil
-     
-     # drill table
-     drillmap = {
-        # When mapping drill sizes, select the nearest size
-        # or always round up.  Allowed values:  up/nearest
-        round = up
-     
-        # The list of vendor drill sizes.  Units are as specified
-        # above.
-        20
-        28
-        35
-        38
-        42
-        52
-        59.5
-        86
-       125
-       152
-     
-        # optional section for skipping mapping of certain elements
-        # based on reference designator, value, or description
-        # this is useful for critical parts where you may not
-        # want to change the drill size.  Note that the strings
-        # are regular expressions.
-        skips = {
-           {refdes "^J3$"}  # Skip J3.
-           {refdes "J3"}  # Skip anything with J3 as part of the refdes.
-           {refdes "^U[1-3]$" "^X.*"} # Skip U1, U2, U3, and anything starting with X.
-           {value "^JOHNSTECH_.*"} # Skip all Johnstech footprints based on the value of a part.
-           {descr "^AMP_MICTOR_767054_1$"} # Skip based on the description.
-        }
-     }
-     
-     # If specified, this section will change the current DRC
-     # settings for the design.  Units are as specified above.
-     drc = {
-        copper_space = 7
-        copper_width = 7
-        silk_width = 10
-        copper_overlap = 4
-     }
-
-

The vendor resource is loaded using the LoadVendor action. -This is invoked by entering: -

     :LoadVendor(vendorfile)
-
-

from within Pcb. Substitute the file name of your vendor -resource file for ‘vendorfile’. This action will load the vendor -resource and modify all the drill holes in the design as well as the -default via hole size for the various routing styles. - -

Once a vendor drill map has been loaded, new vias and elements will -automatically have their drill hole sizes mapped to the vendor drill -table. Automatic drill mapping may be disabled under the “Settings” -menu. To re-apply an already loaded vendor drill table to a design, -choose “Apply vendor drill mapping” from the “Connects” menu. - -

See Actions for a complete description of the actions associated -with vendor drill mapping. - -

Note that the expressions used in the skips section are regular -expressions. See Regular Expressions for an introduction to -regular expressions. - - -

- -


-Next: , -Previous: Getting Started, -Up: Top - -
- -

4 Autorouter

- -

-Pcb includes an autorouter which can greatly speed up the -layout of a circuit board. The autorouter is a rectangle-expansion -type of autorouter based on -“A Method for Gridless Routing of Printed Circuit Boards” by -A. C. Finch, K. J. Mackenzie, G. J. Balsdon, and G. Symonds in the -1985 Proceedings of the 22nd ACM/IEEE Design Automation Conference. -This reference is available from the ACM Digital Library at -http://www.acm.org/dl for those with institutional or personal -access to it. It's also available from your local engineering -library. The reference paper is not needed for using the autorouter. - -

Before using the autorouter, all elements need to be loaded into the -layout and placed and the connectivity netlist must be loaded. Once -the elements have been placed and the netlist loaded, the following -steps will autoroute your design. - -

    -
  1. Turn off visibility of any layers that you don't want the router -to use. - -
  2. Turn of via visibility if you don't want the router to use any -new vias. - -
  3. Use only plain rectangles for power/ground planes that you want - the router to use [use the rectangle tool!] - -
  4. Make at least one connection from any plane you want the router to - use to the net you want it to connect to. - -
  5. Draw continuous lines (on all routing layers) to outline keep-out - zones if desired. - -
  6. Use routing styles in the netlist to have per-net routing styles. - Note that the routing style will be used for an entire net. This means - if you have a wide metal setting for a power net you will need to manually - route breakouts from any fine pitch parts on their power pins because - the router will not be able to change to a narrow trace to connect - to the part. - -
  7. Set the current routing style to whatever you'd like the router to - use for any nets not having a defined route style in the netlist. - -
  8. Disable any nets that you don't want the autorouter to route - (double-click them in the netlist window to add/remove the *) - -

    NOTE: If you will be manually routing these later not using - planes, it is usually better to let the autorouter route them then rip - them up yourself afterwards. If you plan to use a ground/power plane - manually, consider making it from one or more pure rectangles and - letting the autorouter have a go at it. - -

  9. Create a fresh rat's nest. ('E' the 'W') - -
  10. Select “show autorouter trials” in the settings menu if you want - to watch what's happening - -
  11. Choose “autoroute all rats” in the connection menu. - -
  12. If you really want to muck with the router because you have a - special design, e.g. all through-hole components you can mess with - layer directional costs by editing the autoroute.c source file and - changing the directional costs in lines 929-940. and try again. Even - more mucking about with costs is possible in lines 4540-4569, but it's - probably not such a good idea unless you really just want to - experiment. - -
- -

After the design has been autorouted, you may want to run the trace -optimizer. See section Trace Optimizer for more information on -the trace optimizer. - - -

- -


-Next: , -Previous: Autorouter, -Up: Top - -
- -

5 User Commands

- -

The entering of user-commands is initiated by the action routine -Command() (normally bound to the (":") character) which -replaces the bottom statusline with an input area or opens a separate -command window. It is finished by either <Key>Return or -<Key>Escape to confirm or to abort. These two key-bindings -cannot be changed from the resource file. The triggering event, -normally a key press, is ignored. - -

Commands can be entered in one of two styles, command entry syntax: -“Command arg1 arg2” or action script syntax “Action1(arg1, -arg2); Action2(arg1, arg2);”. Quoting arguments works similar to -bash quoting: - -

    -
  • A backslash (\) is the escape character. It preserves the literal -value of the next character that follows. To get a literal '\' use -"\\". - -
  • Enclosing characters in single quotes preserves the literal value of -each character within the quotes. A single quote may not occur -between single quotes, even when preceded by a blackslash. - -
  • Enclosing characters in double quotes preserves the literal value of -all characters within the quotes, with the exception of '\' which -maintains its special meaning as an escape character. -
- -

There are simple usage dialogs for each command and one for the -complete set of commands. - - - - - -

l [filename]
Loads a new datafile (layout) and, if confirmed, overwrites any existing unsaved data. -The filename and the searchpath (filePath) are passed to the -command defined by fileCommand. -If no filename is specified a file select box will popup. - -


le [filename]
Loads an element description into the paste buffer. -The filename and the searchpath (elementPath) are passed to the -command defined by elementCommand. -If no filename is specified a file select box will popup. - -


m [filename]
Loads an layout file into the paste buffer. -The filename and the searchpath (filePath) are passed to the -command defined by fileCommand. -If no filename is specified a file select box will popup. - -


q[!]
Quits the program without saving any data (after confirmation). -q! doesn't ask for confirmation, it just quits. - -


s [filename]
Data and the filename are passed to the command defined by the resource -saveCommand. It must read the layout data from stdin. -If no filename is entered, either the last one is used -again or, if it is not available, a file select box will pop up. - -


rn [filename]
Reads in a netlist file. If no filename is given -a file select box will pop up. -The file is read via the command defined by the -RatCommand resource. The command must send its output to stdout. - -

Netlists are used for generating rat's nests (see Rats Nest) and for -verifying the board layout (which is also accomplished by the Ratsnest -command). - -


w[q] [filename]
These commands have been added for the convenience of vi users and -have the same functionality as s combined with q. - -


actionCommand
Causes the actionCommand to be executed. This allows you to initiate actions -for which no bindings exist in the resource file. It can be used to initiate any -action with whatever arguments you enter. This makes it possible to do things -that otherwise would be extremely tedious. For example, to change the drilling -hole diameter of all vias in the layout to 32 mils, you could select everything using the -selection menu, then type ":ChangeDrillSize(SelectedVias, 32)". (This will -only work provided the via's diameter is sufficiently large to accommodate a 32 mil hole). -Another example might be to set the grid to 1 mil by typing ":SetValue(Grid, 1)". -Note that some actions use the current cursor location, so be sure to place the cursor -where you want before entering the command. This is one of my favorite new -features in 1.5 and can be a powerful tool. Study the Actions section to -see what actions are available. - -
- - -
- - -


-Next: , -Previous: User Commands, -Up: Top - -
- -

6 Command-Line Options

- -

-The synopsis of the pcb command is: - -

pcb [OPTION ...] [LAYOUT-FILE.pcb] to start the application in GUI mode, - -

or - -

pcb [-h | -V | --copyright] for a list of options, version, and copyright, - -

or - -

pcb -p [OPTION ...] [LAYOUT-FILE.pcb] to print a layout, - -

or - -

pcb -x HID [OPTION ...] [LAYOUT-FILE.pcb] to export. - -

Possible values for the parameter ‘HID’ are: -

-
bom
Export a bill of materials -
gcode
Export to G-Code -
gerber
Export RS-274X (Gerber) -
nelma
Numerical analysis package export -
png
export GIF/JPEG/PNG -
ps
export postscript -
eps
export encapsulated postscript -
- -

There are several resources which may be set or reset in addition to the -standard toolkit command-line options. For a complete list refer to -Resources. - - -

- - - -

6.1 General Options

- - -
-
--help
Show help on command line options. -
- -
-
--version
Show version. -
- -
-
--verbose
Be verbose on stdout. -
- -
-
--copyright
Show copyright. -
- -
-
--show-defaults
Show option defaults. -
- -
-
--show-actions
Show available actions and exit. -
- -
-
--dump-actions
Dump actions (for documentation). -
- -
-
--grid-units-mm <string>
Set default grid units. Can be mm or mil. Defaults to mil. -
- -
-
--backup-interval
Time between automatic backups in seconds. Set to 0 to disable. -The default value is 60. -
- -
-
--groups <string>
Layer group string. Defaults to "1,c:2:3:4:5:6,s:7:8". -
- -
-
--route-styles <string>
A string that defines the route styles. Defaults to
-"Signal,1000,3600,2000,1000:Power,2500,6000,3500,1000 - :Fat,4000,6000,3500,1000:Skinny,600,2402,1181,600" -
- -
-
--element-path <string>
A colon separated list of directories or commands (starts with '|'). -The path is passed to the program specified in --element-command. -
- -
-
--action-script <string>
If set, this file is executed at startup. -
- -
-
--action-string <string>
If set, this string of actions is executed at startup. -
- -
-
--fab-author <string>
Name of author to be put in the Gerber files. -
- -
-
--layer-stack <string>
Initial layer stackup, for setting up an export. A comma separated list of layer -names, layer numbers and layer groups. -
- -
-
--save-last-command
If set, the last user command is saved. -
- -
-
--save-in-tmp
If set, all data which would otherwise be lost are saved in a temporary file -/tmp/PCB.%i.save . Sequence ‘%i’ is replaced by the process ID. -
- -
-
--reset-after-element
If set, all found connections are reset before a new component is scanned. -
- -
-
--ring-bell-finished
Execute the bell command when all rats are routed. -
- -
- -


-Next: , -Previous: General Options, -Up: Command-Line Options - -
- -

6.2 General GUI Options

- - -
-
--pinout-offset-x <num>
Horizontal offset of the pin number display. Defaults to 100mil. -
- -
-
--pinout-offset-y <num>
Vertical offset of the pin number display. Defaults to 100mil. -
- -
-
--pinout-text-offset-x <num>
Horizontal offset of the pin name display. Defaults to 800mil. -
- -
-
--pinout-text-offset-y <num>
Vertical offset of the pin name display. Defaults to -100mil. -
- -
-
--draw-grid
If set, draw the grid at start-up. -
- -
-
--clear-line
If set, new lines clear polygons. -
- -
-
--full-poly
If set, new polygons are full ones. -
- -
-
--unique-names
If set, you will not be permitted to change the name of an component to match that -of another component. -
- -
-
--snap-pin
If set, pin centers and pad end points are treated as additional grid points -that the cursor can snap to. -
- -
-
--all-direction-lines
Allow all directions, when drawing new lines. -
- -
-
--show-number
Pinout shows number. -
- -
- - -


-Next: , -Previous: General GUI Options, -Up: Command-Line Options - -
- -

6.3 GTK+ GUI Options

- - -
-
--listen
Listen for actions on stdin. -
- -
-
--bg-image <string>
File name of an image to put into the background of the GUI canvas. The image must -be a color PPM image, in binary (not ASCII) format. It can be any size, and will be -automatically scaled to fit the canvas. -
- -
-
--pcb-menu <string>
Location of the gpcb-menu.res file which defines the menu for the GTK+ GUI. -
- -
- -


-Next: , -Previous: GTK+ GUI Options, -Up: Command-Line Options - -
- -

6.4 lesstif GUI Options

- - -
-
--listen
Listen for actions on stdin. -
- -
-
--bg-image <string>
File name of an image to put into the background of the GUI canvas. The image must -be a color PPM image, in binary (not ASCII) format. It can be any size, and will be -automatically scaled to fit the canvas. -
- -
-
--pcb-menu <string>
Location of the pcb-menu.res file which defines the menu for the lesstif GUI. -
- -
- -


-Next: , -Previous: lesstif GUI Options, -Up: Command-Line Options - -
- -

6.5 Colors

- - -
-
--black-color <string>
Color value for black. Default: ‘#000000’ -
- -
-
--black-color <string>
Color value for white. Default: ‘#ffffff’ -
- -
-
--background-color <string>
Background color of the canvas. Default: ‘#e5e5e5’ -
- -
-
--crosshair-color <string>
Color of the crosshair. Default: ‘#ff0000’ -
- -
-
--cross-color <string>
Color of the cross. Default: ‘#cdcd00’ -
- -
-
--via-color <string>
Color of vias. Default: ‘#7f7f7f’ -
- -
-
--via-selected-color <string>
Color of selected vias. Default: ‘#00ffff’ -
- -
-
--pin-color <string>
Color of pins. Default: ‘#4d4d4d’ -
- -
-
--pin-selected-color <string>
Color of selected pins. Default: ‘#00ffff’ -
- -
-
--pin-name-color <string>
Color of pin names and pin numbers. Default: ‘#ff0000’ -
- -
-
--element-color <string>
Color of components. Default: ‘#000000’ -
- -
-
--rat-color <string>
Color of ratlines. Default: ‘#b8860b’ -
- -
-
--invisible-objects-color <string>
Color of invisible objects. Default: ‘#cccccc’ -
- -
-
--invisible-mark-color <string>
Color of invisible marks. Default: ‘#cccccc’ -
- -
-
--element-selected-color <string>
Color of selected components. Default: ‘#00ffff’ -
- -
-
--rat-selected-color <string>
Color of selected rats. Default: ‘#00ffff’ -
- -
-
--connected-color <string>
Color to indicate connections. Default: ‘#00ff00’ -
- -
-
--off-limit-color <string>
Color of off-canvas area. Default: ‘#cccccc’ -
- -
-
--grid-color <string>
Color of the grid. Default: ‘#ff0000’ -
- -
-
--layer-color-<n> <string>
Color of layer <n>, where <n> is an integer from 1 to 16. -
- -
-
--layer-selected-color-<n> <string>
Color of layer <n>, when selected. <n> is an integer from 1 to 16. -
- -
-
--warn-color <string>
Color of offending objects during DRC. Default value is "#ff8000" -
- -
-
--mask-color <string>
Color of the mask layer. Default value is "#ff0000" -
- -
- -


-Next: , -Previous: Colors, -Up: Command-Line Options - -
- -

6.6 Layer Names

- - -
-
--layer-name-1 <string>
Name of the 1st Layer. Default is "top". -
- -
-
--layer-name-2 <string>
Name of the 2nd Layer. Default is "ground". -
- -
-
--layer-name-3 <string>
Name of the 3nd Layer. Default is "signal2". -
- -
-
--layer-name-4 <string>
Name of the 4rd Layer. Default is "signal3". -
- -
-
--layer-name-5 <string>
Name of the 5rd Layer. Default is "power". -
- -
-
--layer-name-6 <string>
Name of the 6rd Layer. Default is "bottom". -
- -
-
--layer-name-7 <string>
Name of the 7rd Layer. Default is "outline". -
- -
-
--layer-name-8 <string>
Name of the 8rd Layer. Default is "spare". -
- -
- -


-Next: , -Previous: Layer Names, -Up: Command-Line Options - -
- -

6.7 Paths

- - -
-
--lib-newlib <string>
Top level directory for the newlib style library. -
- -
-
--lib-name <string>
The default filename for the library. -
- -
-
--default-font <string>
The name of the default font. -
- -
-
--file-path <string>
A colon separated list of directories or commands (starts with '|'). The path -is passed to the program specified in --file-command together with the selected -filename. -
- -
-
--font-path <string>
A colon separated list of directories to search the default font. Defaults to -the default library path. -
- -
-
--lib-path <string>
A colon separated list of directories that will be passed to the commands specified -by --element-command and --element-contents-command. -
- -
- -


-Next: , -Previous: Paths, -Up: Command-Line Options - -
- -

6.8 Sizes

- - -

All parameters should be given with an unit. If no unit is given, 1/100 mil -(cmil) will be used. Write units without space to the -number like 3mm, not 3 mm. -Valid Units are: -

-
km
Kilometer -
m
Meter -
cm
Centimeter -
mm
Millimeter -
um
Micrometer -
nm
Nanometer -
in
Inch (1in = 0.0254m) -
mil
Mil (1000mil = 1in) -
cmil
Centimil (1/100 mil) -
- -
-
--via-thickness <num>
Default diameter of vias. Default value is 60mil. -
- -
-
--via-drilling-hole <num>
Default diameter of holes. Default value is 28mil. -
- -
-
--line-thickness <num>
Default thickness of new lines. Default value is 10mil. -
- -
-
--rat-thickness <num>
Thickness of rats. Values from 1 to 19 are fixed width in screen pixels. -Anything larger means PCB units (i.e. 100 means "1 mil"). Default value -is 10mil. -
- -
-
--keepaway <num>
Default minimum distance between a track and adjacent copper. -Default value is 10mil. -
- -
-
--default-PCB-width <num>
Default width of the canvas. Default value is 6000mil. -
- -
-
--default-PCB-height <num>
Default height of the canvas. Default value is 5000mil. -
- -
-
--text-scale <num>
Default text scale. This value is in percent. Default value is 100. -
- -
-
--alignment-distance <num>
Specifies the distance between the board outline and alignment targets. -Default value is 2mil. -
- -
-
--grid <num>
Initial grid size. Default value is 10mil. -
- -
-
--minimum polygon area <num>
Minimum polygon area. -
- -
- -


-Next: , -Previous: Sizes, -Up: Command-Line Options - -
- -

6.9 Commands

- - -

pcb uses external commands for input output operations. These commands can be -configured at start-up to meet local requirements. The command string may include -special sequences %f, %p or %a. These are replaced when the -command is called. The sequence %f is replaced by the file name, -%p gets the path and %a indicates a package name. - -

-
--font-command <string>
Command to load a font. -
- -
-
--file-command <string>
Command to read a file. -
- -
-
--element-command <string>
Command to read a footprint.
-Defaults to "M4PATH='%p';export M4PATH;echo 'include(%f)' | m4" -
- -
-
--print-file <string>
Command to print to a file. -
- -
-
--lib-command-dir <string>
Path to the command that queries the library. -
- -
-
--lib-command <string>
Command to query the library.
-Defaults to "QueryLibrary.sh '%p' '%f' %a" -
- -
-
--lib-contents-command <string>
Command to query the contents of the library.
-Defaults to "ListLibraryContents.sh %p %f" or, -on Windows builds, an empty string (to disable this feature). -
- -
-
--save-command <string>
Command to save to a file. -
- -
-
--rat-command <string>
Command for reading a netlist. Sequence %f is replaced by the netlist filename. -
- -
- -


-Next: , -Previous: Commands, -Up: Command-Line Options - -
- -

6.10 DRC Options

- - -

All parameters should be given with an unit. If no unit is given, 1/100 mil -(cmil) will be used for backward compability. Valid units are given in section -Sizes. - -

-
--bloat <num>
Minimum spacing. Default value is 10mil. -
- -
-
--shrink <num>
Minimum touching overlap. Default value is 10mil. -
- -
-
--min-width <num>
Minimum width of copper. Default value is 10mil. -
- -
-
--min-silk <num>
Minimum width of lines in silk. Default value is 10mil. -
- -
-
--min-drill <num>
Minimum diameter of holes. Default value is 15mil. -
- -
-
--min-ring <num>
Minimum width of annular ring. Default value is 10mil. -
- -
- -


-Next: , -Previous: DRC Options, -Up: Command-Line Options - -
- -

6.11 BOM Creation

- - -
-
--bomfile <string>
Name of the BOM output file. -
- -
-
--xyfile <string>
Name of the XY output file. -
- -
-
--xy-unit <unit>
Unit of XY dimensions. Defaults to mil. -
- -
- -


-Next: , -Previous: BOM Creation, -Up: Command-Line Options - -
- -

6.12 Gerber Export

- - -
-
--gerberfile <string>
Gerber output file prefix. Can include a path. -
- -
-
--all-layers
Output contains all layers, even empty ones. -
- -
-
--verbose
Print file names and aperture counts on stdout. -
- - - -

6.13 Postscript Export

- - -
-
--psfile <string>
Name of the postscript output file. Can contain a path. -
- - - -
--drill-helper
Print a centering target in large drill holes. -
- - - -
--align-marks
Print alignment marks on each sheet. This is meant to ease alignment during exposure. -
- -
-
--outline
Print the contents of the outline layer on each sheet. -
- -
-
--mirror
Print mirror image. -
- -
-
--fill-page
Scale output to make the board fit the page. -
- -
-
--auto-mirror
Print mirror image of appropriate layers. -
- -
-
--ps-color
Postscript output in color. -
- - - -
--ps-bloat <num>
Amount to add to trace/pad/pin edges. -
- - - -
--ps-invert
Draw objects as white-on-black. -
- -
-
--media <media-name>
Size of the media, the postscript is fitted to. The parameter -<media-name> can be any of the standard names for paper size: ‘A0’ -to ‘A10’, ‘B0’ to ‘B10’, ‘Letter’, ‘11x17’, -‘Ledger’, ‘Legal’, ‘Executive’, ‘A-Size’, ‘B-size’, -‘C-Size’, ‘D-size’, ‘E-size’, ‘US-Business_Card’, -‘Intl-Business_Card’. -
- - - -
--psfade <num>
Fade amount for assembly drawings (0.0=missing, 1.0=solid). -
- -
-
--scale <num>
Scale value to compensate for printer sizing errors (1.0 = full scale). -
- - - -
--multi-file
Produce multiple files, one per page, instead of a single multi page file. -
- -
-
--xcalib <num>
Paper width. Used for x-Axis calibration. -
- -
-
--ycalib <num>
Paper height. Used for y-Axis calibration. -
- -
-
--drill-copper
Draw drill holes in pins / vias, instead of leaving solid copper. -
- - - -
--show-legend
Print file name and scale on printout. -
- -
- -


-Next: , -Previous: Postscript Export, -Up: Command-Line Options - -
- -

6.14 Encapsulated Postscript Export

- - -
-
--eps-file <string>
Name of the encapsulated postscript output file. Can contain a path. -
- -
-
--eps-scale <num>
Scale EPS output by the parameter ‘num’. -
- - - -
--as-shown
Export layers as shown on screen. -
- -
-
--monochrome
Convert output to monochrome. -
- - - -
--only-visible
Limit the bounds of the EPS file to the visible items. -
- - - -

6.15 PNG Options

- - -
-
--outfile <string>
Name of the file to be exported to. Can contain a path. -
- -
-
--dpi
Scale factor in pixels/inch. Set to 0 to scale to size specified in the layout. -
- -
-
--x-max
Width of the png image in pixels. No constraint, when set to 0. -
- -
-
--y-max
Height of the png output in pixels. No constraint, when set to 0. -
- -
-
--xy-max
Maximum width and height of the PNG output in pixels. No constraint, when set to 0. -
- -
-
--as-shown
Export layers as shown on screen. -
- -
-
--monochrome
Convert output to monochrome. -
- -
-
--only-vivible
Limit the bounds of the exported PNG image to the visible items. -
- -
-
--use-alpha
Make the background and any holes transparent. -
- -
-
--format <string>
File format to be exported. Parameter <string> can be ‘PNG’, -‘GIF’, or ‘JPEG’. -
- -
-
--png-bloat <num><dim>
Amount of extra thickness to add to traces, pads, or pin edges. The parameter -‘<num><dim>’ is a number, appended by a dimension ‘mm’, ‘mil’, or -‘pix’. If no dimension is given, the default dimension is 1/100 mil. -
- - - -
--photo-mode
Export a photo realistic image of the layout. -
- -
-
--photo-flip-x
In photo-realistic mode, export the reverse side of the layout. Left-right flip. -
- -
-
--photo-flip-y
In photo-realistic mode, export the reverse side of the layout. Up-down flip. -
- -
- -


-Next: , -Previous: PNG Options, -Up: Command-Line Options - -
- -

6.16 lpr Printing Options

- - -
-
--lprcommand <string>
Command to use for printing. Defaults to lpr. This can be used to produce -PDF output with a virtual PDF printer. Example:
---lprcommand "lp -d CUPS-PDF-Printer". -
-In addition, all Postscript Export options are valid. - -
- -


-Previous: lpr Printing Options, -Up: Command-Line Options - -
- -

6.17 nelma Options

- - -
-
-- basename <string>
File name prefix. -
- -
-
--dpi <num>
Horizontal scale factor (grid points/inch). -
- -
-
--copper-height <num>
Copper layer height (um). -
- -
-
--substrate-height <num>
Substrate layer height (um). -
- -
-
--substrate-epsilon <num>
Substrate relative epsilon. -
- - -
- -


-Next: , -Previous: Command-Line Options, -Up: Top - -
- -

7 X11 Interface

- -

-This chapter gives an overview about the additional X11 resources which -are defined by Pcb as well as the defined action routines. - -

- -
- -


-Next: , -Up: X11 Interface - -
- -

7.1 Non-Standard X11 Application Resources

- -

-In addition to the toolkit resources, Pcb defines the -following resources: - - - - -

absoluteGrid (boolean)
Selects if either the grid is relative to the position where it has changed -last or absolute, the default, to the origin (0,0). - -


alignmentDistance (dimension)
Specifies the distance between the boards outline to the alignment targets. - -


allDirectionLines (boolean)
Enables (default) or disables clipping of new lines to 45 degree angles. - -


backgroundImage (string)
If specified, this image will be drawn as the background for the -board. The purpose of this option is to allow you to use a scan of an -existing layout as a prototype for your new layout. To do this, there -are some limitations as to what this image must be. The image must be -a PPM binary image (magic number ‘P6’). It must have a maximum -pixel value of 255 or less (i.e. no 16-bit images). It must represent -the entire board, as it will be scaled to fit the board dimensions -exactly. Note that it may be scaled unevenly if the image doesn't -have the same aspect ratio of your board. You must ensure that the -image does not use more colors than are available on your system -(mostly this is for pseudo-color displays, like old 8-bit displays). -For best results, I suggest the following procedure using The Gimp: -Load your image (any type). Image->Scale if needed. -Image->Colors->Curves and for each of Red, Green, and Blue channel -move the lower left point up to about the 3/4 line (value 192). This -will make your image pale so it doesn't interfere with the traces -you'll be adding. Image->Mode->Indexed and select, say, 32 colors -with Normal F-S dithering. File->Save As, file type by extension, -use .ppm as the extension. Select Raw formatting. - -


backupInterval (int)
Pcb has an automatic backup feature which saves the current data -every n seconds. The default is 300 seconds. A value of zero disables -the feature. The backup file is named /tmp/PCB.%i.backup by -default (this may have been changed at compilation time via the -BACKUP_NAME -variable in globalconfig.h). -%i is replaced by the process ID. -See also, the command-line option –backup-interval. - -


Bloat (dimension)
Specifies the minimum spacing design rule in mils. - -


connectedColor (color)
All pins, vias, lines and rectangles which are selected during a connection -search are drawn with this color. The default value is determined by -XtDefaultForeground. - -


cross hairColor (color)
This color is used to draw the cross hair cursor. The color is a result of -a XOR operation with the contents of the Layout area. The result -also depends on the default colormap of the X11 server because only -the colormap index is used in the boolean operation and Pcb doesn't -create its own colormap. The default setting is XtDefaultForeground. - -


elementColor (color)
elementSelectedColor (color)
The elements package part is drawn in these colors, for normal and selected -mode, respectively, which both default to XtDefaultForeground. - -


elementCommand (string)
Pcb uses a user defined command to read element files. This resources -is used to set the command which is executed by the users default shell. -Two escape sequences are defined to pass the selected filename (%f) and the -current search path (%p). The command must write the element data -to its standard output. The default value is -
              M4PATH="%p";export M4PATH;echo 'include(%f)' | m4
-
-

Using the GNU version of m4 is highly recommended. -See also, the command-line option –element-command. - -


elementPath (string)
A colon separated list of directories or commands (starts with '|'). -The path is passed to the program specified in elementCommand together -with the selected element name. A specified command will be executed in order -to create entries for the fileselect box. It must write its results to -stdout one entry per line. -See also, the user-command le[!]. - -


fileCommand (string)
The command is executed by the user's default shell whenever existing layout -files are loaded. Data is read from the command's standard output. -Two escape sequences may be specified to pass the selected filename (%f) -and the current search path (%p). The default value is: -
              cat %f
-
-

See also, the command-line option –file-command. - -


filePath (string)
A colon separated list of directories or commands (starts with '|'). -The path is passed to the program specified in fileCommand together -with the selected filename. A specified command will be executed in order -to create entries for the fileselect box. It must write its results to -stdout one entry per line. -See also, the user-command l[!]. - -


fontCommand (string)
Loading new symbol sets also is handled by an external command. You again -may pass the selected filename and the current search path by passing -%f and %p in the command string. Data is read from the commands standard -output. This command defaults to -
              cat %f
-
-

See also, the command-line option –font-command. - -


fontFile (string)
The default font for new layouts is read from this file which is searched -in the directories as defined by the resource fontPath. -Searching is only performed if the filename does not contain a directory -component. -The default filename is default_font. - -


fontPath (string)
This resource, a colon separated list of directories, defines the searchpath -for font files. See also, the resource fontFile. - -


grid (int)
This resources defines the initial value of one cursor step. It defaults -to 100 mil and any changes are saved together with the layout data. - -


gridColor (color)
This color is used to draw the grid. The color is a result of -a INVERT operation with the contents of the Layout area. The result -also depends on the default colormap of the X11 server because only -the colormap index is used in the boolean operation and Pcb doesn't -create its own colormap. The default setting is XtDefaultForeground. - -


invisibleObjectsColor (color)
Elements located on the opposite side of the board are drawn in this color. -The default is XtDefaultForeground. - -


layerColor1..MAX_LAYER (color)
layerSelectedColor1..MAX_LAYER (color)
These resources define the drawing colors of the different layers in -normal and selected state. All values are preset to XtDefaultForeground. - -


layerGroups (string)
The argument to this resource is a colon separated list of comma separated -layer numbers (1..MAX_LAYER). All layers within one group are switched on/off -together. The default setting is 1:2:3:...:MAX_LAYER which means -all layers are handled separately. Grouping layers one to three looks like -1,2,3:4:...:MAX_LAYER - -


layerName1..MAX_LAYER (string)
The default name of the layers in a new layout are determined by these -resources. The defaults are empty strings. - -


libraryCommand (string)
Pcb uses a command to read element data from libraries. -The resources is used to set the command which is executed by the users -default shell. Three escape sequences are defined to pass the selected -filename (%f), the current search path (%p) as well (%a) as the three -parameters template, value and package to the command. -It must write the element data to its standard output. The default value is -
              NONE/share/pcb/oldlib/QueryLibrary.sh %p %f %a
-
-


libraryContentsCommand (string)
Similar to libraryCommand, Pcb uses the command specified -by this resource to list the contents of a library. -
          	NONE/share/pcb/oldlib/ListLibraryContents.sh %p %f
-
-

is the default. - -


libraryFilename (string)
The resource specifies the name of the library. The default value is -pcblib unless changed at compile time -with the LIBRARYFILENAME variable in globalconfig.h. - -


libraryPath (string)
A colon separated list of directories that will be passed to the commands -specified by elementCommand and elementContentsCommand. - -


lineThickness (dimension)
The value, in the range [1..250] (the range may be changed at compile -time with the MIN_LINESIZE and MAX_LINESIZE variables in -globalconfig.h), defines the -initial thickness of new lines. The value is preset to ten mil. - -


media (<predefined> | <width>x<height>+-<left_margin>+-<top_margin>)
The default (user defined) media of the PostScript device. Predefined -values are a3, a4, a5, letter, tabloit, -ledger, legal, and executive. -The second way is to specify the medias width, height and margins in mil. -The resource defaults to a4 size unless changed at compile time -with the DEFAULT_MEDIASIZE variable in globalconfig.h. - -


offLimitColor (color)
The area outside the current maximum settings for width and height is drawn -with this color. The default value is determined by XtDefaultBackground. - -


pinColor (color)
pinSelectedColor(color)
This resource defines the drawing color of pins and pads in both states. -The values are preset to XtDefaultForeground. - -


pinoutFont (string)
This fonts are used to display pin names. There is one font for each zoom -value. The values are preset to XtdefaultFont. - -


pinoutNameLength (int)
This resource limits the number of characters which are displayed for -pin names in the pinout window. By default the string length is limited -to eight characters per name. - -


pinoutOffsetX (int)
pinoutOffsetY (int)
These resources determine the offset in mil of the circuit from the -upper left corner of the window when displaying pinout information. -Both default to 100 mil. - -


pinoutTextOffsetX (int)
pinoutTextOffsetY (int)
The resources determine the distance in mil between the drilling hole of a pin -to the location where its name is displayed in the pinout window. -They default to X:50 and Y:0. - -


pinoutZoom (int)
Sets the zoom factor for the pinout window according to the formula: -scale = 1:(2 power value). Its default value is two which results in -a 1:4 scale. - -


printCommand (string)
Default file for printouts. If the name starts with a '|' the output -is piped through the command. A %f is replaced by the current filename. -There is no default file or command. - -


raiseLogWindow (boolean)
The log window will be raised when new messages arrive if this resource -is set true, the default. - -


ratCommand (string)
Default command for reading a netlist. A %f is replaced by the netlist -filename. Its default value is "cat %f". - -


ratPath (string)
Default path to look for netlist files. It's default value is "." - -


resetAfterElement (boolean)
If set to true, all found connections will be reset before a new -element is scanned. This will produce long lists when scanning the whole -layout for connections. The resource is set to false by default. -The feature is only used while looking up connections of all elements. - -


ringBellWhenFinished (boolean)
Whether to ring the bell (the default) when a possibly lengthy operation -has finished or not. -See also, the command-line option –ring-bell-finished. - -


routeStyle (string)
Default values for the menu of routing styles (seen in the sizes menu). -The string is a comma separated list of name, line thickness, -via diameter, and via drill size. -e.g. "Fat,50,100,40:Skinny,8,35,20:75Ohm,110,110,20" -See also, the command-line option –route-styles and Sizes Menu - -


rubberBandMode (boolean)
Whether rubberband move and rotate (attached lines stretch like -rubberbands) is enabled (the default). - -


saveCommand (string)
This command is used to save data to a layout file. The filename may be -indicated by placing %f in the string. It must read the data from -its standard input. The default command is: -
              cat - > %f
-
-

See also, the command-line option –save-command. - -


saveInTMP (boolean)
Enabling this resource will save all data which would otherwise be lost -in a temporary file /tmp/PCB.%i.save. The file name may -be changed at compile time -with the EMERGENCY_NAME variable in globalconfig.h. -. -%i is replaced by the process ID. -As an example, loading a new layout when the old one hasn't been saved would -use this resource. -See also, the command-line option –save-in-tmp. - -


saveLastCommand (boolean)
Enables the saving of the last entered user command. The option is -disabled by default. -See also, the command-line option –save-last-command. - -


Shrink (dimension)
Specifies the minimum overlap (touching) design rule in mils. - -


size (<width>x<height>)
Defines the width and height of a new layout. The default is -7000x5000 unless changed at compile time -with the DEFAULT_SIZE variable in globalconfig.h. - -


stipllePolygons (boolean)
Determines whether to display polygons on the screen with a stippled -pattern. Stippling can create some amount of transparency so that -you can still (to some extent) see layers beneath polygons. -It defaults to False. - -


textScale (dimension)
The font scaling in percent is defined by this resource. The default is -100 percent. - -


useLogWindow (boolean)
Several subroutines send messages to the user if an error occurs. -This resource determines if they appear inside the log window or as a separate -dialog box. See also, the resource raiseLogWindow and the command line -option -loggeometry. -The default value is true. - -


viaColor (color)
viaSelectedColor (color)
This resource defines the drawing color of vias in both states. -The values are preset to XtDefaultForeground. - -


viaThickness (dimension)
viaDrillingHole (dimension)
The initial thickness and drilling hole of new vias. The values must be in the -range [30..400] (the range may be changed at compile -time with the MIN_PINORVIASIZE and MAX_PINEORVIASIZE variables in -globalconfig.h), with at least 20 -mil of copper. -The default thickness is 40 mil and the default drilling hole is -20 mil. - -


volume (int)
The value is passed to XBell() which sets the volume of the X -speaker. -The value lies in the range -100..100 and it defaults to the maximum volume of -100. - -


warnColor (color)
This resources defines the color to be used for drawing pins and pads when -a warning has been issued about them. - -


zoom (int)
The initial value for output scaling is set according to the following -formula: scale = 1:(2 power value). It defaults to three which results -in an output scale of 1:8. - -
- -

Refer also to Command-Line Options. - -

- -


-Next: , -Previous: Resources, -Up: X11 Interface - -
- -

7.2 Actions

- -

-All user accessible commands may be bound to almost any X event. Almost -no default binding for commands is done in the binaries, so it is vital for the -application that at least a system-wide application resource file exists. -This file normally resides in the share/pcb directory and -is called Pcb. The bindings to which the manual refers to are the -ones as defined by the shipped resource file. Besides binding an action to -an X11 event, you can also execute any action command using a ":" command -(see User Commands). - -

Take special care about translations related to the functions keys and the -pointer buttons because most of the window managers use them too. -Change the file according to your hardware/software environment. -You may have to replace all occurances of baseTranslations to -translations if you use a X11R4 server. - -

Passing Object as an argument to an action routine causes the object -at the cursor location to be changed, removed or whatever. If more than -one object is located at the cross hair position the smallest type is used. -If there are two of the same type the newer one is taken. -SelectedObjects will handle all selected and visible objects. - - - - - - -

AddRats(AllRats|SelectedRats)
Adds rat-lines to the layout using the loaded netlist file (see the :rn, -User Commands.). Rat lines are added on the active layer using the current -line thickness shown in the status line. -Only missing connectivity is added by the -AddRats command so if, for example, the layout is complete nothing will be added. -Rat lines may be drawn different to other lines on the screen -to make them easier to identify since they cannot appear in a completed layout. -The rat-lines are added in the minimum length straight-line tree pattern -(always ending on pins or pads) that satisfies the missing connectivity in the circuit. -If a SMD pad is unreachable on the active layer, a warning will be issued -about it and the rat-line to that pad will not be generated. -If connections exist on the board which are not listed in the netlist while -AllRats are being added, warning messages will be issued and the affected pins and -pads will be drawn in a special warnColor until the next Notify() event. -If the entire layout agrees completely with the net-list a message informs you that -the layout is complete and no rat-lines are added (since none are needed). -If SelectedRats -is passed as the argument, only those missing connections that might connect among -the selected pins and pads are drawn. -Default: -
          None<Key>w:	AddRats(AllRats)
-          !Shift<Key>w:	AddRats(SelectedRats)
-          None<Key>o:	DeleteRats(AllRats) AddRats(AllRats)
-          !Shift<Key>o:	DeleteRats(SelectedRats) AddRats(SelectedRats)
-
-


ApplyVendor()
Applies an already loaded vendor drill map to the design. -
          ApplyVendor()
-
-


Atomic(Save|Restore|Block|Close)
Controls the undo grouping of sequences of actions. Before the first action -in a group, Atomic(Save) should be issued. After each action that might -be undoable, Atomic(Restore) should be issued. Atomic(Block) concludes -and save the undo grouping if there was anything in the group to undo. -Atomic(Close) concludes and save the undo grouping even if nothing was -actually done. Thus it might produce an "empty" undo. This can be useful -when you want to use undo in a group of actions. - -


Bell([-100..100])
Rings the bell of your display. If no value is passed the setting -of the resource volume will be used. - -


ChangeClearSize(Object, value[, unit])
ChangeClearSize(SelectedPins|SelectedVias, value[, unit])
The effect of this action depends on if the soldermask display is presently -turned on or off. If soldermask is displayed, then the soldermask -relief size will be changed. If soldermask display is turned off, -then the clearance to polygons will be changed. -unit is "mil" or "mm". If not specified the units will default -to the internal unit of 0.01 mil. -
          !Mod1<Key>k:      ChangeClearSize(Object, +2, mil)
-          !Mod1 Shift<Key>k: ChangeClearSize(Object, -2, mil)
-
-


ChangeDrillSize(Object, value[, unit])
ChangeDrillSize(SelectedPins|SelectedVias, value[, unit])
This action routine changes the drilling hole of pins and vias. -If value starts with + or -, then it adds (or subtracts) -value from the current hole diameter, otherwise it sets the -diameter to the value. -unit is "mil" or "mm". If not specified the units will default -to the internal unit of 0.01 mil. -Default: -
          !Mod1<Key>s:       Change2ndSize(Object, +5, mil)
-          !Mod1 Shift<Key>s: Change2ndSize(Object, -5, mil)
-
-

ChangeFlag(Object|SelectElements|SelectedPins|SelectedVias|Selected,thermal|octagon|square,0|1)
Sets/clears the indicated flag. This adds/removes thermals, adds/removes the flag -which indicates a pin/pad should be square, or adds/removes the flag which -indicates a pin/pad should be octagonal. -
          :ChangeFlag(SelectedVias,thermal,1)
-          :ChangeFlag(SelectedPads,square,0)
-
-


ChangeHole(Object|SelectedVias)
This action routine converts a via to and from a hole. A hole is -a via that has no copper annulus. The drill size for the via -determines the hole diameter. -
          !Ctrl<Key>h:	ChangeHole(Object)
-
-


ChangeName(Object)
ChangeName(Layer|Layout)
Changes the name of the visible object at the cursor location. A text object -doesn't have a name therefore the text string itself is changed. -The element name currently used for display is always the one changed with this -command. -See Display(Description|NameOnPCB|Value) for details. -Passing Layer changes the current layers name. -Default: -
          None<Key>n: ChangeName(Object)
-
-

ChangeOctagon(Object|SelectElements|SelectedPins|SelectedVias|Selected)
Toggles what shape the affected pin(s) or via(s) will be drawn when they -are not square. The shape will either be round or octagonal. -Default: -
          !Ctrl<Key>o: ChangeOctagon(Object)
-
-


ChangePinName(ElementName, PinNumber, PinName)
Changes the name for a specified pin or pad number on a specified element. -This action is typically used to forward annotate pin/pad names from a schematic -to the layout. -
          ChangePinName(U1, 14, VDD)
-
-


ChangeSize(Object, value[, unit])
ChangeSize(SelectedLines|SelectedPins|SelectedVias, value[, unit])
ChangeSize(SelectedPads|SelectedTexts|SelectedNames, value[, unit])
ChangeSize(SelectedElements, value[, unit])
To change the size of an object you have to bind these action to some -X event (or use :ChangeSize(...)). If value begins with -a + or - then the value will be added (or subtracted) from the current -size, otherwise the size is set equal to value. Range checking is -done to insure that none of the maximum/minimums of any size are violated. -If Object is passed then a single object at the cursor location is -changed. If any of the Selected arguments are passed then all selected -and visible objects of that type are changed. If the type being modified is -an element, then the thickness of the silkscreen lines defining the element -is changed. -unit is "mil" or "mm". If not specified the units will default -to the internal unit of 0.01 mil. -Default: -
          None<Key>s:   ChangeSize(Object, +5)
-          !Shift<Key>s: ChangeSize(Object, -5)
-
-


ChangeSquare(Object|SelectedElements|SelectedPins)
Toggles the setting of the square flag. The flag is used to identify a -certain pin, normally the first one, of circuits. It is also used to -make SMD pads have square ends. -
          None<Key>q:   ChangeSquare(Object)
-
-

ClrFlag(Object|SelectElements|SelectedPins|SelectedVias|Selected,thermal|octagon|square)
Clears the indicated flag. This removes thermals, removes the flag -which indicates a pin/pad should be square, or removes the flag which -indicates a pin/pad should be octagonal. -
          :ClrFlag(SelectedVias,thermal)
-
-


Command()
Calling Command() pops up an input line at the bottom of the window -which allows you to enter commands. Including all action commands! -The dialog ends when None<Key>Return -to confirm or None<Key>Escape to abort is entered. -Default: -
          <Key>colon: Command()
-
-


Connection(Find)
Connection(ResetFoundLinesAndRectangles|ResetPinsViasAndPads|Reset)
The Connection() action is used to mark all connections from one pin, -line or via to others. -The ResetFoundLinesAndRectangles, ResetFoundPinsAndVias and -Reset arguments may be used to reset all marked lines and rectangles, -vias and pins or all of them. The search starts with the pin or via -at the cursor position. All found objects are drawn with the color -defined by the resource connectedColor. -See also, Display(Description|NameOnPCB|Value). -Default: -
          !Shift<Key>c: Connection(Reset)
-          None<Key>f:   Connection(Find)
-          !Shift<Key>f: Connection(Reset)
-
-


DeleteRats(AllRats|SelectedRats)
This routine deletes either all rat-lines in the layout, or only -the selected and visible ones. Non-rat-lines and other layout -objects are unaffected. -Default: -
          None<Key>e:   DeleteRats(AllRats)
-          !Shift<Key>e: DeleteRats(SelectedRats)
-
-


DisableVendor()
Disables automatic drill size mapping to the loaded vendor drill table. -
          DisableVendor()
-
-


DisperseElements(All|Selected)
Disperses either all elements or only the selected elements in the -layout. This action should be used at the -start of a design to spread out all footprints before any placement or -routing is done. -
          DisperseElements(All)
-
-


Display(Description|NameOnPCB|Value)
Display(Toggle45Degree|CycleClip)
Display(Grid|ToggleGrid)
Display(ToggleRubberBandMode)
Display(Center|ClearAndRedraw|Redraw)
Display(Pinout|PinOrPadName)
This action routines handles some output related settings. It is -used to center the display around the cursor location and to redraw the -output area optionally after clearing the window. -Centering is done with respect to the grid setting. Displaying the -grid itself may be switched on and off by Grid but only if -the distance between two pixels exceeds 4 pixels. -Pcb is able to handle several labels of an element. One of them -is a description of the functionality (eg resistor), the second should be -a unique identifier (R1) whereas the last one is a value (100k). -The Display() action selects which of the names is displayed. -It also controls which name will be affected by the ChangeName command. -If ToggleGrid is passed, Pcb changes between relative -('rel' in the statusline) and absolute grid (an 'abs' in the statusline). -Relative grid means the pointer position when the command is issued is -used as the grid origin; while (0,0) is used in the absolute grid case. -Passing Pinout displays the pinout of the element at the current -cursor location whereas PinOrPadName toggles displaying of the -pins or pads name under the cursor. If none of them matches but the cursor -is inside of an element, the flags is toggled for all of its pins and pads. -For details about rubberbands see also the details about Mode. -Default: -
          None<Key>c:  Display(Center)
-          None<Key>d:  Display(PinOrPadName)
-          !Shift<Key>d: Display(Pinout)
-          None<Key>r:  Display(ClearAndRedraw)
-          None<Key>.:  Display(Toggle45Degree)
-          None<Key>/:  Display(CycleClip)
-
-


DRC()
Initiates design rule checking of the entire layout. Must be repeated -until no errors are found. - -

ExecuteFile(filename)
Executes the PCB actions contained in the specified file. -This can be used to automate a complex sequence of operations. -
          :ExecuteFile(custom.cmd)
-
-

The command file contains a list of PCB actions. Blank lines -are ignored and lines starting with a # are treated as comment -lines. For example -

          # This is a comment line
-          Display(Grid)
-          SetValue(Zoom,2)
-          DRC()
-
-


EditLayerGroups()
Pops up a dialog box to edit the layergroup setting. The function is also -available from the Objects menu. -There are no defaults. - -


EnableVendor()
Enables automatic drill size mapping to the loaded vendor drill table. -
          EnableVendor()
-
-


Load(ElementToBuffer|Layout|LayoutToBuffer|Nelist)
This routine pops up a fileselect box to load layout, element data, -or netlist. -The passed filename for layout data is saved and may be reused. -ElementToBuffer and LayoutToBuffer load the data into the -current buffer. -There are no defaults. - -


LoadVendor(vendorfile)
Loads the specified vendor resource file. -
          LoadVendor(myvendor.res)
-
-


MarkCrosshair()
This routine marks the current cursor location with an X, and then -the cursor display shows both absolute position and position relative to -the mark. If a mark is already present, this routine removes it and -stops displaying relative cursor coordinates. -Defaults: -
          !Ctrl<key>m:	MarkCrosshair()
-
-


Mode(Copy|InsertPoint|Line|Move|None|PasteBuffer|Polygon|Thermal)
Mode(Remove|Rectangle|RubberbandMove|Text|Via)
Mode(Cycle)
Mode(Notify)
Mode(Save|Restore)
Switches to a new mode of operation. The active mode is displayed by a thick -line around the matching mode selector button. -Most of the functionality of Pcb is implemented by selecting a mode -and calling Mode(Notify). The arguments Line, Polygon, -Rectangle, Text and Via are used to create the -appropriate object whenever Mode(Notify) is called. Some of them, -such as Polygon, need more than one call for one object to be created. -InsertPoint adds points to existing polygons or lines. -Save and Restore are used to temporarily save the mode, switch -to another one, call Mode(Notify) and restore the saved one. Have -a look at the application resource file for examples. -Copy and Move modes are used to change an object's location and, -optionally, to create a new one. The first call of Mode(Notify) attaches -the object at the pointer location to the cross hair whereas the second -one drops it to the layout. The rubberband version of move performs the -move while overriding the current rubberband mode. -Passing PasteBuffer attaches the contents of the currently selected -buffer to the cross hair. Each call to Mode(Notify) pastes this contents -to the layout. Mode(Cycle) cycles through the modes available in the -mode-button pallet. -Mode(None) switches all modes off. -Default: -
          <Key>Escape:             Mode(None)
-          <Key>space:              Mode(Cycle)
-          None<Key>BackSpace:      Mode(Save) Mode(Remove) Mode(Notify) Mode(Restore)
-          None<Key>Delete:         Mode(Save) Mode(Remove) Mode(Notify) Mode(Restore)
-          None<Key>F1:             Mode(Via)
-          None<Key>F2:             Mode(Line)
-          None<Key>F3:             Mode(PasteBuffer)
-          None<Key>F4:             Mode(Rectangle)
-          None<Key>F5:             Mode(Text)
-          None<Key>F6:             Mode(Polygon)
-          None<Key>F7:             Mode(Thermal)
-          None<Key>F8:		 Mode(Arc)
-          None<Key>Insert:         Mode(InsertPoint)
-          None<Key>[:              Mode(Save) Mode(Move) Mode(Notify)
-          None<Key>]:              Mode(Notify) Mode(Restore)
-          None<Btn1>:          Mode(Notify)
-          !Shift Ctrl<Btn1>:   Mode(Save) Mode(Remove) Mode(Notify) Mode(Restore)
-          None<Btn2Down>:          Mode(Save) Mode(Move) Mode(Notify)
-          None<Btn2Up>:            Mode(Notify) Mode(Restore)
-          !Mod1<Btn2Down>:       Mode(Save) Mode(Copy) Mode(Notify)
-          !Mod1<Btn2Up>:         Mode(Notify) Mode(Restore)
-          Shift BTNMOD<Btn2Down>: Mode(Save) Mode(RubberbandMove) Mode(Notify)
-
-


MovePointer(delta_x, delta_y)
With this function it is possible to move the cross hair cursor by using the -cursor keys. The X server's pointer follows because the necessary -events are generated by Pcb. All movements are performed with respect -to the currently set grid value. -Default: -
          None<Key>Up:      MovePointer(0, -1)
-          !Shift<Key>Up:    MovePointer(0, -10)
-          None<Key>Down:    MovePointer(0, 1)
-          !Shift<Key>Down:  MovePointer(0, 10)
-          None<Key>Right:   MovePointer(1, 0)
-          !Shift<Key>Right: MovePointer(10, 0)
-          None<Key>Left:    MovePointer(-1, 0)
-          !Shift<Key>Left:  MovePointer(-10, 0)
-
-


MoveToCurrentLayer(Object|SelectedObjects)
The function moves a single object at the cross hair location or all selected -objects to the current layer. Elements are not movable by this function. -They have to be deleted and replaced on the other side. -If a line segment is moved and the movement would result in a loss of -connectivity to another segment then via(s) are automatically added to -maintain the connectivity. -
          None<Key>m:       MoveToCurrentLayer(Object)
-          !Shift<Key>m:     MoveToCurrentLayer(SelectedObjects)
-
-


New()
Clear the current layout and starts a new one after entering its name. -Refer to the resource backup for more information. -No defaults. - -


PasteBuffer(AddSelected|Clear|1..5)
PasteBuffer(Rotate, 1..3)
PasteBuffer(Convert)
This action routine controls and selects the pastebuffer as well as all -cut-and-paste operations. Passing a buffer number selects one in of the -range 1..5. The statusline is updated with the new number. -Rotate performs a number of 90 degree counter clockwise rotations -of the buffer contents. AddSelected as first argument copies all -selected and visible objects into the buffer. Passing Clear removes -all objects from the currently selected buffer. Convert causes -the contents of the buffer (lines, arc, vias) to be converted into an -element definition. Refer to Pastebuffer -for examples. -Default: -
          !Ctrl<Key>x:       PasteBuffer(Clear) PasteBuffer(AddSelected)
-          		   Mode(PasteBuffer)
-          !Shift Ctrl<Key>x: PasteBuffer(Clear) PasteBuffer(AddSelected)
-          		   RemoveSelected() Mode(PasteBuffer)
-          !Mod1<Key>c:       PasteBuffer(Clear) PasteBuffer(AddSelected)
-          !Mod1<key>x:       PasteBuffer(Clear) PasteBuffer(AddSelected)
-          		   RemoveSelected()
-          !Shift<Key>1:      PasteBuffer(1)
-          !Shift<Key>2:      PasteBuffer(2)
-          !Shift<Key>3:      PasteBuffer(3)
-          !Shift<Key>4:      PasteBuffer(4)
-          !Shift<Key>5:      PasteBuffer(5)
-          None<Key>F3:       Mode(PasteBuffer)
-
-


Polygon((Close|PreviousPoint)
Polygons need a special action routine to make life easier. Calling -Polygon(PreviousPoint) resets the newly entered corner to the -previous one. The Undo action will call Polygon(PreviousPoint) -when appropriate to do so. Close creates the final -segment of the polygon. This may fail if clipping to 45 degree -lines is switched on, in which case a warning is issued. -Default: -
          None<Key>p:             Polygon(Close)
-          !Shift<Key>p:           Polygon(Close)
-
-


Print()
Pops up a print control box that lets you select the output -device, scaling and many more options. Each run creates all -files that are supported by the selected device. These are -mask files as well as drilling files, silk screens and so on. The table -shows the filenames for all possible files: -
          	POSIX (extension)             8.3 filename
-          		---------------------------------------------
-          		*_componentmask.*             cmsk.*
-          		*_componentsilk.*             cslk.*
-          		*_soldermask.*                smsk.*
-          		*_soldersilk.*                sslk.*
-          		*_drill.*                     dril.*
-          		*_groundplane.*               gpl.*
-          		*_group[1..8].*     [..8].*
-
-

The output may be sent to a post-processor by starting the filename with the -pipe ("|") character. Any "%f" in a command is replaced -with the current filename. The function is available from the file menu. -There are no defaults. - -


Quit()
Quits the application after confirming the operation. -Default: -
          <Message>WM_PROTOCOLS: Quit()
-
-


Redo()
This routine allows you to recover from the last undo command. -You might want to do this if you thought that undo was going to -revert something other than what it actually did (in case you -are confused about which operations are un-doable), or if you -have been backing up through a long undo list and over-shoot -your stopping point. Any change that is made since the undo -in question will trim the redo list. For example if you add -ten lines, then undo three of them you could use redo to put -them back, but if you move a line on the board before performing -the redo, you will lose the ability to "redo" the three "undone" lines. -Default: -
          !Shift<Key>r:	Redo()
-
-


RemoveSelected()
This routine removes all visible and selected objects. -There are no defaults. - -


Report(Object|DrillReport)
This routine pops up a dialog box describing the various -characteristics of an object (or piece of an object such as a pad or pin) -in the layout at the cursor position, or a report about all of the -drill holes in the layout. -There are no defaults. - -


RouteStyle(1|2|3|4)
This routine copies the sizes corresponding to the numbered route style -into the active line thickens, via diameter, and via drill size. -Defaults: -
          !Ctrl<Key>1: RouteStyle(1)
-          ...
-          !Ctrl<Key>NUM_STYLES: RouteStyle(NUM_STYLES)
-
-

The variable NUM_STYLES is set at compile time in -globalconfig.h. - -


Save(Layout|LayoutAs)
Save(AllConnections|AllUnusedPins|ElementConnections)
Passing Layout saves the layout using the file from which it was -loaded or, if it is a new layout, calls Save(LayoutAs) which queries -the user for a filename. -The values: AllConnections, AllUnusedPins and -ElementConnections start a connection scan and save all connections, -all unused pins or the connections of a single element to a file. -There are no defaults. - -


Select(All|Block|Connection|ToggleObject)
Select(ElementByName|ObjectByName|PadByName|PinByName)
Select(TextByName|ViaByName)
Toggles either the selection flag of the object at the cross hair position -(ToggleObject) or selects all visible objects, all inside a -rectangle or all objects which have been found during the last connection -scan. The ByName functions use a Regular Expressions search, -always case insensitive, to select the objects. -Default: -
          None<Btn3Down>:  Select(ToggleObject)
-          None<Btn3Down>,None<Btn3Motion>: See resource file - this is complex
-
-

SetFlag(Object|SelectElements|SelectedPins|SelectedVias|Selected,thermal|octagon|square)
Sets the indicated flag. This adds thermals, sets the flag -which indicates a pin/pad should be square, or sets the flag which -indicates a pin/pad should be octagonal. -
          :SetFlag(Selected,thermal)
-
-


SetValue(Grid|LineSize|TextScale|ViaDrillingHole|ViaSize|Zoom, value)
Some internal values may be changed online by this function. -The first parameter specifies which data has to be changed. The other one -determines if the resource is set to the passed value, if value is -specified without sign, or increments/decrements if it is specified with -a plus or minus sign. -The function doesn't change any existing object only the initial values of -new objects. Use the ChangeSize() and ChangeDrillSize() -to change existing objects. -Default: -
          None<Key>g:        SetValue(Grid, +5)
-          !Shift<Key>g:      SetValue(Grid, -5)
-          None<Key>l:        SetValue(LineSize, +5)
-          !Shift<Key>l:      SetValue(LineSize, -5)
-          None<Key>t:        SetValue(TextScale, +10)
-          !Shift<Key>t:      SetValue(TextScale, -10)
-          None<Key>v:        SetValue(ViaSize, +5)
-          !Shift<Key>v:      SetValue(ViaSize, -5)
-          !Mod1<Key>v:       SetValue(ViaDrillingHole, +5)
-          !Mod1 Shift<Key>v: SetValue(ViaDrillingHole, -5)
-          None<Key>z:        SetValue(Zoom, -1)
-          !Shift<Key>z:      SetValue(Zoom, +1)
-
-


SwapSides()
This routine changes the board side you are viewing. -Default: -
          None<Key>Tab:      SwapSides()
-
-


SwitchDrawingLayer(value)
Makes layer number 1..MAX_LAYER the current one. -Default: -
          None<Key>1:        SwitchDrawingLayer(1)
-          ...
-          None<Key>MAX_LAYER:        SwitchDrawingLayer(MAX_LAYER)
-
-


ToggleHideName(Object|SelectedElements)
Toggles whether the element's name is displayed or hidden. If it -is hidden you won't see it on the screen and it will not appear -on the silk layer when you print the layout. -
          None<Key>h:	ToggleHideName(Object)
-          !Shift<Key>h:	ToggleHideName(SelectedElements)
-
-


ToggleVendor()
Toggles automatic drill size mapping to the loaded vendor drill table. -
          ToggleVendor()
-
-


ToggleVisibility(Layer)
Toggles the visibility of the layer. -
          Mod1<Key>1:	ToggleVisibility(1)
-          Mod1<Key>2:	ToggleVisibility(2)
-          Mod1<Key>3:	ToggleVisibility(3)
-          Mod1<Key>4:	ToggleVisibility(4)
-
-


Undo()
Undo(ClearList)
The unlimited undo feature of Pcb allows you to recover -from most operations that materially affect you work. -Calling Undo() without any parameter recovers -from the last (non-undo) operation. ClearList is used to release the -allocated memory. ClearList is called whenever a new layout is started -or loaded. See also Redo. -Default: -
          None<Key>u:        Undo()
-          !Shift Ctrl<Key>u: Undo(ClearList)
-
-


UnloadVendor()
Unloads the loaded vendor drill table. -
          UnloadVendor()
-
-


Unselect(All|Block|Connection)
Unselects all visible objects, all inside a rectangle or all objects which -have been found during the last connection scan. -Default: -
          !Shift <Btn3Down>: Mode(Save) Mode(None) Unselect(Block)
-          !Shift <Btn3Up>:   Unselect(Block) Mode(Restore)
-
-
- -
- -


-Previous: Actions, -Up: X11 Interface - -
- -

7.3 Default Translations

- -

-This section covers some default translations of key and button events as -defined in the shipped default application resource file. Most of them have -already been listed in Actions. Pcb makes use of a nice X11 -feature; calling several action routines for one event. - - - - - - -

None<Key>BackSpace:
None<key>Delete:
!Shift<Key>BackSpace:
!Shift Ctrl<Btn1>:
The object at the cursor location is removed by None<Key>BackSpace or -Shift Ctrl<Btn1> whereas Shift<Key>BackSpace also removes -all other objects that are fully-connected to the one at the cursor location. - -


!Mod1 Ctrl<Key>Left:
!Mod1 Ctrl<Key>Right:
!Mod1 Ctrl<Key>Up:
!Mod1 Ctrl<Key>Down:
Scroll one page in one of the four directions. - -


None<Key>Left:, !Shift<Key>Left:
None<Key>Right:, !Shift<Key>Right:
None<Key>Up:, !Shift<Key>Up:
None<Key>Down:, !Shift<Key>Down:
Move cross hair either one or ten points in grid. - -


None<Key>Return:
Finished user input, selects the 'default' button of dialogs. - -


None<Key>Escape:
Mode(Reset), aborts user input, selects the 'abort' button of -dialogs or resets all modes. - -


None<Btn2Down>, Btn2<Motion>, None<Btn2Up>:
!Mod1<Btn2Down>, Btn2<Motion>, !Mod1<Btn2Up>:
The first sequence moves the object or element name at the cursor location. -The second one copies the objects. Copying isn't available for -element names. - -
- - -
- -


-Next: , -Previous: X11 Interface, -Up: Top - -
- -

8 File Formats

- -

-All files used by Pcb are read from the standard output of a command -or written to the standard input of one as plain seven bit ASCII. This -makes it possible to use any editor to change the contents of a layout file. -It is the only way for element or font description files to be created. -To do so you'll need to study the example files example/* and -default_font which are shipped with Pcb. -For an overview refer to Intro. - -

The following sections provide the necessary information about the syntax of -the files. -Netlist files are not created by Pcb, but it does use them. For information -on the format of a netlist file see the :rn, -User Commands. -The commands described allow you to add almost any additional -functionality you may need. Examples are compressed read and write access as -well as archives. The commands themselves are defined by the resources -elementCommand, fileCommand, fontCommand, -libraryCommand, libraryContentsCommand and saveCommand. -Note that the commands are not saved along with the data. -It is considered an advantage to have the layout file contain all necessary -information, independent of any other files. - -

One thing common to all files is they may include comments, newlines, -and carriage returns at any place except within quoted strings. - -

- -
- -


-Next: , -Up: File Formats - -
- -

8.1 Pad and Line Representation

- -

-Pads and lines (copper traces, silk screen lines, etc) are represented by the -line end points and the aperture used to draw the line. It is important to -understand this when creating the pads for a new footprint. The following figure -illustrates a pad or line which is drawn using a square aperture. The end -points (X0,Y0), (X1,Y1) specify the center of the aperture. The size parameter -specifies the size of the aperture. - -

Pad Layout
- -

Pads and lines are represented in this way because this is how lines are -specified in RS-274X (Gerber) files which are used for creating -the masks used in board manufacturing. In fact, older mask making -equipment created lines in precisely this fashion. A physical aperture was -used to pass light through onto a photosensitive film. - -

- -


-Next: , -Previous: Pad and Line Representation, -Up: File Formats - -
- -

8.2 Layout File Format

- -

-The layout file describes a complete layout including symbols, vias, -elements and layers with lines, rectangles and text. This is the most -complex file of all. As Pcb has evolved, the file format has -changed several times to accommodate new features. Pcb has -always been able to read all older versions of the .pcb file. -This allows the migration of older designs to newer versions of the -program. Obviously older versions of Pcb will not be able -to properly read layout files stored in newer versions of the file -format. - -

In practice it is very common for footprint libraries to contain -elements which have been defined in various versions of the Pcb -file format. When faced with trying to understand an element file or -layout file which includes syntax not defined here, the best approach -is to examine the file src/parse_y.y which is the definitive -definition of the file format. - -

The PCB layout file contains the following contents, in this order (individual items -are defined in File Syntax: - -

-
PCB
This names the board and sets its size - -
Grid
Optional. - -
Cursor
Optional. - -
Flags
Optional. - -
Groups
Optional. - -
Styles
Optional. - -
Symbols
Optional. - -
Vias, Rats, Layers, and Elements
These may occur in any order, at this point in the file. - -
Netlists
Optional. - -
- -
- -


-Next: , -Previous: Layout File, -Up: File Formats - -
- -

8.3 Element File Format

- -

-Element files are used to describe one component which then may be used -several times within one or more layouts. You will normally split the -file into two parts, one for the pinout and one for the package description. -Using m4 allows you to define pin names as macros in one file and -include a package description file which evaluates the macros. See -the resource elementCommand for more information. The pins (and pads) -must appear in sequential order in the element file (new in 1.5) so that -pin 1 must be the first PIN(...) in the file. - -

Doing things this way makes it possible to use one package file for several -different circuits. See the sample files dil*. - -

The lowest x and y coordinates of all sub-objects of an element are -used as an attachment point for the cross hair cursor of the main -window, unless the element has a mark, in which case that's the -attachment point. - -

- -


-Next: , -Previous: Element File, -Up: File Formats - -
- -

8.4 Font File Format

- -

-A number of user defined Symbols are called a font. There is only one per -layout. All symbols are made of lines. See the file default_font -as an example. - -

The lowest x and y coordinates of all lines of a font are transformed to (0,0). - -

- -


-Next: , -Previous: Font File, -Up: File Formats - -
- -

8.5 Netlist File Format

- -

-Netlists read by Pcb must have this simple text form: - -

     netname [style] NAME-PINNUM NAME2-PINNUM2 NAME3-PINNUM3 ... [\]
-
-

for each net on the layout. -where "netname" is the name of the net which must be unique for each -net, [style] is an optional route-style name, -NAME is the layout-name name given to an element, -and PINNUM is the (usually numeric) -pin number of the element that connects to the net -(for details on pin numbering see Element Objects). -Spaces or tabs separate the fields. -If the line ends with a "\" the -net continues on the next line and the "\" is treated exactly as if it -were a space. If a NAME ends with a lower-case letter, -all lower-case letters are stripped from the end of the NAME to determine the -matching layout-name name. For example: - -

          Data U1-3 U2abc-4 FLOP1a-7 Uabc3-A9
-
-

specifies that the net called "Data" should have -pin 3 of U1 connected to pin 4 of U2, to pin 7 of -FLOP1 and to pin A9 of Uabc3. Note that element name and -pin number strings are case-sensitive. -It is up to you to name the elements so that their layout-name names -agrees with the netlist. - -

- -


-Next: , -Previous: Netlist File, -Up: File Formats - -
- -

8.6 Library Contents File Format

- -

-There is nothing like a special library format. The ones that have been -introduced in 1.4.1 just use some nice (and time consuming) features of GNU -m4. The only predefined format is the one of the contents file -which is read during startup. It is made up of two basic line types: - -

     menu entry      = "TYPE="name
-     contents line   = template":"package":"value":"description
-     name            = String
-     template        = String
-     package         = String
-     value           = String
-     description     = String
-     String          = <anything except ":", "\n" and "\r">
-
-

No leading white spaces or comments are allowed in this file. If you need -either one, define a command that removes them before loading. Have a look -to the libraryContentsCommand resource. - -

The menu entry will appear in the selection menu at the top and of the -library window. - -

- -


-Next: , -Previous: Library Contents File, -Up: File Formats - -
- -

8.7 Library File Format

- -

-This section provides an overview about the existing m4 definitions -of the elements. There are basically two different types of files. One -to define element specific data like the pinout, package and so on, the -other to define the values. For example the static RAM circuits 43256 and -62256 are very similar. They therefore share a common definition in the -macro file but are defined with two different value labels. - -

The macro file entry: -

     define(`Description_43256_dil', `SRAM 32Kx8')
-     define(`Param1_43256_dil', 28)
-     define(`Param2_43256_dil', 600)
-     define(`PinList_43256_dil', ``pin1', `pin2', ...')
-
-

And the list file: -

     43256_dil:N:43256:62256
-
-

The macro must define a description, the pin list and up to two additional -parameters that are passed to the package definitions. The first one is -the number of pins whereas the second one defines for example the width -of a package. - -

It is very important to select a unique identifier for each macro. In -the example this would be 43256_dil which is also the templates name. -It is required by some low-level macros that -Description_, Param1_, Param2_ and PinList_ are perpended. - -

The list file uses a syntax: -

     template:package:value[:more values]
-
-

This means that the shown example will create two element entries with the -same package and pinout but with different names. - -

A number of packages are defined in common.m4. Included are: - -

     DIL packages with suffix D, DW, J, JD, JG, N, NT, P
-     PLCC
-     TO3
-     generic connectors
-     DIN 41.612 connectors
-     zick-zack (SD suffix)
-     15 pin multiwatt
-
-

If you are going to start your own library please take care about m4 -functions. Be aware of quoting and so on and, most important check your -additional entry by calling the macro: - -

     CreateObject(`template', `value', `package suffix')
-
-

If quoting is incorrect an endless loop may occur (broken by a out-of-memory -message). - -

The scripts in the lib directory handle the creation of libraries -as well as of their contents files. Querying is also supported. - -

I know quite well that this description of the library implementation is -not what some out there expect. But in my opinion it's much more useful to -look at the comments and follow the macros step by step. - -

- -


-Next: , -Previous: Library File, -Up: File Formats - -
- -

8.8 File Syntax

- -

- - - -

A special note about units: Older versions of pcb used mils -(1/1000 inch) as the base unit; a value of 500 in the file meant -half an inch. Newer versions uses a "high resolution" syntax, -where the base unit is 1/100 of a mil (0.000010 inch); a value of 500 in -the file means 5 mils. As a general rule, the variants of each entry -listed below which use square brackets are the high resolution formats -and use the 1/100 mil units, and the ones with parentheses are the older -variants and use 1 mil units. Note that when multiple variants -are listed, the most recent (and most preferred) format is the first -listed. - -

Symbolic and numeric flags (SFlags and NFlags) are described in -Object Flags. - -

- -
- -


-Next: , -Up: File Syntax - -
- -

8.8.1 Arc

- - -

-
Arc [X Y Width Height Thickness Clearance StartAngle DeltaAngle SFlags]
-Arc (X Y Width Height Thickness Clearance StartAngle DeltaAngle NFlags)
-Arc (X Y Width Height Thickness StartAngle DeltaAngle NFlags)
-
-
- -

-
X Y
Coordinates of the center of the arc. -
Width Height
The width and height, from the center to the edge. The bounds of the -circle of which this arc is a segment, is thus 2*Width by -2*Height. -
Thickness
The width of the copper trace which forms the arc. -
Clearance
The amount of space cleared around the arc when the line passes -through a polygon. The clearance is added to the thickness to get the -thickness of the clear; thus the space between the arc and the polygon -is Clearance/2 wide. -
StartAngle
The angle of one end of the arc, in degrees. In PCB, an angle of zero -points left (negative X direction), and 90 degrees points down -(positive Y direction). -
DeltaAngle
The sweep of the arc. This may be negative. Positive angles sweep -counterclockwise. -
SFlags
Symbolic or numeric flags. -
NFlags
Numeric flags. -
- - -
- -


-Next: , -Previous: Arc syntax, -Up: File Syntax - -
- -

8.8.2 Attribute

- - -

-
Attribute ("Name" "Value")
-
-
- -

Attributes allow boards and elements to have arbitrary data attached -to them, which is not directly used by PCB itself but may be of use by -other programs or users. - -

-
Name
The name of the attribute - -
Value
The value of the attribute. Values are always stored as strings, even -if the value is interpreted as, for example, a number. - -
- - -
- -


-Next: , -Previous: Attribute syntax, -Up: File Syntax - -
- -

8.8.3 Connect

- - -

-
Connect ("PinPad")
-
-
- -

-
PinPad
The name of a pin or pad which is included in this net. Pin and Pad -names are named by the refdes and pin name, like "U14-7" for -pin 7 of U14, or "T4-E" for pin E of T4. -
- - -
- -


-Next: , -Previous: Connect syntax, -Up: File Syntax - -
- -

8.8.4 Cursor

- - -

-
Cursor [X Y Zoom]
-Cursor (X Y Zoom)
-
-
- -

-
X Y
Location of the cursor when the board was saved. -
Zoom
The current zoom factor. Note that a zoom factor of "0" means 1 mil -per screen pixel, N means 2^N mils per screen pixel, etc. The -first variant accepts floating point numbers. The special value -"1000" means "zoom to fit" -
- - -
- -


-Next: , -Previous: Cursor syntax, -Up: File Syntax - -
- -

8.8.5 DRC

- - -

-
DRC [Bloat Shrink Line Silk Drill Ring]
-DRC [Bloat Shrink Line Silk]
-DRC [Bloat Shrink Line]
-
-
- -

-
Bloat
Minimum spacing between copper. -
Shrink
Minimum copper overlap to guarantee connectivity. -
Line
Minimum line thickness. -
Silk
Minimum silk thickness. -
Drill
Minimum drill size. -
Ring
Minimum width of the annular ring around pins and vias. -
- - -
- -


-Next: , -Previous: DRC syntax, -Up: File Syntax - -
- -

8.8.6 Element

- - -

-
Element [SFlags "Desc" "Name" "Value" MX MY TX TY TDir TScale TSFlags] (
-Element (NFlags "Desc" "Name" "Value" MX MY TX TY TDir TScale TNFlags) (
-Element (NFlags "Desc" "Name" "Value" TX TY TDir TScale TNFlags) (
-Element (NFlags "Desc" "Name" TX TY TDir TScale TNFlags) (
-Element ("Desc" "Name" TX TY TDir TScale TNFlags) (
-   ... contents ...
-)
-
-
- -

-
SFlags
Symbolic or numeric flags, for the element as a whole. -
NFlags
Numeric flags, for the element as a whole. -
Desc
The description of the element. This is one of the three strings -which can be displayed on the screen. -
Name
The name of the element, usually the reference designator. -
Value
The value of the element. -
MX MY
The location of the element's mark. This is the reference point -for placing the element and its pins and pads. -
TX TY
The upper left corner of the text (one of the three strings). -
TDir
The relative direction of the text. 0 means left to right for -an unrotated element, 1 means up, 2 left, 3 down. -
TScale
Size of the text, as a percentage of the “default” size of of the -font (the default font is about 40 mils high). Default is 100 (40 -mils). -
TSFlags
Symbolic or numeric flags, for the text. -
TNFlags
Numeric flags, for the text. -
- -

Elements may contain pins, pads, element lines, element arcs, -attributes, and (for older elements) an optional mark. Note that -element definitions that have the mark coordinates in the element -line, only support pins and pads which use relative coordinates. The -pin and pad coordinates are relative to the mark. Element definitions -which do not include the mark coordinates in the element line, may -have a Mark definition in their contents, and only use pin and pad -definitions which use absolute coordinates. - - -

- -


-Next: , -Previous: Element syntax, -Up: File Syntax - -
- -

8.8.7 ElementArc

- - -

-
ElementArc [X Y Width Height StartAngle DeltaAngle Thickness]
-ElementArc (X Y Width Height StartAngle DeltaAngle Thickness)
-
-
- -

-
X Y
Coordinates of the center of the arc. These are relative to the -Element's mark point for new element formats, or absolute for older -formats. -
Width Height
The width and height, from the center to the edge. The bounds of the -circle of which this arc is a segment, is thus 2*Width by -2*Height. -
StartAngle
The angle of one end of the arc, in degrees. In PCB, an angle of zero -points left (negative X direction), and 90 degrees points down -(positive Y direction). -
DeltaAngle
The sweep of the arc. This may be negative. Positive angles sweep -counterclockwise. -
Thickness
The width of the silk line which forms the arc. -
- - -
- -


-Next: , -Previous: ElementArc syntax, -Up: File Syntax - -
- -

8.8.8 ElementLine

- - -

-
ElementLine [X1 Y1 X2 Y2 Thickness]
-ElementLine (X1 Y1 X2 Y2 Thickness)
-
-
- -

-
X1 Y1 X2 Y2
Coordinates of the endpoints of the line. These are relative to the -Element's mark point for new element formats, or absolute for older -formats. -
Thickness
The width of the silk for this line. -
- - -
- -


-Next: , -Previous: ElementLine syntax, -Up: File Syntax - -
- -

8.8.9 FileVersion

- - -

-
FileVersion[Version]
-
-
- -

-
Version
File format version. This version number represents the date when the pcb file -format was last changed. -
- -

Any version of pcb build from sources equal to or newer -than this number should be able to read the file. If this line is not present -in the input file then file format compatibility is not checked. - - -

- -


-Next: , -Previous: FileVersion syntax, -Up: File Syntax - -
- -

8.8.10 Flags

- - -

-
Flags(Number)
-
-
- -

-
Number
A number, whose value is normally given in hex, individual bits of which -represent pcb-wide flags as defined in PCBFlags. - -
- - -
- -


-Next: , -Previous: Flags syntax, -Up: File Syntax - -
- -

8.8.11 Grid

- - -

-
Grid [Step OffsetX OffsetY Visible]
-Grid (Step OffsetX OffsetY Visible)
-Grid (Step OffsetX OffsetY)
-
-
- -

-
Step
Distance from one grid point to adjacent points. This value may be a -floating point number for the first two variants. -
OffsetX OffsetY
The "origin" of the grid. Normally zero. -
Visible
If non-zero, the grid will be visible on the screen. -
- - -
- -


-Next: , -Previous: Grid syntax, -Up: File Syntax - -
- -

8.8.12 Groups

- - -

-
Groups("String")
-
-
- -

-
String
-Encodes the layer grouping information. Each group is separated by a -colon, each member of each group is separated by a comma. Group -members are either numbers from 1..N for each layer, and -the letters c or s representing the component side and -solder side of the board. Including c or s marks that -group as being the top or bottom side of the board. - -
          Groups("1,2,c:3:4:5,6,s:7,8")
-
-
- - -
- -


-Next: , -Previous: Groups syntax, -Up: File Syntax - -
- -

8.8.13 Layer

- - -

-
Layer (LayerNum "Name") (
-   ... contents ...
-)
-
-
- -

-
LayerNum
The layer number. Layers are numbered sequentially, starting with 1. -The last two layers (9 and 10 by default) are solder-side silk and -component-side silk, in that order. -
Name
The layer name. -
contents
The contents of the layer, which may include attributes, lines, arcs, rectangles, -text, and polygons. -
- - -
- -


-Next: , -Previous: Layer syntax, -Up: File Syntax - -
- -

8.8.14 Line

- - -

-
Line [X1 Y1 X2 Y2 Thickness Clearance SFlags]
-Line (X1 Y1 X2 Y2 Thickness Clearance NFlags)
-Line (X1 Y1 X2 Y2 Thickness NFlags)
-
-
- -

-
X1 Y1 X2 Y2
The end points of the line -
Thickness
The width of the line -
Clearance
The amount of space cleared around the line when the line passes -through a polygon. The clearance is added to the thickness to get the -thickness of the clear; thus the space between the line and the -polygon is Clearance/2 wide. -
SFlags
Symbolic or numeric flags -
NFlags
Numeric flags. -
- - -
- -


-Next: , -Previous: Line syntax, -Up: File Syntax - -
- -

8.8.15 Mark

- - -

-
Mark [X Y]
-Mark (X Y)
-
-
- -

-
X Y
Coordinates of the Mark, for older element formats that don't have -the mark as part of the Element line. -
- - -
- -


-Next: , -Previous: Mark syntax, -Up: File Syntax - -
- -

8.8.16 Net

- - -

-
Net ("Name" "Style") (
-   ... connects ...
-)
-
-
- -

-
Name
The name of this net. -
Style
The routing style that should be used when autorouting this net. -
- - -
- -


-Next: , -Previous: Net syntax, -Up: File Syntax - -
- -

8.8.17 Netlist

- - -

-
Netlist ( ) (
-   ... nets ...
-)
-
-
- - -

- -


-Next: , -Previous: Netlist syntax, -Up: File Syntax - -
- -

8.8.18 Pad

- - -

-
Pad [rX1 rY1 rX2 rY2 Thickness Clearance Mask "Name" "Number" SFlags]
-Pad (rX1 rY1 rX2 rY2 Thickness Clearance Mask "Name" "Number" NFlags)
-Pad (aX1 aY1 aX2 aY2 Thickness "Name" "Number" NFlags)
-Pad (aX1 aY1 aX2 aY2 Thickness "Name" NFlags)
-
-
- -

-
rX1 rY1 rX2 rY2
Coordinates of the endpoints of the pad, relative to the element's -mark. Note that the copper extends beyond these coordinates by half -the thickness. To make a square or round pad, specify the same -coordinate twice. -
aX1 aY1 aX2 aY2
Same, but absolute coordinates of the endpoints of the pad. -
Thickness
width of the pad. -
Clearance
add to thickness to get clearance width. -
Mask
width of solder mask opening. -
Name
name of pin -
Number
number of pin -
SFlags
symbolic or numerical flags -
NFlags
numerical flags only -
- - -
- -


-Next: , -Previous: Pad syntax, -Up: File Syntax - -
- -

8.8.19 PCB

- - -

-
PCB ["Name" Width Height]
-PCB ("Name" Width Height]
-PCB ("Name")
-
-
- -

-
Name
Name of the PCB project -
Width Height
Size of the board -
- -

If you don't specify the size of the board, a very large default is -chosen. - - -

- -


-Next: , -Previous: PCB syntax, -Up: File Syntax - -
- -

8.8.20 Pin

- - -

-
Pin [rX rY Thickness Clearance Mask Drill "Name" "Number" SFlags]
-Pin (rX rY Thickness Clearance Mask Drill "Name" "Number" NFlags)
-Pin (aX aY Thickness Drill "Name" "Number" NFlags)
-Pin (aX aY Thickness Drill "Name" NFlags)
-Pin (aX aY Thickness "Name" NFlags)
-
-
- -

-
rX rY
coordinates of center, relative to the element's mark -
aX aY
absolute coordinates of center. -
Thickness
outer diameter of copper annulus -
Clearance
add to thickness to get clearance diameter -
Mask
diameter of solder mask opening -
Drill
diameter of drill -
Name
name of pin -
Number
number of pin -
SFlags
symbolic or numerical flags -
NFlags
numerical flags only -
- - -
- -


-Next: , -Previous: Pin syntax, -Up: File Syntax - -
- -

8.8.21 PolyArea

- - -

-
PolyArea [Area]
-
-
- -

-
Area
Minimum area of polygon island to retain. If a polygon has clearances that cause an isolated island to be created, then will only be retained if the area exceeds this minimum area. -
- - -
- -


-Next: , -Previous: PolyArea syntax, -Up: File Syntax - -
- -

8.8.22 Polygon

- - -

-
Polygon (SFlags) (
-   ... (X Y) ...
-   ... [X Y] ...
-   Hole (
-      ... (X Y) ...
-      ... [X Y] ...
-   )
-   ...
-)
-
-
- -

-
SFlags
Symbolic or numeric flags. -
X Y
Coordinates of each vertex. You must list at least three coordinates. -
Hole (...)
Defines a hole within the polygon's outer contour. There may be zero or more such sections. -
- - -
- -


-Next: , -Previous: Polygon syntax, -Up: File Syntax - -
- -

8.8.23 Rat

- - -

-
Rat [X1 Y1 Group1 X2 Y2 Group2 SFlags]
-Rat (X1 Y1 Group1 X2 Y2 Group2 NFlags)
-
-
- -

-
X1 Y1 X2 Y2
The endpoints of the rat line. -
Group1 Group2
The layer group each end is connected on. -
SFlags
Symbolic or numeric flags. -
NFlags
Numeric flags. -
- - -
- -


-Next: , -Previous: Rat syntax, -Up: File Syntax - -
- -

8.8.24 Styles

- - -

-
Styles("String")
-
-
- -

-
String
-Encodes the four routing styles pcb knows about. The four styles -are separated by colons. Each style consists of five parameters as follows: - -
-
Name
The name of the style. -
Thickness
Width of lines and arcs. -
Diameter
Copper diameter of pins and vias. -
Drill
Drill diameter of pins and vias. -
Keepaway
Minimum spacing to other nets. If omitted, 10 mils is the default. - -
- -
- -
     Styles("Signal,10,40,20:Power,25,60,35:Fat,40,60,35:Skinny,8,36,20")
-     Styles["Logic,1000,3600,2000,1000:Power,2500,6000,3500,1000:
-        Line,4000,6000,3500,1000:Breakout,600,2402,1181,600"]
-
-

Note that strings in actual files cannot span lines; the above example -is split across lines only to make it readable. - - -

- -


-Next: , -Previous: Styles syntax, -Up: File Syntax - -
- -

8.8.25 Symbol

- - -

-
Symbol [Char Delta] (
-Symbol (Char Delta) (
-   ... symbol lines ...
-)
-
-
- -

-
Char
The character or numerical character value this symbol represents. -Characters must be in single quotes. -
Delta
Additional space to allow after this character. -
- - -
- -


-Next: , -Previous: Symbol syntax, -Up: File Syntax - -
- -

8.8.26 SymbolLine

- - -

-
SymbolLine [X1 Y1 X2 Y1 Thickness]
-SymbolLine (X1 Y1 X2 Y1 Thickness)
-
-
- -

-
X1 Y1 X2 Y2
The endpoints of this line. -
Thickness
The width of this line. -
- - -
- -


-Next: , -Previous: SymbolLine syntax, -Up: File Syntax - -
- -

8.8.27 Text

- - -

-
Text [X Y Direction Scale "String" SFlags]
-Text (X Y Direction Scale "String" NFlags)
-Text (X Y Direction "String" NFlags)
-
-
- -

-
X Y
The location of the upper left corner of the text. -
Direction
0 means text is drawn left to right, 1 means up, 2 means right to left -(i.e. upside down), and 3 means down. -
Scale
Size of the text, as a percentage of the “default” size of of the -font (the default font is about 40 mils high). Default is 100 (40 -mils). -
String
The string to draw. -
SFlags
Symbolic or numeric flags. -
NFlags
Numeric flags. -
- - -
- -


-Next: , -Previous: Text syntax, -Up: File Syntax - -
- -

8.8.28 Thermal

- - -

-
Thermal [Scale]
-
-
- -

-
Scale
Relative size of thermal fingers. A value of 1.0 makes the finger -width twice the clearance gap width (measured across the gap, not -diameter). The normal value is 0.5, which results in a finger width -the same as the clearance gap width. -
- - -
- -


-Previous: Thermal syntax, -Up: File Syntax - -
- -

8.8.29 Via

- - -

-
Via [X Y Thickness Clearance Mask Drill "Name" SFlags]
-Via (X Y Thickness Clearance Mask Drill "Name" NFlags)
-Via (X Y Thickness Clearance Drill "Name" NFlags)
-Via (X Y Thickness Drill "Name" NFlags)
-Via (X Y Thickness "Name" NFlags)
-
-
- -

-
X Y
coordinates of center -
Thickness
outer diameter of copper annulus -
Clearance
add to thickness to get clearance diameter -
Mask
diameter of solder mask opening -
Drill
diameter of drill -
Name
string, name of via (vias have names?) -
SFlags
symbolic or numerical flags -
NFlags
numerical flags only -
- - - -
- -


-Next: , -Previous: File Syntax, -Up: File Formats - -
- -

8.9 Object Flags

- -

Note that object flags can be given numerically (like 0x0147) -or symbolically (like "found,showname,square". Some numeric -values are reused for different object types. The table below lists -the numeric value followed by the symbolic name. - -

-
0x0001 pin
If set, this object is a pin. This flag is for internal use only. -
0x0002 via
Likewise, for vias. -
0x0004 found
If set, this object has been found by FindConnection(). -
0x0008 hole
For pins and vias, this flag means that the pin or via is a hole -without a copper annulus. -
0x0010 rat
If set for a line, indicates that this line is a rat line instead of a -copper trace. -
0x0010 pininpoly
For pins and pads, this flag is used internally to indicate that the -pin or pad overlaps a polygon on some layer. -
0x0010 clearpoly
For polygons, this flag means that pins and vias will normally clear -these polygons (thus, thermals are required for electrical -connection). When clear, polygons will solidly connect to pins and -vias. -
0x0010 hidename
For elements, when set the name of the element is hidden. -
0x0020 showname
For elements, when set the names of pins are shown. -
0x0020 clearline
For lines and arcs, the line/arc will clear polygons instead of -connecting to them. -
0x0020 fullpoly
For polygons, the full polygon is drawn (i.e. all parts instead of only the biggest one). -
0x0040 selected
Set when the object is selected. -
0x0080 onsolder
For elements and pads, indicates that they are on the solder side. -
0x0080 auto
For lines and vias, indicates that these were created by the -autorouter. -
0x0100 square
For pins and pads, indicates a square (vs round) pin/pad. -
0x0200 rubberend
For lines, used internally for rubber band moves. -
0x0200 warn
For pins, vias, and pads, set to indicate a warning. -
0x0400 usetherm
Obsolete, indicates that pins/vias should be drawn with thermal -fingers. -
0x0400
Obsolete, old files used this to indicate lines drawn on silk. -
0x0800 octagon
Draw pins and vias as octagons. -
0x1000 drc
Set for objects that fail DRC. -
0x2000 lock
Set for locked objects. -
0x4000 edge2
For pads, indicates that the second point is closer to the edge. For -pins, indicates that the pin is closer to a horizontal edge and thus -pinout text should be vertical. -
0x8000 marker
Marker used internally to avoid revisiting an object. -
0x10000 nopaste
For pads, set to prevent a solderpaste stencil opening for the -pad. Primarily used for pads used as fiducials. -
- - -
- -


-Previous: Object Flags, -Up: File Formats - -
- -

8.10 PCBFlags

- -
-
0x00001
Pinout displays pin numbers instead of pin names. -
0x00002
Use local reference for moves, by setting the mark at the beginning of -each move. -
0x00004
When set, only polygons and their clearances are drawn, to see if -polygons have isolated regions. -
0x00008
Display DRC region on crosshair. -
0x00010
Do all move, mirror, rotate with rubberband connections. -
0x00020
Display descriptions of elements, instead of refdes. -
0x00040
Display names of elements, instead of refdes. -
0x00080
Auto-DRC flag. When set, PCB doesn't let you place copper that -violates DRC. -
0x00100
Enable 'all-direction' lines. -
0x00200
Switch starting angle after each click. -
0x00400
Force unique names on board. -
0x00800
New lines/arc clear polygons. -
0x01000
Crosshair snaps to pins and pads. -
0x02000
Show the solder mask layer. -
0x04000
Draw with thin lines. -
0x08000
Move items orthogonally. -
0x10000
Draw autoroute paths real-time. -
0x20000
New polygons are full ones. -
0x40000
Names are locked, the mouse cannot select them. -
0x80000
Everything but names are locked, the mouse cannot select anything else. -
0x100000
New polygons are full polygons. -
0x200000
When set, element names are not drawn. -
- - -
- -


-Next: , -Previous: File Formats, -Up: Top - -
- -

9 Library Creation

- -

-This chapter provides a detailed look at how footprint libraries are -created and used. The chapter is split into two section, the first -section covers the "old" style libraries which use the m4 macro -processor and the second section covers the "new" style libraries. - -

Despite the names "old" and "new", both styles of libraries are useful -and the "old" style should not be discounted because of its name. The -advantage of the old style libraries is that one can define a family of -footprints, say a DIP package, and then quickly produce all the members -of that family. Because the individual packages make use of a base -definition, corrections made to the base definition propagate to all the -members of a family. The primary drawback to using this library -approach is that the effort to create a single footprint is more than a -graphical interface and may take even longer if the user has not used -the m4 macro language previously. - -

The new style of footprint libraries stores each footprint in its own -file. The footprints are created graphically by placing pads and then -converting a group of pads to a component. This library method has the -advantage of being quick to learn and it is easily to build single -footprints quickly. If you are building a family of parts, however, the -additional effort in creating each one individually makes this approach -undesirable. In addition, creating a part with a large pin count -can be quite tedious when done by hand. - -

9.1 Old Style (m4) Libraries

- -

The old style libraries for pcb use the m4 macro processor to -allow the definition of a family of parts. There are several files -associated with the old style library. The file common.m4 is the -top level file associated with the library. common.m4 defines a -few utility macros which are used by other portions of the library, -and then includes a predefined set of library files (the lines like -include(geda.inc)). - -

9.1.1 Overview of Oldlib Operation

- -

The big picture view of the old style library system is that the library -is simply a collection of macro definitions. The macros are written in -the m4 macro language. An example of a macro and what it expands -to is the following. One of the predefined footprints in the library -which comes with PCB is the PKG_SO8 macro. Note that all the -footprint macros begin with PKG_. For this particular example, -PKG_SO8 is a macro for an 8-pin small outline surface mount -package. All of the footprint macros take 3 arguments. The first is the -canonical name of the footprint on the board. In this case "SO8" is an -appropriate name. The second argument is the reference designator on -the board such as "U1" or "U23". The third and final argument is the -value. For an integrated circuit this is usually the part number such -as "MAX4107" or "78L05" and for a component such as a resistor or -capacitor it is the resistance or capacitance. The complete call to the -macro in our example is ‘PKG_SO8(SO8, U1, MAX4107)’. When -processed by m4 using the macros defined in the PCB library, this -macro expands to -

     Element(0x00 "SO8" "U1" "MAX4107" 146 50 3 100 0x00)
-     (
-     	Pad(10 25 38 25 20 "1" 0x00)
-     	Pad(10 75 38 75 20 "2" 0x100)
-     	Pad(10 125 38 125 20 "3" 0x100)
-     	Pad(10 175 38 175 20 "4" 0x100)
-     	Pad(214 175 242 175 20 "5" 0x100)
-     	Pad(214 125 242 125 20 "6" 0x100)
-     	Pad(214 75 242 75 20 "7" 0x100)
-     	Pad(214 25 242 25 20 "8" 0x100)
-     	ElementLine(0 0 151 0 10)
-     	ElementArc(126 0 25 25 0 180 10)
-     	ElementLine(101 0 252 0 10)
-     	ElementLine(252 0 252 200 10)
-     	ElementLine(252 200 0 200 10)
-     	ElementLine(0 200 0 0 10)
-     	Mark(29 25)
-     )
-
-

which is the actual definition of the footprint that the PCB program -works with. As a user of PCB the only time you will need or want to run -m4 directly is when you are debugging a new library addition. In -normal operation, the calls to m4 are made by helper scripts that -come with PCB. - -

Tools such as gsch2pcb (used to interface the gEDA schematic -capture program to PCB layout) will call m4 to produce an initial -PCB layout that includes all the components on a schematic. In -addition, when manually instantiating parts from within PCB, m4 -will be called by PCB's helper scripts to produce the footprints. - -

9.1.2 The Library Scripts

- -

There are several scripts that are used for processing the m4 -libraries. This section briefly describes these scripts and details how -they are used by PCB. - -

9.1.2.1 Scripts Used During Compilation
- -

The scripts described in this section are used during compilation of -PCB. They are run automatically by the build system, but are described -here to help document the complete library processing that occurs. -During the build of PCB, the following actions are taken. The -CreateLibrary.sh script is run to produce an M4 "frozen file". -This frozen file is simply a partially processed M4 input file which can -be loaded by M4 more quickly than the original input file. - -

A typical call to CreateLibrary.sh used during the compilation of -PCB is: -

     ./CreateLibrary.sh -I . pcblib ./common.m4 TTL_74xx_DIL.m4
-     connector.m4 crystal.m4 generic.m4 genericsmt.m4 gtag.m4
-     jerry.m4 linear.m4 logic.m4 lsi.m4 memory.m4 optical.m4 pci.m4
-     resistor_0.25W.m4 resistor_adjust.m4 resistor_array.m4
-     texas_inst_amplifier.m4 texas_inst_voltage_reg.m4
-     transistor.m4 geda.m4
-
-

The ‘-I .’ says to search in the current directory for the -.m4 files. The output frozen file is pcblib. The main -common.m4 file is listed as well as all of the *.m4 files -which define the components in the library. - -

In addition, a library contents file is created during the build with -the CreateLibraryContents.sh script. -A typical call to CreateLibrary.sh used during the compilation of -PCB is: -

     ./CreateLibraryContents.sh -I . ./common.m4 TTL_74xx_DIL.list
-     connector.list crystal.list generic.list genericsmt.list gtag.list
-     jerry.list linear.list logic.list lsi.list memory.list optical.list
-     pci.list resistor_0.25W.list resistor_adjust.list resistor_array.list
-     texas_inst_amplifier.list texas_inst_voltage_reg.list transistor.list
-     geda.list > pcblib.contents
-
-

The pcblib.contents file is used by the PCB program to define the -libraries and components which will be displayed when you bring up -the library window from within PCB. An example of part of the -pcblib.contents file is: -

     TYPE=~TTL 74xx DIL
-     7400_dil:N:7400:4 dual-NAND
-     7401_dil:N:7401:4 dual-NAND OC
-     7402_dil:N:7402:4 dual-NOR
-     TYPE=~geda
-     geda_DIP6:DIP6:DIP6:Dual in-line package, narrow (300 mil)
-     geda_DIP8:DIP8:DIP8:Dual in-line package, narrow (300 mil)
-     geda_DIP14:DIP14:DIP14:Dual in-line package, narrow (300 mil)
-     geda_ACY300:ACY300:ACY300:Axial non-polar component,
-
-

The TYPE= lines define the library name that will show up in the -library window in PCB. The other lines define the actual components in -the library. - -

9.1.2.2 Scripts Used by PCB at Runtime
- -

When PCB is first executed, it makes a call to the -ListLibraryContents.sh script. This script provides the PCB -program with the contents of the library contents file created when PCB -was compiled. A typical call to ListLibraryContents.sh is -

     ../lib/ListLibraryContents.sh .:/tmp/pcb-20030903/src/../lib pcblib
-
-

This command says to search the path -‘.:/tmp/pcb-20030903/src/../lib’ for a file called -pcblib.contents (the .contents part is added -automatically) and display the contents of the file. -PCB parses this output and generates the library window entries. - -

When you pick a library component from the library window, PCB calls the -QueryLibrary.sh script to actually pull the footprint into the -layout. For example, when the ACY300 component is selected from the -~geda library, the generated call may be: - -

     /tmp/pcb-20030903/src/../lib/QueryLibrary.sh
-     .:/tmp/pcb-20030903/src/../lib pcblib geda_ACY300 ACY300
-     ACY300
-
-

If you were to run this command by hand you would see the PCB code for -the element: -

     Element(0x00 "Axial non-polar component," "" "ACY300" 245 70 0 100 0x00)
-     (
-     	Pin(0 25 50 20 "1" 0x101)
-     	Pin(300 25 50 20 "2" 0x01)
-     
-     	ElementLine(0 25 75 25 10)
-     	ElementLine(225 25 300 25 10)
-     
-     	ElementLine(75 0 225 0 10)
-     	ElementLine(225 0 225 50 10)
-     	ElementLine(225 50 75 50 10)
-     	ElementLine(75 50 75 0 10)
-     
-     #       ElementArc(X1 Y 50 50 270 180 10)
-     #       ElementArc(X2 Y 50 50 90 180 10)
-     
-     	Mark(75 25)
-     )
-
-

9.1.3 Creating an Oldlib Footprint

- -

This section provides a complete example of defining a family of -footprints using the M4 style library. As a vehicle for this example, a -family of footprints for surface mount resistors and capacitors will be -developed. The file example.inc should have been installed on -your system as $prefix/share/examples/oldlib/example.inc where -$prefix is often times /usr/local. - -

The example.inc file defines a macro called -COMMON_PKG_RCSMT which is a generic definition for a surface -mount footprint with two identical, rectangular pads. This macro will -be called with different parameters to fill out the family of parts. -The arguments to the COMMON_PKG_RCSMT are: -

     # -------------------------------------------------------------------
-     # the definition for surface mount resistors and capacitors
-     # $1: canonical name
-     # $2: name on PCB
-     # $3: value
-     # $4: pad width   (in direction perpendicular to part)
-     # $5: pad length  (in direction parallel with part)
-     # $6: pad spacing (center to center)
-     # $7: distance from edge of pad to silk (in direction
-     #     perpendicular to part)
-     # $8: distance from edge of pad to silk (in direction parallel
-     #     with part)
-     # $9: Set to "no" to skip silk screen on the sides of the part
-
-
     define(`COMMON_PKG_RCSMT',
-     	`define(`XMIN', `eval( -1*`$6'/2 - `$5'/2 - `$8')')
-     	define(`XMAX', `eval(  `$6'/2 + `$5'/2 + `$8')')
-     	define(`YMIN', `eval(-1*`$4'/2 - `$7')')
-     	define(`YMAX', `eval(   `$4'/2 + `$7')')
-     Element(0x00 "$1" "$2" "$3" eval(XMIN+20) eval(YMAX+20) 0 100 0x00)
-     (
-     	ifelse(0, eval($4>$5),
-     	# Pads which have the perpendicular pad dimension less
-     	# than or equal to the parallel pad dimension
-     	Pad(eval(-1*(   $6 + $5 - $4)/2) 0
-     	    eval((-1*$6 + $5 - $4)/2) 0 eval($4) "1" 0x100)
-     	Pad(eval(-1*(-1*$6 + $5 - $4)/2) 0
-     	    eval((   $6 + $5 - $4)/2) 0 eval($4) "2" 0x100)
-     	,
-     	# Pads which have the perpendicular pad dimension greater
-     	# than or equal to the parallel pad dimension
-     	Pad(eval(-1*$6/2) eval(-1*($4 - $5)/2)
-     	    eval(-1*$6/2)  eval(($4 - $5)/2) eval($5) "1" 0x100)
-     	Pad(eval(   $6/2) eval(-1*($4 - $5)/2)
-     	    eval(   $6/2)  eval(($4 - $5)/2) eval($5) "2" 0x100)
-     	)
-     
-     	# silk screen
-     	# ends
-     	ElementLine(XMIN YMIN XMIN YMAX 10)
-     	ElementLine(XMAX YMAX XMAX YMIN 10)
-     	# sides
-     ifelse($9,"no",
-     	#skip side silk
-     	,
-     	ElementLine(XMIN YMIN XMAX YMIN 10)
-     	ElementLine(XMAX YMAX XMIN YMAX 10)
-     )
-     	Mark(0 0)
-     )')
-
-

Note that the part has been defined with the mark located at -(0,0) and that the pads have been placed with the mark at the -common centroid of the footprint. While not a requirement, this is -highly desirable when developing a library that will need to interface -with a pick and place machine used for factory assembly of a board. - -

The final part of example.inc defines particular versions of the -generic footprint we have created. These particular versions correspond -to various industry standard package sizes. -

     # 0402 package
-     #
-     # 30x30 mil pad, 15 mil metal-metal spacing=>
-     # 15 + 15 + 15 = 45 center-to-center
-     define(`PKG_RC0402',
-       `COMMON_PKG_RCSMT(`$1', `$2', `$3', 30, 30, 45, 0, 10, "no")')
-     
-     # 0603 package
-     #
-     # 40x40 mil pad, 30 mil metal-metal spacing=>
-     #  30 + 20 + 20 = 70 center-to-center
-     define(`PKG_RC0603',
-       `COMMON_PKG_RCSMT(`$1', `$2', `$3', 40, 40, 70, 10, 10)')
-     
-     # 1206 package
-     #
-     # 40x60 mil pad, 90 mil metal-metal spacing=>
-     #  90 + 20 + 20 = 130 center-to-center
-     define(`PKG_RC1206',
-       `COMMON_PKG_RCSMT(`$1', `$2', `$3', 60, 40, 130, 10, 10)')
-
-

At this point, the example.inc file could be used by third party -tools such as gsch2pcb. However to fully integrate our -footprints into PCB we need to create the example.m4 and -example.list files. The example.m4 file defines -descriptions for the new footprints. -

     define(`Description_my_RC0402',
-       ``Standard SMT resistor/capacitor (0402)'')
-     define(`Description_my_RC0603',
-       ``Standard SMT resistor/capacitor (0603)'')
-     define(`Description_my_RC1206',
-       ``Standard SMT resistor/capacitor (1206)'')
-
-

Finally we need to create the example.list file. -

     my_RC0402:RC0402:RES0402
-     my_RC0402:RC0402:CAP0402
-     my_RC0603:RC0603:RES0603
-     my_RC0603:RC0603:CAP0603
-     my_RC1206:RC1206:RES1206
-     my_RC1206:RC1206:CAP1206
-
-

The first field in the list file has the name corresponding to the -Description definitions in example.m4. The second field is the -template name which corresponds to the macros PKG_* we defined in -example.inc with the leading PKG_ removed. It is the -second field which controls what footprint will actually appear on the -board. The final -field is the name of the part type on the board. The first line in our -example.list file will produce a menu entry in the library window -that reads: -

     CAP0402, Standard SMT resistor/capacitor (0402)
-
-

The CAP0402 portion comes directly from the third field in -example.list and the longer description comes from descriptions -macros in example.m4. Please note that any extra white space -at the end of a line in the .list files will cause them to -not work properly. - -

9.1.4 Troubleshooting Old Style Libraries

- -

A powerful technique to help debug problems with libraries is to invoke -the m4 processor directly. This approach will provide error -output which is not visible from within PCB. The following example -shows how one might try to debug an 8 pin small outline (SO8) package. The -macro name for the package is PKG_SO8. In this example, the -canonical name that is to be associated with the part is SO8, the -reference designator is U1, and the value is MAX4107 (the part number). - -

     echo "PKG_SO8(SO8, U1, MAX4107)" | \
-        gm4 common.m4 - | \
-        awk '/^[ \t]*$/ {next} {print}' | \
-        more
-
-

The awk call simply removes blank lines which make the output -hard to read. - -

For this particular example, the output is: -

     Element(0x00 "SO8" "U1" "MAX4107" 146 50 3 100 0x00)
-     (
-     	Pad(10 25 38 25 20 "1" 0x00)
-     	Pad(10 75 38 75 20 "2" 0x100)
-     	Pad(10 125 38 125 20 "3" 0x100)
-     	Pad(10 175 38 175 20 "4" 0x100)
-     	Pad(214 175 242 175 20 "5" 0x100)
-     	Pad(214 125 242 125 20 "6" 0x100)
-     	Pad(214 75 242 75 20 "7" 0x100)
-     	Pad(214 25 242 25 20 "8" 0x100)
-     	ElementLine(0 0 151 0 10)
-     	ElementArc(126 0 25 25 0 180 10)
-     	ElementLine(101 0 252 0 10)
-     	ElementLine(252 0 252 200 10)
-     	ElementLine(252 200 0 200 10)
-     	ElementLine(0 200 0 0 10)
-     	Mark(29 25)
-     )
-
-

9.2 New Style Libraries

- -

Footprints for the new style library are created graphically using the -PCB program. A single footprint is saved in each file. - -

9.2.1 Creating Newlib Footprints

- -

To create -

    -
  1. Start PCB with an empty layout. -
  2. Make the component layer active. -
  3. For a leaded part, select the via tool and place vias where the -pads for the part should go. For surface mount pads, draw line -segments. Note that until the footprint is completed, the surface -mount pads will remain rounded. Currently a rectangle or polygon -may not be used as a pad. -
  4. For each via and line segment which will become a pad, select it -and press 'n' to be able to enter a name. Enter -the pin number and press enter. -
  5. Make the silk layer active. -
  6. Using the line and arc tools, draw a silk screen outline for the -part. -
  7. Using the selection tool, select all of the pins and silk screen -for the part. -
  8. Place the pointer above the reference point for the part. This is -typically the common centroid. Keeping the pointer there, shift-right-click -to bring up the popup menu and choose "convert -selection to element". -
  9. At this point, the vias, line segments, and silk screen will have -been converted to an element. To change any of the line segments to -have square ends rather than round ends, select the pads by holding -down the shift key and clicking each pad with the center mouse button. -Now under the Select menu, "Change square-flag of selected objects" -section, choose "Pins". -
  10. Select the element, shift-right-click to bring up the popup menu, and -choose "Copy Selection to Buffer". Now left-click on the center of -the new element. -
  11. Under the buffer menu, choose "save buffer elements to file" to -save the new footprint to a file. -
  12. Press ESC to exit from buffer mode. -
- -

9.2.2 Modifying Newlib Footprints

- -
    -
  1. In the Pcb program, instantiate the footprint you wish to modify. -
  2. Using the selection tool, select the footprint. -
  3. Now left-click on the selected element, this brings up a popup menu, choose -"Cut Selection to Buffer" from the popup menu. -
  4. Under the buffer menu, choose "break buffer element to pieces", -and then left-click to place the broken apart footprint to an open area of -the layout. Note that you must use the items under the buffer menu, the -items with the same names in the popup menu do not work. -
  5. Make your desired modifications to the footprint and then convert -the pieces back to an element using the same procedure as when starting -from scratch on a new footprint. -
- - -
- -


-Next: , -Previous: Library Creation, -Up: Top - -
- -

10 Schematic Capture for PCB

- -

-When designing a circuit board of any complexity, a schematic capture -front-end for the design is highly desired. Any schematic capture -program which is able to generate a netlist in a user defined format as -well as a bill of materials can be made to work with PCB. Currently, we -are aware of two freely available schematic capture programs which can -interface with PCB. This chapter shows how a design can be taken from -start to finish using either of these two tools for schematic capture -and PCB for layout. - -

- -
- -


-Next: , -Up: Schematic Frontends - -
- -

10.1 gEDA

- -

-This section shows how to use gEDA as the schematic capture front-end for -a PCB design. This section is not intended to be complete documentation -on gEDA and it is assumed that the user has at least some familiarity -with the gEDA suite of programs. - -

The basic steps in a gEDA + PCB design flow are: -

    -
  1. Set up project directories -
  2. Set up gEDA (gschem/gnetlist) config files -
  3. Set up gsch2pcb config files -
  4. Capture schematics using gschem (part of gEDA) -
  5. Create any unique PCB footprints needed for the design -
  6. Generate initial PCB design using gsch2pcb (part of gEDA) -
  7. Layout circuit board using pcb -
  8. Make any additional schematic changes with gschem and -forward annotate to PCB with gsch2pcb -
  9. Generate photoplot files (RS-274X, also known as "Gerber") for -board vendor -
- -

10.1.1 Set Up Project Directories

- -

Although not required, a typical project directory will contain the -schematics and board layout at the top level. -Schematic symbols and circuit board footprints which are unique to this -project are stored in subdirectories. For this example, sym -contains the project specific schematic symbols and pkg contains -the project specific footprints. Set up the project subdirectory and -subdirectories by executing: -

     mkdir ~/myproj
-     cd ~/myproj
-     mkdir sym
-     mkdir pkg
-     mkdir pkg/newlib
-     mkdir pkg/m4
-
-

10.1.2 Set Up gEDA Config Files

- -

The gEDA tools, specifically gschem and gnetlist, use -configuration files to set the search path for symbol libraries in -addition to other user preferences. Create a file in the top level -project directory called gschemrc. Add the following lines to -that file: -

     
-     ;; list libraries here.  Order matters as it sets the
-     ;; search order
-     (component-library "./sym")
-     
-
-

This sets the local search path for the schematic capture program -gschem. Now the netlister, gnetlist, must also be -configured. This can be done by copying the file gschemrc to -gnetlistrc by running ‘cp gschemrc gnetlistrc’. -Alternatively, you can create a soft link so only a single file needs to -be updated if additional symbol paths are added. The link is created by -running ‘ln -s gschemrc gnetlistrc’. - -

10.1.3 Set Up gsch2pcb Config Files

- -

The program gsch2pcb, not to be confused with the older -gschem2pcb script, is used to link the schematic to layout. -gsch2pcb is responsible for creating the netlist used to provide -connectivity information to PCB as well creating an initial layout with -all components instantiated in the design. Forward annotation of -schematic changes to the layout is also done using gsch2pcb. -gsch2pcb uses a project file to set up the schematic file names, -PCB library locations, and output file names. Create a project file -called project using the following as an example: -

     
-     # List all the schematics to be netlisted
-     # and laid out on the pc board.
-     schematics      first.sch second.sch third.sch
-     
-     # For an output-name of foo, gsch2pcb generates files
-     # foo.net, foo.pcb, and foo.new.pcb.  If there is no
-     # output-name specified, the file names are derived from
-     # the first listed schematic, i.e. first.net, etc.
-     output-name  preamp
-     
-
-

10.1.4 Capture Schematics Using gschem

- -

This section is fairly brief and assumes familiarity with using the -gschem schematic capture program. As you are creating your -schematics, be sure to observe the following rules: -

    -
  • Make sure that each component in the schematic has a -footprint attribute that corresponds to a footprint in the PCB -library or a footprint you plan on creating. -
  • Make sure all reference designators are unique. One way to ensure -this is to run the refdes_renum script (part of gEDA) after the -schematics are created. -
- -

10.1.5 Create Any Unique PCB Footprints

- -

Create the new footprints you design needs using either the m4 style or -newlib style of PCB libraries. Refer to Library Creation for details on this -process. For m4 style footprints, store them in the pkg/m4 -subdirectory and for newlib footprints, store them in the -pkg/newlib subdirectory. - -

10.1.6 Generate Initial PCB Design Using gsch2pcb

- -

The gsch2pcb program connects the schematic and layout. It basic -operation is to call gnetlist to generate the connectivity -netlist that PCB used to verify connectivity and to instantiate all -elements found in the schematic to a new layout. -The default, as of gsch2pcb version 0.9, is to use any found m4 -style parts first and then search for newlib style if no old style part -was found. By using the --use-files or -f flag to gsch2pcb -priority is given to newlib style parts even if m4 style are found. You -may wish to verify this in the gsch2pcb documentation in case -this changes in the future. -To start your layout, -run ‘gsch2pcb project’ where project is the project file -created previously. This will create a new netlist file, -preamp.net, and a new layout file, preamp.pcb. - -

10.1.7 Layout Circuit Board

- -

Run PCB on the new layout by running ‘pcb preamp.pcb’. -Load the netlist file by selecting "load netlist file" from the "file" -menu. In the file selection dialog box, choose preamp.net. This -loads connectivity information into PCB. - -

Using the selection tool, grab and move apart the various footprints -with the middle mouse button. Once the parts are moved apart from each -other, choose "optimize rats-nest" from the "Connects" menu. This menu -choice will display and optimize the rats nest. Use the rats nest to -help guide placement of the parts. You may wish to re-run the "optimize -rats-nest" command after moving parts around. - -

After the placement is complete, use the line tool to add traces to the -board. As traces are added, the corresponding rats line will disappear. - -

10.1.8 Forward Annotation of Schematic Changes

- -

If schematic changes are made after the layout has started, -gsch2pcb can be used to forward annotate these changes to the -layout. To forward annotate schematic changes, run ‘gsch2pcb -project’. This command will create the files preamp.new.pcb, -preamp.net, and modify the file preamp.pcb. The -modifications to preamp.pcb include forward annotation of -schematic component value changes, adds any new components, and removes -any deleted components. - -

10.1.9 Generate Photoplot Files (RS-274X)

- -

After the layout is complete, choose "edit layer-groupings" from the -"Settings" menu. The LayerGroups form lets you specify which layers -will appear in each output layer group. For example, in the default -form, layer group 1 has "front" and "front side" in it. The -output file 1.gbr if DOS file names are used, or -somename_front.gbr if long file names are used will contain the -"front" and "front side" layers in it. Usually the defaults are -sufficient, but this form is still a useful reference. - -

Choose "print layout..." from the "File" menu. In the print dialog box, -select "Gerber/RS-274X" for the device -driver. Select the "outline", "alignment", and "drillhelper" options. -To get DOS compatible file names, select the "DOS (8.3) names" option, -otherwise enter "preamp" for the filename. Press "OK". - -

The following output files should have been created in the project directory. -The names in parentheses correspond to the DOS compatible output file names. -

-
preamp_frontsilk.gbr (csilk.gbr)
Top side silk screen. -
preamp_frontmask.gbr (cmask.gbr)
Top side soldermask relief. -
preamp_front.gbr (1.gbr)
Top copper. -
preamp_backmask.gbr (smask.gbr)
Bottom side soldermask relief. -
preamp_back.gbr (2.gbr)
Bottom Copper. -
preamp_fab.gbr (fab.gbr)
Fabrication drawing. Also known as the drill drawing. This drawing is -used for reference by the board vendor but is not directly used in the -fabrication process. -
preamp_plated-drill.cnc (pdrill.cnc)
NC Drill format file for the plated through holes. -
preamp_unplated-drill.cnc (udrill.cnc)
NC Drill format file for the unplated through holes. -
preamp_bom.txt (bom.txt)
A bill of materials for the layout. -
preamp_xy.txt (xy.txt)
Centroid (X-Y) data for driving automated assembly equipment. -
- - - -
- -


-Previous: gEDA, -Up: Schematic Frontends - -
- -

10.2 xcircuit

- -

-If anyone cares to contribute this section, it will get added. Please -submit changes to the bug tracking system for PCB which can be found from -the PCB homepage at http://pcb.gpleda.org. - - -

- -


-Next: , -Previous: Schematic Frontends, -Up: Top - -
- -

Appendix A Installation and Troubleshooting

- -

Compiling and installing the package should be straightforward. If any problems -occur, please contact the author Thomas.Nau@rz.uni-ulm.de, or the -current maintainer haceaton@aplcomm.jhuapl.edu to find -a solution and include it into the next release. - -

- -
- -


-Next: , -Up: Installation - -
- -

A.1 Compiling and Installing

- -

-This section covers the steps which are necessary to compile the package. - -

- -
- -


-Next: , -Up: compiling - -
- -

A.1.1 Quick Start

- -

-Starting with version 2.0, Pcb has switched to a GNU -autoconf/automake build system. Installation of Pcb consists of -three steps: configuration, building, and installing. -In a typical installation, these steps are as simple as -

     ./configure
-     make
-     make install
-
-
- -


-Previous: quickstart, -Up: compiling - -
- -

A.1.2 Running the configure Script

- -

-The configure script accepts all of the standard GNU configure -options. For a complete list of configuration options, run -./configure --help. - - - -

INFOLIBDIR
must be set to the directory where your GNU info files are located. - -


PCBLIBDIR
is the path of a directory where the font files will be installed. - -


DEFAULTFONT
the name of the default font file. - -


DEFAULTLIBRARY
the name of the default library. - -


GNUM4
the name of GNUs m4 version. - -


BTNMOD
If your window manager has already bound Mod1 together with some -function keys you may want to change this setting. This is true for HP-VUE. - -
- -

If you find things which must be changed to compile on your system, -please add the appropriate autoconf tests (if you are familiar with -that) and mail a copy to the maintainer, harry eaton, at -haceaton@aplcomm.jhuapl.edu. - -

If you do not have the appropriate permissions you should run -./pcbtest.sh in the src directory to run Pcb from -the installation directory. - -

- -


-Previous: compiling, -Up: Installation - -
- -

A.2 Troubleshooting

- -

-There are some known problems. Most of them are related to -missing parts of a standard X11 distribution. Some others are caused by -third party applications such as X servers. To make this list more -complete please mail your problems and, if available, solutions to the author. -The mail address may be found at the beginning of this chapter. -In any case, read X11. - -

By the way, you MUST HAVE AN ANSI COMPILER to make Pcb work. - -

Another source of problems are older versions of flex and bison. -Pcb definitely works with flex-2.4.7 and bison-1.22 or -later. The problems will result in a syntax error while parsing files. -This should only be a problem if you have modified the flex or -bison input files. - -

The following list gives you just an idea because I'm not able to test -all Pcb releases on all platforms. - -

- -
- -


-Next: , -Up: problems - -
- -

A.2.1 HP Series 700 and 800

- -

-You have to install several X11 include files -or, better, install a complete X11R5 release. Hewlett-Packard doesn't -support the Athena Widgets. So the header files and libraries are missing -from the application media, but they are available as a patch. -They also do not ship the ANSI compiler with the normal operating -system release so you have to buy one or use GCC. -Some of the tools are available as patches. - -

In addition, Pcb has been successfully tested on these platforms with -HPUX 9.*, 10.* running self-compiled X11R5. - -

- -


-Next: , -Previous: HP, -Up: problems - -
- -

A.2.2 Sun SPARC architecture

- -

-There are no known problems with Sun machines if they use X11R5 instead -of OpenWindows. Pcb compiled successfully with all kinds of -SPARCstations Solaris-2.[345]. - -

For problems with OpenWindows refer to X11. - -

- -


-Next: , -Previous: Sun, -Up: problems - -
- -

A.2.3 Silicon Graphics

- -

-Pcb has been tested on some boxes running either IRIX-4.0.5 or -IRIX-5.3. The former one uses a X11R4 server. -There are no problems. -For known problems -with X11R4, see X11. - -

- -


-Next: , -Previous: SGI, -Up: problems - -
- -

A.2.4 DEC Alpha

- -

-Pcb compiled and runs without problems on DEC UNIX V3.2c. - -

- -


-Next: , -Previous: DEC Alpha, -Up: problems - -
- -

A.2.5 SCO Unix

- -

-John DuBois <spcecdt@deeptht.armory.com> wrote: -

     SCO-ODT-3.0 requires the latest version of tls003, the Athena
-     widget library (available from sosco.sco.com). The main problems
-     I have encountered are it core dumps fairly often, especially
-     while loading/dropping elements...
-
-

I'll see what I am able to do as soon as I have access to an SCO system. - -

- -


-Next: , -Previous: SCO, -Up: problems - -
- -

A.2.6 Linux

- -

-Since the X11 version of Pcb has been developed on a Linux -system here are no known problems. - -

- -


-Next: , -Previous: Linux, -Up: problems - -
- -

A.2.7 FreeBSD and NetBSD

- -

-Pcb has been tested on NetBSD and works without any problems. -You may also be able to find a NetBSD package at -ftp://ftp.netbsd.org/pub/NetBSD/packages/cad/pcb/README.html or a -FreeBSD port at -http://www.freebsd.org/cgi/url.cgi?ports/cad/pcb/pkg-descr. - -

- -


-Next: , -Previous: BSD, -Up: problems - -
- -

A.2.8 Problems related to X11

- -

-There are a some problems related to X11R4 or systems derived from -X11 such as OpenWindows. See Sun. You at least have to change -all occurances of baseTranslations in the resource files to -translations if you are using a X11R4 server. Look at the -X11R5 Intrinsics manual for details. - -

The panner widget (print dialog box) appears only in release X11R5 and -later. It really simplifies adjusting the offsets. -With earlier releases the printout will always appear in the center of the -page. - -

You may have some problems in a mixed X11-OpenWindows -environment. - -

Pcb has been tested successfully with X11R6 under Linux 1.1.59 -and later. - -

- -


-Previous: X11, -Up: problems - -
- -

A.2.9 Problems related to TeX

- -

-If your TeX installation complains about a missing texinfo.tex -file copy the one included in this release (directory doc -to your TeX macro directory. -Note, there are probably newer versions of this file available from some -FTP sites. -TeX-3.0 failed, TeX-3.14 worked just fine. Check our FTP server -ftp.uni-ulm.de for ready-to-print versions of the manuals. - - -

- -


-Next: , -Previous: Installation, -Up: Top - -
- -

Appendix B Customizing the Menus

- -

The menu system is driven off a data file that contains -resources. A resource is a hierarchical description of a data -tree which, in this case, is mapped to the hierarchical menus used by -Pcb. - -

- -
- -


-Next: , -Up: Custom Menus - -
- -

B.1 Resource Syntax

- -

A resource file is a simple text file. It contains curly braces to -group things, spaces between things, and double quotes when strings -need to include spaces. There are four fundamental ways of adding -data to a resource. - -

First, a string (either a single word or a quoted string with spaces, -we call both “strings” in this appendix) can be added all by itself, -to add a string resource to the current resource. This is used, for -example, to define the string printed on a menu button. In this -example, four strings are added to the File resource: - -

     File = {
-       Sample
-       "longer sample"
-       some text
-     }
-
-

Second, a named string may be added by giving two strings separated by -an equals sign. This is used to specify X resources and a few other -optional parameters of menus, for example. Note that a string all by -itself is thus an “unnamed” string. - -

     {"Layer groups" foreground=red sensitive=false}
-
-

Third, an unnamed subresource may be added. This is used to create -submenus and menu buttons. To add a subresource, simply group other -things in curly braces. This example describes a resource containing -one string and three subresources: - -

     {File
-       {New do_new()}
-       {Save do_save()}
-       {Quit do_quit()}
-     }
-
-

Lastly, a named subresource may be added by prefixing an unnamed -subresource with a string and an equals sign, just as when naming -strings. This syntax is used to name the resources used for the main -menu and popup menus: - -

     MainMenu = {
-       ...
-       }
-
-

Additionally, the menu parser allows for “hooks” whereby portions of -the menu system can be programmatically created at runtime by the -application. These hooks are invoked by a single word proceeded by an -at sign, such as this example where most of the Sizes menu is created -automatically: - -

     {Sizes
-         @sizes
-         {"Adjust active sizes ..." AdjustStyle(0)}
-         }
-
-

In addition to all that, any unquoted pound sign (#) begins a -comment. Commented text continues until the end of the containing -line. Comments may begin at the beginning of a line, or after other -text on the line: - -

     # This is a comment
-     MainMenu = { # This is also a comment
-
-
- -


-Next: , -Previous: Resource Syntax, -Up: Custom Menus - -
- -

B.2 Menu Definitions

- -

To best understand this section, you should find the -pcb-menu.res file that your Pcb uses and refer to it for -examples (see Menu Files and Defaults). Note that the lesstif -GUI uses pcb-menu.res and the GTK+ GUI uses gpcb-menu.res. -The file format is identical however and if so desired, one can make -one file be a soft link to the other. - -

A resource defines a menu when it meets certain semantic requirements. -The menu hierarchy is reflected as a hierarchy of unnamed -subresources, with the first string of each subresource defining the -label used for the menu button. A subresource that itself contains -subresources becomes a submenu, a subresource that does not becomes a -button. - -

A submenu should only contain subresources for the buttons or submenus -within that submenu. Two exceptions are allowed: an initial string -sets the label, and the string “-” (a single dash) will create a -separator. - -

A button should not contain subresources, but will contain many -strings, named and unnamed. The first member shall be an unnamed -string which is the label for the button. Any other unnamed strings -within the button's resource will be used as actions (much like the -.Xdefaults action strings), which are functions that will be called -when the button is pressed (or popped up, or created, depending on the -action). As a convenience, if a left parenthesis is seen, the current -“word” will continue at least until the matching right parenthesis. -This allows you to pass strings with spaces as arguments to actions -without needing to quote the action. - -

Named resources in button resources will be used as X resources. Such -resources can be used to set the font, color, and spacing of buttons. -As a convenience, “fg” can be used as an abbreviation for “foreground”. - -

Within the menu's resource file, Pcb will look for a few key named -subresources. At the moment, the only one it looks for is one called -MainMenu. This will be used for the main menu bar. In the -future, other named subresources will be used for popup resources. - -

Given all this, a small sample pcb-menu.res would be: - -

     MainMenu = {
-       {File
-         {"Load layout" Load(Layout)}
-         -
-         {"Quit Program" Quit() fg=red font=10x20}
-       }
-     }
-
-

Within the Pcb sources are specially crafted comments that mark all -the actions, flags, menu hooks, and whatnot that Pcb offers. Read the -file src/gather-actions in the Pcb source tree for -documentation for these comments. - -

- -


-Previous: Menu Definitions, -Up: Custom Menus - -
- -

B.3 Menu Files and Defaults

- -

Pcb will look for a file which defines its menus, trying the following -names (the example is for the lesstif GUI, the GTK+ GUI has “gpcb-menu.res” -in place of “pcb-menu.res”): - -

     ./pcb-menu.res
-     $HOME/.pcb-menu.res
-     $PCBLIBDIR/pcb-menu.res
-     <internal>
-
-

Note that pcblibdir defaults to /usr/local/share/pcb -(hence, /usr/local/share/pcb/pcb-menu.res). The -<internal> entry refers to a menu definition within the Pcb -application itself. The master file for all this is the file -src/pcb-menu.res in the Pcb source tree. This master source is -used to create the internal menu definition as well as being installed -in $pcblibdir. - - -

- -


-Next: , -Previous: Custom Menus, -Up: Top - -
- -

Appendix C Element Search/Regular Expressions

- -

- -

C.1 Element Search/Regular Expressions

- -

Pcb's search is based on POSIX 1003.2 Regular Expressions. Full POSIX -Regular Expressions are supported by Pcb if the regex library was -available when Pcb was built. One difference from the regular -expressions found in tools like awk or grep is that PCB implicitly -adds a “^” to the begining of a regular expression and “$” to the -end of the regular expression. For example, if you enter “C1”, the -actual regular expression used internally is “^C1$”. Another difference -is that search patterns in pcb are not case sensitive. That is, “CON” is -treated the same as “con”. - -

It is easier to show by example how to search than explain -POSIX 1003.2. With regular expressions most characters are just -themselves, but some are special: - -

-
*
Matches 0 or more instances of preceding character. - -
+
Matches 1 or more instances of preceding character. - -
?
Matches 0 or 1 instances of preceding character. - -
.
Matches any single character other than the newline character. - -
|
The vertical bar is the alternation operator. It combines two -regular expressions. The result matches if either of them matches. - -
\
A backslash indicates the next character should not be interpreted literally -if it normally is, and should be interpreted literally if it normally isn't. - -
{n}
An integer n enclosed in curly brackets matches the preceding item if -it occurs exactly n times. - -
[ ]
A pair of square brackets matches every character they contain. Characters -may be given explicitly, or as ranges. - -
-
A hyphen in the context of square brackets denotes the range between the -preceding and the following character. E.g., the range of digits is -“0-9” . The range of letters from C to K is “C-K” . - -
\^ inside square brackets
Inside square brackets the caret is an anti operator. Its presence makes -the square prackets match anything except the contents of the brackets. - -
( )
Round parenthesis group parts of a regular expression. This is very much -like they do in math formulars. - -
- -

If you need a special character literally, you can escape it with a -backslash. - -

The following examples illustrate how regular expressions can be used to -specify element names (reference designators) to search for. -

-
C5
Select the element whose name is exactly “C5”. - -
C5 | R3
Select C5 and R3. - -
C.*
Select all elements whose name start with the letter “C”, such as C5, or -C42, or CF1. - -
C.*1
Select all elements that start with “C” and end with “1”, such as C1, -or C51 or C5/9B71. - -
R10?
Search for R1 or R10, but will not select R100 or R105. The question mark -is a quantifier for the character “0”. - -
R128+
Selects R128, R1288, R12888, etc. - -
TB.
Select all terminal blocks having exactly one character designator after -“TB” such as TB1, TBA, or TBx but not TB. - -
TB..
Select all terminal blocks having a two character designator such as TB21 or -TB1a. - -
TB.*
Select all terminal blocks with any designator. - -
.*31
Select all items, whose name ends with “31” such as Q31, or R31, or R531. - -
Q[12]
Select Q1 and Q2. - -
[A-D].*
Select all items, whose name starts with “A”, “B”, “C”, or “D”. - -
.*N{2}.*
Select all items, whose name contains two “N” in a row such as -CONN23, or connA, but not CON5 - -
[^D].*
Select all items that do not start with the letter “D”, such as C2, or -R34, but not D34 - -
- - -
- -


-Next: , -Previous: Regular Expressions, -Up: Top - -
- -

Appendix D Standard Drill Size Tables

- -

- -

D.1 American Standard Wire Size Drills

- - - -

Drill Diameter Drill Diameter Drill Diameter -
Size (inches) Size (inches) Size (inches) - -


97 .0059 96 .0063 95 .0067 -
94 .0071 93 .0075 92 .0079 -
91 .0083 90 .0087 89 .0091 -
88 .0095 87 .0100 86 .0105 -
85 .0110 84 .0115 83 .0120 -
82 .0125 81 .0130 80 .0135 -
79 .0145 78 .0160 77 .0180 -
76 .0200 75 .0210 74 .0225 -
73 .0240 72 .0250 71 .0260 -
70 .0280 69 .0292 68 .0310 -
67 .0320 66 .0330 65 .0350 -
64 .0360 63 .0370 62 .0380 -
61 .0390 60 .0400 59 .0410 -
58 .0420 57 .0430 56 .0465 -
55 .0520 54 .0550 53 .0595 -
52 .0635 51 .0670 50 .0700 -
49 .0730 48 .0760 47 .0785 -
46 .0810 45 .0820 44 .0860 -
43 .0890 42 .0935 41 .0960 -
40 .0980 39 .0995 38 .1015 -
37 .1040 36 .1065 35 .1100 -
34 .1110 33 .1130 32 .1160 -
31 .1200 30 .1285 29 .1360 -
28 .1405 27 .1440 26 .1470 -
25 .1495 24 .1520 23 .1540 -
22 .1570 21 .1590 20 .1610 -
19 .1660 18 .1695 17 .1730 -
16 .1770 15 .1800 14 .1820 -
13 .1850 12 .1890 11 .1910 -
10 .1935 9 .1960 8 .1990 -
7 .2010 6 .2040 5 .2055 -
4 .2090 3 .2130 2 .2210 -
1 .2280 -
- -

D.2 American Standard Letter Size Drills

- - - -

Drill Diameter Drill Diameter Drill Diameter -
Size (inches) Size (inches) Size (inches) - -


A .2340 B .2380 C .2420 -
D .2460 E .2500 F .2570 -
G .2610 H .2660 I .2720 -
J .2770 K .2810 L .2900 -
M .2950 N .3020 O .3160 -
P .3230 Q .3320 R .3390 -
S .3480 T .3580 U .3680 -
V .3770 W .3860 X .3970 -
Y .4040 Z .4130 -
- -

D.3 Fractional Inch Size Drills

- - - -

Drill Diameter Drill Diameter Drill Diameter -
Size (inches) Size (inches) Size (inches) - -


1/64 .0156 1/32 .0313 3/64 .0469 -
1/16 .0625 5/64 .0781 3/32 .0938 -
7/64 .1094 1/8 .1250 9/64 .1406 -
5/32 .1562 11/64 .1719 3/16 .1875 -
13/64 .2031 7/32 .2188 15/64 .2344 -
1/4 .2500 17/64 .2656 9/32 .2812 -
19/64 .2969 5/16 .3125 21/64 .3281 -
11/32 .3438 23/64 .3594 3/8 .3750 -
25/64 .3906 13/32 .4062 27/64 .4219 -
7/16 .4375 29/64 .4531 15/32 .4688 -
31/64 .4844 1/2 .5000 33/64 .5156 -
17/32 .5313 35/64 .5469 9/16 .5625 -
37/64 .5781 19/32 .5938 39/64 .6094 -
5/8 .6250 41/64 .6406 21/32 .6562 -
43/64 .6719 11/16 .6875 45/64 .7031 -
23/32 .7188 47/64 .7344 3/4 .7500 -
49/64 .7656 25/32 .7812 51/64 .7969 -
13/16 .8125 53/64 .8281 27/32 .8438 -
55/64 .8594 7/8 .8750 57/64 .8906 -
29/32 .9062 59/64 .9219 15/16 .9375 -
61/64 .9531 31/32 .9688 63/64 .9844 -
1 1.0000 -
- -

D.4 Metric Drills

- - - -

Drill Diameter Drill Diameter Drill Diameter -
Size (inches) Size (inches) Size (inches) - -


0.20 mm .00787 0.25 mm .00984 0.30 mm .0118 -
0.35 mm .0138 0.40 mm .0158 0.45 mm .0177 -
0.50 mm .0197 0.55 mm .0217 0.60 mm .0236 -
0.65 mm .0256 0.70 mm .0276 0.75 mm .0295 -
0.80 mm .0315 0.85 mm .0335 0.90 mm .0354 -
0.95 mm .0374 1.00 mm .0394 1.05 mm .0413 -
1.10 mm .0433 1.15 mm .0453 1.20 mm .0472 -
1.25 mm .0492 1.30 mm .0512 1.35 mm .0531 -
1.40 mm .0551 1.45 mm .0571 1.50 mm .0591 -
1.55 mm .0610 1.60 mm .0630 1.65 mm .0650 -
1.70 mm .0669 1.75 mm .0689 1.80 mm .0709 -
1.85 mm .0728 1.90 mm .0748 1.95 mm .0768 -
2.00 mm .0787 2.05 mm .0807 2.10 mm .0827 -
2.15 mm .0846 2.20 mm .0866 2.25 mm .0886 -
2.30 mm .0906 2.35 mm .0925 2.40 mm .0945 -
2.45 mm .0965 2.50 mm .0984 2.55 mm .1004 -
2.60 mm .1024 2.65 mm .1043 2.70 mm .1063 -
2.75 mm .1083 2.80 mm .1102 2.85 mm .1122 -
2.90 mm .1142 2.95 mm .1161 3.00 mm .1181 -
3.10 mm .1220 3.15 mm .1240 3.20 mm .1260 -
3.25 mm .1280 3.30 mm .1299 3.40 mm .1339 -
3.50 mm .1378 3.60 mm .1417 3.70 mm .1457 -
3.75 mm .1476 3.80 mm .1496 3.90 mm .1535 -
4.00 mm .1575 4.10 mm .1614 4.20 mm .1654 -
4.25 mm .1673 4.30 mm .1693 4.40 mm .1732 -
4.50 mm .1772 4.60 mm .1811 4.70 mm .1850 -
4.75 mm .1870 4.80 mm .1890 4.90 mm .1929 -
5.00 mm .1969 5.10 mm .2008 5.20 mm .2047 -
5.25 mm .2067 5.30 mm .2087 5.40 mm .2126 -
5.50 mm .2165 5.60 mm .2205 5.70 mm .2244 -
5.75 mm .2264 5.80 mm .2283 5.90 mm .2323 -
6.00 mm .2362 6.10 mm .2402 6.20 mm .2441 -
6.25 mm .2461 6.30 mm .2480 6.40 mm .2520 -
6.50 mm .2559 6.60 mm .2598 6.70 mm .2638 -
6.75 mm .2657 6.80 mm .2677 6.90 mm .2717 -
7.00 mm .2756 7.10 mm .2795 7.20 mm .2835 -
7.25 mm .2854 7.30 mm .2874 7.40 mm .2914 -
7.50 mm .2953 7.60 mm .2992 7.70 mm .3031 -
8.00 mm .3150 8.10 mm .3189 8.20 mm .3228 -
8.25 mm .3248 8.30 mm .3268 8.40 mm .3307 -
8.50 mm .3346 8.60 mm .3386 8.70 mm .3425 -
8.75 mm .3445 8.80 mm .3465 8.90 mm .3504 -
9.00 mm .3543 9.10 mm .3583 9.20 mm .3622 -
9.25 mm .3642 9.30 mm .3661 9.40 mm .3701 -
9.50 mm .3740 9.60 mm .3780 9.70 mm .3819 -
9.75 mm .3839 9.80 mm .3858 9.90 mm .3898 -
10.00 mm .3937 10.10 mm .3976 10.20 mm .4016 -
10.25 mm .4035 10.30 mm .4055 10.40 mm .4094 -
10.50 mm .4134 10.60 mm .4173 10.70 mm .4213 -
10.80 mm .4252 10.90 mm .4291 11.00 mm .4331 -
11.10 mm .4370 11.20 mm .4409 11.25 mm .4429 -
11.30 mm .4449 11.40 mm .4488 11.50 mm .4528 -
11.60 mm .4567 11.70 mm .4606 11.75 mm .4626 -
11.80 mm .4646 11.90 mm .4685 12.00 mm .4724 -
12.50 mm .4921 13.00 mm .5118 13.50 mm .5315 -
14.00 mm .5512 14.50 mm .5709 15.00 mm .5906 -
15.50 mm .6102 16.00 mm .6299 16.50 mm .6496 -
17.00 mm .6693 17.50 mm .6890 18.00 mm .7087 -
18.50 mm .7283 19.00 mm .7480 19.50 mm .7677 -
20.00 mm .7874 20.50 mm .8071 21.00 mm .8268 -
21.50 mm .8465 22.00 mm .8661 22.50 mm .8858 -
23.00 mm .9055 23.50 mm .9252 24.00 mm .9449 -
24.50 mm .9646 25.00 mm .9843 -
- - -

- -


-Next: , -Previous: Standard Drill Sizes, -Up: Top - -
- -

Appendix E Centroid (X-Y) File Format

- -

- -

E.1 Overview

- -

E.2 File Format

- -

The centroid output file is in a standard comma seperated values (CSV) -format. Comment lines begin with a “#”. The output file contains a -header with an RCS Id tag (useful for those who will check the file -into a version control system), a version number for the file format, -some comments containing the author and title of the board, and a -comment describing the remainder of the file format. - -

An example centroid file is shown below. - -

     
-     # $Id$
-     # PcbXY Version 1.0
-     # Date: Fri Jul 22 03:40:08 2005 UTC
-     # Author: PCB User
-     # Title: MyBoard - PCB X-Y
-     # RefDes, Description, Value, X, Y, rotation, top/bottom
-     # X,Y in mils.  rotation in degrees.
-     # --------------------------------------------
-     R61,"0603","10",2610.00,3560.00,90,top
-     J5,"AMPHENOL_ARFX1231","unknown",2390.00,4220.00,180,top
-     C13,"0402","0.01u",2340.00,3014.00,270,top
-     
-
-

E.3 Computation of Centroid and Rotation

- -

The center of each element is found by averaging the (X,Y) coordinates -for the center of each pin and pad in the element. For example if an -element has 2 pins, 1 at (1,0) and another at (1,4) then the centroid -will be at (1,2). - -

The calculation of rotation is a bit more complex. Currently a -rotation is not stored for each element but rather the rotated element -is stored. In other words if the element from the library has a pin -at (0,0) and (0,2) and it has been rotated by 90 degrees, then the -.pcb file will store (0,0) and (2,0) for the pin locations with -no indication that they have been rotated from the original. - -

In the event that the element has only 1 pin, then the rotation is set -to zero. If the element has only one pad (as opposed to a -through-hole pin), then the rotation of the pad is used. - -

When the element has multiple pins, the location of pin #1 is placed -in the coordinate system which has the centroid of the part at (0,0). -Then which quadrant pin #1 falls in determines the rotation. Zero -degrees of rotation is defined as pin #1 being in the upper left -quadrant. Increasing angles correspond to counterclockwise rotation so a -rotation of 90 degrees places pin #1 in the lower left quadrant. -Currently, the only allowed rotations are 0, 90, 180, and 270 degrees. - -

If pin #1 happens to be at the centroid of the part, then pin #2 is -examined to see which quadrant it is located in. The same rules apply -for the definitions of rotation. In other words, when pin #1 is at -the centroid of the part and pin #2 is in the upper left quadrant, the -rotation is declared to be zero degrees. - - -

- -


-Next: , -Previous: Centroid File Format, -Up: Top - -
- -

Appendix F Action Reference

- -

- - - -

Many actions take a delta parameter as the last parameter, -which is an amount to change something. That delta may include -units, as an additional parameter, such as Action(Object,5,mm). -If no units are specified, the default is PCB's native units -(currently 1/100 mil). Also, if the delta is prefixed by + or --, the size is increased or decreased by that amount. -Otherwise, the size size is set to the given amount. - -

     Action(Object,5,mil)
-     Action(Object,+0.5,mm)
-     Action(Object,-1)
-
-

Actions which take a delta parameter which do not accept all -these options will specify what they do take. - - - - -

Many actions act on indicated objects on the board. They will have -parameters like ToggleObject or SelectedVias to indicate -what group of objects they act on. Unless otherwise specified, these -parameters are defined as follows: - -

-
Object
ToggleObject
Affects the object under the mouse pointer. If this action is invoked -from a menu or script, the user will be prompted to click on an -object, which is then the object affected. - -
Selected
SelectedObjects
-Affects all objects which are currently selected. At least, all -selected objects for which the given action makes sense. - -
SelectedPins
SelectedVias
SelectedType
etc
Affects all objects which are both selected and of the Type specified. - -
- - - -
- -


-Next: , -Up: Action Reference - -
- -

F.1 Core actions

- - -
- -


-Next: , -Up: core actions - -
- -

F.1.1 AddRats

- - -

-
AddRats(AllRats|SelectedRats|Close)
-
- -

Add one or more rat lines to the board. - - -

-
AllRats
Create rat lines for all loaded nets that aren't already connected on -with copper. - -
SelectedRats
Similarly, but only add rat lines for nets connected to selected pins -and pads. - -
Close
Selects the shortest unselected rat on the board. - -
- -
- -


-Next: , -Previous: AddRats Action, -Up: core actions - -
- -

F.1.2 ApplyVendor

- - -

-
ApplyVendor()
-
- -

Applies the currently loaded vendor drill table to the current design. - - -This will modify all of your drill holes to match the list of allowed -sizes for your vendor. - -

- -


-Next: , -Previous: ApplyVendor Action, -Up: core actions - -
- -

F.1.3 Atomic

- - -

-
Atomic(Save|Restore|Close|Block)
-
- -

Save or restore the undo serial number. - - -

This action allows making multiple-action bindings into an atomic -operation that will be undone by a single Undo command. For example, -to optimize rat lines, you'd delete the rats and re-add them. To -group these into a single undo, you'd want the deletions and the -additions to have the same undo serial number. So, you Save, -delete the rats, Restore, add the rats - using the same serial -number as the deletes, then Block, which checks to see if the -deletions or additions actually did anything. If not, the serial -number is set to the saved number, as there's nothing to undo. If -something did happen, the serial number is incremented so that these -actions are counted as a single undo step. - -

-
Save
Saves the undo serial number. - -
Restore
Returns it to the last saved number. - -
Close
Sets it to 1 greater than the last save. - -
Block
Does a Restore if there was nothing to undo, else does a Close. - -
- -
- -


-Next: , -Previous: Atomic Action, -Up: core actions - -
- -

F.1.4 Attributes

- - -

-
Attributes(Layout|Layer|Element)
-Attributes(Layer,layername)
-
- -

Let the user edit the attributes of the layout, current or given -layer, or selected element. - - -

This just pops up a dialog letting the user edit the attributes of the -pcb, an element, or a layer. - -

- -


-Next: , -Previous: Attributes Action, -Up: core actions - -
- -

F.1.5 AutoPlaceSelected

- - -

-
AutoPlaceSelected()
-
- -

Auto-place selected components. - - -

Attempts to re-arrange the selected components such that the nets -connecting them are minimized. Note that you cannot undo this. - -

- -


-Next: , -Previous: AutoPlaceSelected Action, -Up: core actions - -
- -

F.1.6 AutoRoute

- - -

-
AutoRoute(AllRats|SelectedRats)
-
- -

Auto-route some or all rat lines. - - -

-
AllRats
Attempt to autoroute all rats. - -
SelectedRats
Attempt to autoroute the selected rats. - -
- -

Before autorouting, it's important to set up a few things. First, -make sure any layers you aren't using are disabled, else the -autorouter may use them. Next, make sure the current line and via -styles are set accordingly. Last, make sure "new lines clear -polygons" is set, in case you eventually want to add a copper pour. - -

Autorouting takes a while. During this time, the program may not be -responsive. - -

- -


-Next: , -Previous: AutoRoute Action, -Up: core actions - -
- -

F.1.7 ChangeClearSize

- - -

-
ChangeClearSize(Object, delta)
-ChangeClearSize(SelectedPins|SelectedPads|SelectedVias, delta)
-ChangeClearSize(SelectedLines|SelectedArcs, delta
-ChangeClearSize(Selected|SelectedObjects, delta)
-
- -

Changes the clearance size of objects. - - -

If the solder mask is currently showing, this action changes the -solder mask clearance. If the mask is not showing, this action -changes the polygon clearance. - -

- -


-Next: , -Previous: ChangeClearSize Action, -Up: core actions - -
- -

F.1.8 ChangeDrillSize

- - -

-
ChangeDrillSize(Object, delta)
-ChangeDrillSize(SelectedPins|SelectedVias|Selected|SelectedObjects, delta)
-
- -

Changes the drilling hole size of objects. - - -

- -


-Next: , -Previous: ChangeDrillSize Action, -Up: core actions - -
- -

F.1.9 ChangeFlag

- - -

-
ChangeFlag(Object|Selected|SelectedObjects, flag, value)
-ChangeFlag(SelectedLines|SelectedPins|SelectedVias, flag, value)
-ChangeFlag(SelectedPads|SelectedTexts|SelectedNames, flag, value)
-ChangeFlag(SelectedElements, flag, value)
-flag = square | octagon | thermal | join
-value = 0 | 1
-
- -

Sets or clears flags on objects. - - -

Toggles the given flag on the indicated object(s). The flag may be -one of the flags listed above (square, octagon, thermal, join). The -value may be the number 0 or 1. If the value is 0, the flag is -cleared. If the value is 1, the flag is set. - -

- -


-Next: , -Previous: ChangeFlag Action, -Up: core actions - -
- -

F.1.10 ChangeHole

- - -

-
ChangeHole(ToggleObject|Object|SelectedVias|Selected)
-
- -

Changes the hole flag of objects. - - -

The "hole flag" of a via determines whether the via is a -plated-through hole (not set), or an unplated hole (set). - -

- -


-Next: , -Previous: ChangeHole Action, -Up: core actions - -
- -

F.1.11 ChangeJoin

- - -

-
ChangeJoin(ToggleObject|SelectedLines|SelectedArcs|Selected)
-
- -

Changes the join (clearance through polygons) of objects. - - -

The join flag determines whether a line or arc, drawn to intersect a -polygon, electrically connects to the polygon or not. When joined, -the line/arc is simply drawn over the polygon, making an electrical -connection. When not joined, a gap is drawn between the line and the -polygon, insulating them from each other. - -

- -


-Next: , -Previous: ChangeJoin Action, -Up: core actions - -
- -

F.1.12 ChangeName

- - -

-
ChangeName(Object)
-ChangeName(Layout|Layer)
-
- -

Sets the name of objects. - - -

-
Object
Changes the name of the element under the cursor. - -
Layout
Changes the name of the layout. This is printed on the fab drawings. - -
Layer
Changes the name of the currently active layer. - -
- -
- -


-Next: , -Previous: ChangeName Action, -Up: core actions - -
- -

F.1.13 ChangeOctagon

- - -

-
ChangeOctagon(Object|ToggleObject|SelectedObjects|Selected)
-ChangeOctagon(SelectedElements|SelectedPins|SelectedVias)
-
- -

Changes the octagon-flag of pins and vias. - - -

Pins, pads, and vias can have various shapes. All may be round. Pins -and pads may be square (obviously "square" pads are usually -rectangular). Pins and vias may be octagonal. When you change a -shape flag of an element, you actually change all of its pins and -pads. - -

Note that the square flag takes precedence over the octagon flag, -thus, if both the square and octagon flags are set, the object is -square. When the square flag is cleared, the pins and pads will be -either round or, if the octagon flag is set, octagonal. - -

- -


-Next: , -Previous: ChangeOctagon Action, -Up: core actions - -
- -

F.1.14 ChangePaste

- - -

-
ChangePaste(ToggleObject|Object|SelectedPads|Selected)
-
- -

Changes the no paste flag of objects. - - -

The "no paste flag" of a pad determines whether the solderpaste - stencil will have an opening for the pad (no set) or if there wil be - no solderpaste on the pad (set). This is used for things such as - fiducial pads. - -

- -


-Next: , -Previous: ChangePaste Action, -Up: core actions - -
- -

F.1.15 ChangePinName

- - -

-
ChangePinName(ElementName,PinNumber,PinName)
-
- -

Sets the name of a specific pin on a specific element. - - -

This can be especially useful for annotating pin names from a -schematic to the layout without requiring knowledge of the pcb file -format. - -

     ChangePinName(U3, 7, VCC)
-
-
- -


-Next: , -Previous: ChangePinName Action, -Up: core actions - -
- -

F.1.16 ChangeSize

- - -

-
ChangeSize(Object, delta)
-ChangeSize(SelectedObjects|Selected, delta)
-ChangeSize(SelectedLines|SelectedPins|SelectedVias, delta)
-ChangeSize(SelectedPads|SelectedTexts|SelectedNames, delta)
-ChangeSize(SelectedElements, delta)
-
- -

Changes the size of objects. - - -

For lines and arcs, this changes the width. For pins and vias, this -changes the overall diameter of the copper annulus. For pads, this -changes the width and, indirectly, the length. For texts and names, -this changes the scaling factor. For elements, this changes the width -of the silk layer lines and arcs for this element. - -

- -


-Next: , -Previous: ChangeSize Action, -Up: core actions - -
- -

F.1.17 ChangeSquare

- - -

-
ChangeSquare(ToggleObject)
-ChangeSquare(SelectedElements|SelectedPins)
-ChangeSquare(Selected|SelectedObjects)
-
- -

Changes the square flag of pins and pads. - - -

Note that Pins means both pins and pads. - -

Pins, pads, and vias can have various shapes. All may be round. Pins -and pads may be square (obviously "square" pads are usually -rectangular). Pins and vias may be octagonal. When you change a -shape flag of an element, you actually change all of its pins and -pads. - -

Note that the square flag takes precedence over the octagon flag, -thus, if both the square and octagon flags are set, the object is -square. When the square flag is cleared, the pins and pads will be -either round or, if the octagon flag is set, octagonal. - -

- -


-Next: , -Previous: ChangeSquare Action, -Up: core actions - -
- -

F.1.18 ClearOctagon

- - -

-
ClearOctagon(ToggleObject|Object|SelectedObjects|Selected)
-ClearOctagon(SelectedElements|SelectedPins|SelectedVias)
-
- -

Clears the octagon-flag of pins and vias. - - -

Pins, pads, and vias can have various shapes. All may be round. Pins -and pads may be square (obviously "square" pads are usually -rectangular). Pins and vias may be octagonal. When you change a -shape flag of an element, you actually change all of its pins and -pads. - -

Note that the square flag takes precedence over the octagon flag, -thus, if both the square and octagon flags are set, the object is -square. When the square flag is cleared, the pins and pads will be -either round or, if the octagon flag is set, octagonal. - -

- -


-Next: , -Previous: ClearOctagon Action, -Up: core actions - -
- -

F.1.19 ClearSquare

- - -

-
ClearSquare(ToggleObject|SelectedElements|SelectedPins)
-
- -

Clears the square-flag of pins and pads. - - -

Note that Pins means pins and pads. - -

Pins, pads, and vias can have various shapes. All may be round. Pins -and pads may be square (obviously "square" pads are usually -rectangular). Pins and vias may be octagonal. When you change a -shape flag of an element, you actually change all of its pins and -pads. - -

Note that the square flag takes precedence over the octagon flag, -thus, if both the square and octagon flags are set, the object is -square. When the square flag is cleared, the pins and pads will be -either round or, if the octagon flag is set, octagonal. - -

- -


-Next: , -Previous: ClearSquare Action, -Up: core actions - -
- -

F.1.20 ClrFlag

- - -

-
ClrFlag(Object|Selected|SelectedObjects, flag)
-ClrFlag(SelectedLines|SelectedPins|SelectedVias, flag)
-ClrFlag(SelectedPads|SelectedTexts|SelectedNames, flag)
-ClrFlag(SelectedElements, flag)
-flag = square | octagon | thermal | join
-
- -

Clears flags on objects. - - -

Turns the given flag off, regardless of its previous setting. See -ChangeFlag. - -

     ClrFlag(SelectedLines,join)
-
-
- -


-Next: , -Previous: ClrFlag Action, -Up: core actions - -
- -

F.1.21 Connection

- - -

-
Connection(Find|ResetLinesAndPolygons|ResetPinsAndVias|Reset)
-
- -

Searches connections of the object at the cursor position. - - -

Connections found with this action will be highlighted in the -“connected-color” color and will have the “found” flag set. - -

-
Find
The net under the cursor is “found”. - -
ResetLinesAndPolygons
Any “found” lines and polygons are marked “not found”. - -
ResetPinsAndVias
Any “found” pins and vias are marked “not found”. - -
Reset
All “found” objects are marked “not found”. - -
- -
- -


-Next: , -Previous: Connection Action, -Up: core actions - -
- -

F.1.22 Delete

- - -

-
Delete(Object|Selected)
-Delete(AllRats|SelectedRats)
-
- -

Delete stuff. - - -

- -


-Next: , -Previous: Delete Action, -Up: core actions - -
- -

F.1.23 DeleteRats

- - -

-
DeleteRats(AllRats|Selected|SelectedRats)
-
- -

Delete rat lines. - - -

- -


-Next: , -Previous: DeleteRats Action, -Up: core actions - -
- -

F.1.24 DisableVendor

- - -

-
DisableVendor()
-
- -

Disables automatic drill size mapping. - - -

-When drill mapping is enabled, new instances of pins and vias will -have their drill holes mapped to one of the allowed drill sizes -specified in the currently loaded vendor drill table. - -

- -


-Next: , -Previous: DisableVendor Action, -Up: core actions - -
- -

F.1.25 DisperseElements

- - -

-
DisperseElements(All|Selected)
-
- -

Disperses elements. - - -

Normally this is used when starting a board, by selecting all elements -and then dispersing them. This scatters the elements around the board -so that you can pick individual ones, rather than have all the -elements at the same 0,0 coordinate and thus impossible to choose -from. - -

- -


-Next: , -Previous: DisperseElements Action, -Up: core actions - -
- -

F.1.26 Display

- - -

-
Display(NameOnPCB|Description|Value)
-Display(Grid|Redraw)
-Display(CycleClip|CycleCrosshair|Toggle45Degree|ToggleStartDirection)
-Display(ToggleGrid|ToggleRubberBandMode|ToggleUniqueNames)
-Display(ToggleMask|ToggleName|ToggleClearLine|ToggleFullPoly|ToggleSnapPin)
-Display(ToggleThindraw|ToggleThindrawPoly|ToggleOrthoMove|ToggleLocalRef)
-Display(ToggleCheckPlanes|ToggleShowDRC|ToggleAutoDRC)
-Display(ToggleLiveRoute|LockNames|OnlyNames)
-Display(Pinout|PinOrPadName)
-
- -

Several display-related actions. - - -

-
NameOnPCB
Description
Value
Specify whether all elements show their name, description, or value. - -
Redraw
Redraw the whole board. - -
Toggle45Degree
When clear, lines can be drawn at any angle. When set, lines are -restricted to multiples of 45 degrees and requested lines may be -broken up according to the clip setting. - -
CycleClip
Changes the way lines are restricted to 45 degree increments. The -various settings are: straight only, orthogonal then angled, and angled -then orthogonal. If AllDirections is set, this action disables it. - -
CycleCrosshair
Changes crosshair drawing. Crosshair may accept form of 4-ray, -8-ray and 12-ray cross. - -
ToggleRubberBandMode
If set, moving an object moves all the lines attached to it too. - -
ToggleStartDirection
If set, each time you set a point in a line, the Clip toggles between -orth-angle and angle-ortho. - -
ToggleUniqueNames
If set, you will not be permitted to change the name of an element to -match that of another element. - -
ToggleSnapPin
If set, pin centers and pad end points are treated as additional grid -points that the cursor can snap to. - -
ToggleLocalRef
If set, the mark is automatically set to the beginning of any move, so -you can see the relative distance you've moved. - -
ToggleThindraw
If set, objects on the screen are drawn as outlines (lines are drawn -as center-lines). This lets you see line endpoints hidden under pins, -for example. - -
ToggleThindrawPoly
If set, polygons on the screen are drawn as outlines. - -
ToggleShowDRC
If set, pending objects (i.e. lines you're in the process of drawing) -will be drawn with an outline showing how far away from other copper -you need to be. - -
ToggleLiveRoute
If set, the progress of the autorouter will be visible on the screen. - -
ToggleAutoDRC
If set, you will not be permitted to make connections which violate -the current DRC and netlist settings. - -
ToggleCheckPlanes
If set, lines and arcs aren't drawn, which usually leaves just the -polygons. If you also disable all but the layer you're interested in, -this allows you to check for isolated regions. - -
ToggleOrthoMove
If set, the crosshair is only allowed to move orthogonally from its -previous position. I.e. you can move an element or line up, down, -left, or right, but not up+left or down+right. - -
ToggleName
Selects whether the pinouts show the pin names or the pin numbers. - -
ToggleLockNames
If set, text will ignore left mouse clicks and actions that work on -objects under the mouse. You can still select text with a lasso (left -mouse drag) and perform actions on the selection. - -
ToggleOnlyNames
If set, only text will be sensitive for mouse clicks and actions that -work on objects under the mouse. You can still select other objects -with a lasso (left mouse drag) and perform actions on the selection. - -
ToggleMask
Turns the solder mask on or off. - -
ToggleClearLine
When set, the clear-line flag causes new lines and arcs to have their -“clear polygons” flag set, so they won't be electrically connected -to any polygons they overlap. - -
ToggleFullPoly
When set, the full-poly flag causes new polygons to have their -“full polygon” flag set, so all parts of them will be displayed -instead of only the biggest one. - -
ToggleGrid
Resets the origin of the current grid to be wherever the mouse pointer -is (not where the crosshair currently is). If you provide two numbers -after this, the origin is set to that coordinate. - -
Grid
Toggles whether the grid is displayed or not. - -
Pinout
Causes the pinout of the element indicated by the cursor to be -displayed, usually in a separate window. - -
PinOrPadName
Toggles whether the names of pins, pads, or (yes) vias will be -displayed. If the cursor is over an element, all of its pins and pads -are affected. - -
- -
- -


-Next: , -Previous: Display Action, -Up: core actions - -
- -

F.1.27 djopt

- - -

-
djopt(debumpify|unjaggy|simple|vianudge|viatrim|orthopull)
-djopt(auto) - all of the above
-djopt(miter)
-
- -

Perform various optimizations on the current board. - - -

The different types of optimizations change your board in order to -reduce the total trace length and via count. - -

-
debumpify
Looks for U-shaped traces that can be shortened or eliminated. - -
unjaggy
Looks for corners which could be flipped to eliminate one or more -corners (i.e. jaggy lines become simpler). - -
simple
Removing uneeded vias, replacing two or more trace segments in a row -with a single segment. This is usually performed automatically after -other optimizations. - -
vianudge
Looks for vias where all traces leave in the same direction. Tries to -move via in that direction to eliminate one of the traces (and thus a -corner). - -
viatrim
Looks for traces that go from via to via, where moving that trace to a -different layer eliminates one or both vias. - -
orthopull
Looks for chains of traces all going in one direction, with more -traces orthogonal on one side than on the other. Moves the chain in -that direction, causing a net reduction in trace length, possibly -eliminating traces and/or corners. - -
splitlines
Looks for lines that pass through vias, pins, or pads, and splits them -into separate lines so they can be managed separately. - -
auto
Performs the above options, repeating until no further optimizations -can be made. - -
miter
Replaces 90 degree corners with a pair of 45 degree corners, to reduce -RF losses and trace length. - -
- -
- -


-Next: , -Previous: djopt Action, -Up: core actions - -
- -

F.1.28 DRC

- - -

-
DRC()
-
- -

Invoke the DRC check. - - -

Note that the design rule check uses the current board rule settings, -not the current style settings. - -

- -


-Next: , -Previous: DRC Action, -Up: core actions - -
- -

F.1.29 DumpLibrary

- - -

-
DumpLibrary()
-
- -

Display the entire contents of the libraries. - - -

- -


-Next: , -Previous: DumpLibrary Action, -Up: core actions - -
- -

F.1.30 elementlist

- - -

-
ElementList(Start|Done|Need,<refdes>,<footprint>,<value>)
-
- -

Adds the given element if it doesn't already exist. - - -

-
Start
Indicates the start of an element list; call this before any Need -actions. - -
Need
Searches the board for an element with a matching refdes. - -

If found, the value and footprint are updated. - -

If not found, a new element is created with the given footprint and value. - -

Done
Compares the list of elements needed since the most recent -start with the list of elements actually on the board. Any -elements that weren't listed are selected, so that the user may delete -them. - -
- -
- -


-Next: , -Previous: elementlist Action, -Up: core actions - -
- -

F.1.31 elementsetattr

- - -

-
ElementSetAttr(refdes,name[,value])
-
- -

Sets or clears an element-specific attribute. - - -

If a value is specified, the named attribute is added (if not already -present) or changed (if it is) to the given value. If the value is -not specified, the given attribute is removed if present. - -

- -


-Next: , -Previous: elementsetattr Action, -Up: core actions - -
- -

F.1.32 EnableVendor

- - -

-
EnableVendor()
-
- -

Enables automatic drill size mapping. - - -

-When drill mapping is enabled, new instances of pins and vias will -have their drill holes mapped to one of the allowed drill sizes -specified in the currently loaded vendor drill table. To enable drill -mapping, a vendor resource file containing a drill table must be -loaded first. - -

- -


-Next: , -Previous: EnableVendor Action, -Up: core actions - -
- -

F.1.33 execcommand

- - -

-
ExecCommand(command)
-
- -

Runs a command. - - -

Runs the given command, which is a system executable. - -

- -


-Next: , -Previous: execcommand Action, -Up: core actions - -
- -

F.1.34 ExecuteFile

- - -

-
ExecuteFile(filename)
-
- -

Run actions from the given file. - - -

Lines starting with # are ignored. - -

- -


-Next: , -Previous: ExecuteFile Action, -Up: core actions - -
- -

F.1.35 Flip

- - -

-
Flip(Object|Selected|SelectedElements)
-
- -

Flip an element to the opposite side of the board. - - -

Note that the location of the element will be symmetric about the -cursor location; i.e. if the part you are pointing at will still be at -the same spot once the element is on the other side. When flipping -multiple elements, this retains their positions relative to each -other, not their absolute positions on the board. - -

- -


-Next: , -Previous: Flip Action, -Up: core actions - -
- -

F.1.36 FontEdit

- - -

-
FontEdit()
-
- -

Convert the current font to a PCB for editing. - - -

- -


-Next: , -Previous: FontEdit Action, -Up: core actions - -
- -

F.1.37 FontSave

- - -

-
FontSave()
-
- -

Convert the current PCB back to a font. - - -

- -


-Next: , -Previous: FontSave Action, -Up: core actions - -
- -

F.1.38 FreeRotateBuffer

- - -

-
FreeRotateBuffer([Angle])
-
- -

Rotates the current paste buffer contents by the specified angle. The -angle is given in degrees. If no angle is given, the user is prompted -for one. - - -

Rotates the contents of the pastebuffer by an arbitrary angle. If no -angle is given, the user is prompted for one. - -

- -


-Next: , -Previous: FreeRotateBuffer Action, -Up: core actions - -
- -

F.1.39 GlobalPuller

- - -

-
GlobalPuller()
-
- -

Pull all traces tight. - - -

- -


-Next: , -Previous: GlobalPuller Action, -Up: core actions - -
- -

F.1.40 h

- - -

-
h
-
- -

Print a help message for commands. - - -

This is one of the command box helper actions. While it is a regular -action and can be used like any other action, its name and syntax are -optimized for use with the command box (:) and thus the syntax -is documented for that purpose. - -

- -


-Next: , -Previous: h Action, -Up: core actions - -
- -

F.1.41 Import

- - -

-
Import()
-Import([gnetlist|make[,source,source,...]])
-Import(setnewpoint[,(mark|center|X,Y)])
-Import(setdisperse,D,units)
-
-
- -

Import schematics. - - -

Imports element and netlist data from the schematics (or some other -source). The first parameter, which is optional, is the mode. If not -specified, the import::mode attribute in the PCB is used. -gnetlist means gnetlist is used to obtain the information from -the schematics. make invokes make, assuming the user -has a Makefile in the current directory. The Makefile -will be invoked with the following variables set: - -

-
PCB
The name of the .pcb file - -
SRCLIST
A space-separated list of source files - -
OUT
The name of the file in which to put the command script, which may -contain any Pcb actions. By default, this is a temporary file -selected by Pcb, but if you specify an import::outfile -attribute, that file name is used instead (and not automatically -deleted afterwards). - -
- -

The target specified to be built is the first of these that apply: - -

    -
  • The target specified by an import::target attribute. - -
  • The output file specified by an import::outfile attribute. - -
  • If nothing else is specified, the target is pcb_import. - -
- -

If you specify an import::makefile attribute, then "-f <that -file>" will be added to the command line. - -

If you specify the mode, you may also specify the source files -(schematics). If you do not specify any, the list of schematics is -obtained by reading the import::srcN attributes (like -import::src0, import::src1, etc). - -

For compatibility with future extensions to the import file format, -the generated file must not start with the two characters -#%. - -

If a temporary file is needed the TMPDIR environment variable -is used to select its location. - -

Note that the programs gnetlist and make may be -overridden by the user via the make-program and gnetlist -pcb settings (i.e. in ~/.pcb/settings or on the command -line). - -

If Pcb cannot determine which schematic(s) to import from, the GUI -is called to let user choose (see ImportGUI()). - -

Note that Import() doesn't delete anything - after an Import, elements -which shouldn't be on the board are selected and may be removed once -it's determined that the deletion is appropriate. - -

If Import() is called with setnewpoint, then the location -of new components can be specified. This is where parts show up when -they're added to the board. The default is the center of the board. - -

-
Import(setnewpoint)
-Prompts the user to click on the board somewhere, uses that point. If -called by a hotkey, uses the current location of the crosshair. - -
Import(setnewpoint,mark)
-Uses the location of the mark. If no mark is present, the point is -not changed. - -
Import(setnewpoint,center)
-Resets the point to the center of the board. - -
Import(setnewpoint,X,Y,units)
-Sets the point to the specific coordinates given. Example: -Import(setnewpoint,50,25,mm) - -
- -

Note that the X and Y locations are stored in attributes named -import::newX and import::newY so you could change them -manually if you wished. - -

Calling Import(setdisperse,D,units) sets how much the newly -placed elements are dispersed relative to the set point. For example, -Import(setdisperse,10,mm) will offset each part randomly up to -10mm away from the point. The default dispersion is 1/10th of the -smallest board dimension. Dispersion is saved in the -import::disperse attribute. - -

- -


-Next: , -Previous: Import Action, -Up: core actions - -
- -

F.1.42 l

- - -

-
l [name]
-
- -

Loads layout data. - - -

Loads a new datafile (layout) and, if confirmed, overwrites any -existing unsaved data. The filename and the searchpath -(filePath) are passed to the command defined by -fileCommand. If no filename is specified a file select box -will popup. - -

This is one of the command box helper actions. While it is a regular -action and can be used like any other action, its name and syntax are -optimized for use with the command box (:) and thus the syntax -is documented for that purpose. - -

- -


-Next: , -Previous: l Action, -Up: core actions - -
- -

F.1.43 le

- - -

-
le [name]
-
- -

Loads an element into the current buffer. - - -

The filename and the searchpath (elementPath) are passed to the -command defined by elementCommand. If no filename is specified -a file select box will popup. - -

This is one of the command box helper actions. While it is a regular -action and can be used like any other action, its name and syntax are -optimized for use with the command box (:) and thus the syntax -is documented for that purpose. - -

- -


-Next: , -Previous: le Action, -Up: core actions - -
- -

F.1.44 LoadFootprint

- - -

-
LoadFootprint(filename[,refdes,value])
-
- -

Loads a single footprint by name. - - -

Loads a single footprint by name, rather than by reference or through -the library. If a refdes and value are specified, those are inserted -into the footprint as well. The footprint remains in the paste buffer. - -

- -


-Next: , -Previous: LoadFootprint Action, -Up: core actions - -
- -

F.1.45 LoadFrom

- - -

-
LoadFrom(Layout|LayoutToBuffer|ElementToBuffer|Netlist|Revert,filename)
-
- -

Load layout data from a file. - - -

This action assumes you know what the filename is. The various GUIs -should have a similar Load action where the filename is -optional, and will provide their own file selection mechanism to let -you choose the file name. - -

-
Layout
Loads an entire PCB layout, replacing the current one. - -
LayoutToBuffer
Loads an entire PCB layout to the paste buffer. - -
ElementToBuffer
Loads the given element file into the paste buffer. Element files -contain only a single Element definition, such as the -“newlib” library uses. - -
Netlist
Loads a new netlist, replacing any current netlist. - -
Revert
Re-loads the current layout from its disk file, reverting any changes -you may have made. - -
- -
- -


-Next: , -Previous: LoadFrom Action, -Up: core actions - -
- -

F.1.46 LoadVendorFrom

- - -

-
LoadVendorFrom(filename)
-
- -

Loads the specified vendor resource file. - - -

-

-
filename
Name of the vendor resource file. If not specified, the user will -be prompted to enter one. -
- -
- -


-Next: , -Previous: LoadVendorFrom Action, -Up: core actions - -
- -

F.1.47 m

- - -

-
m [name]
-
- -

Loads a layout into the current buffer. - - -

The filename and the searchpath (filePath) are passed to the -command defined by fileCommand. -If no filename is specified a file select box will popup. - -

This is one of the command box helper actions. While it is a regular -action and can be used like any other action, its name and syntax are -optimized for use with the command box (:) and thus the syntax -is documented for that purpose. - -

- -


-Next: , -Previous: m Action, -Up: core actions - -
- -

F.1.48 MarkCrosshair

- - -

-
MarkCrosshair()
-MarkCrosshair(Center)
-
- -

Set/Reset the Crosshair mark. - - -

The “mark” is a small X-shaped target on the display which is -treated like a second origin (the normal origin is the upper let -corner of the board). The GUI will display a second set of -coordinates for this mark, which tells you how far you are from it. - -

If no argument is given, the mark is toggled - disabled if it was -enabled, or enabled at the current cursor position of disabled. If -the Center argument is given, the mark is moved to the current -cursor location. - -

- -


-Next: , -Previous: MarkCrosshair Action, -Up: core actions - -
- -

F.1.49 Message

- - -

-
Message(message)
-
- -

Writes a message to the log window. - - -

This action displays a message to the log window. This action is primarily -provided for use by other programs which may interface with PCB. If -multiple arguments are given, each one is sent to the log window -followed by a newline. - -

- -


-Next: , -Previous: Message Action, -Up: core actions - -
- -

F.1.50 MinClearGap

- - -

-
MinClearGap(delta)
-MinClearGap(Selected, delta)
-
- -

Ensures that polygons are a minimum distance from objects. - - -

Checks all specified objects, and increases the polygon clearance if -needed to ensure a minimum distance between their edges and the -polygon edges. - -

- -


-Next: , -Previous: MinClearGap Action, -Up: core actions - -
- -

F.1.51 MinMaskGap

- - -

-
MinMaskGap(delta)
-MinMaskGap(Selected, delta)
-
- -

Ensures the mask is a minimum distance from pins and pads. - - -

Checks all specified pins and/or pads, and increases the mask if -needed to ensure a minimum distance between the pin or pad edge and -the mask edge. - -

- -


-Next: , -Previous: MinMaskGap Action, -Up: core actions - -
- -

F.1.52 Mode

- - -

-
Mode(Arc|Arrow|Copy|InsertPoint|Line|Lock|Move|None|PasteBuffer)
-Mode(Polygon|Rectangle|Remove|Rotate|Text|Thermal|Via)
-Mode(Notify|Release|Cancel|Stroke)
-Mode(Save|Restore)
-
- -

Change or use the tool mode. - - -

-
Arc
Arrow
Copy
InsertPoint
Line
Lock
Move
None
PasteBuffer
Polygon
Rectangle
Remove
Rotate
Text
Thermal
Via
Select the indicated tool. - -
Notify
Called when you press the mouse button, or move the mouse. - -
Release
Called when you release the mouse button. - -
Cancel
Cancels any pending tool activity, allowing you to restart elsewhere. -For example, this allows you to start a new line rather than attach a -line to the previous line. - -
Escape
Similar to Cancel but calling this action a second time will return -to the Arrow tool. - -
Stroke
If your pcb was built with libstroke, this invokes the stroke -input method. If not, this will restart a drawing mode if you were -drawing, else it will select objects. - -
Save
Remembers the current tool. - -
Restore
Restores the tool to the last saved tool. - -
- -
- -


-Next: , -Previous: Mode Action, -Up: core actions - -
- -

F.1.53 MorphPolygon

- - -

-
MorphPolygon(Object|Selected)
-
- -

Converts dead polygon islands into separate polygons. - - -

If a polygon is divided into unconnected "islands", you can use -this command to convert the otherwise disappeared islands into -separate polygons. Be sure the cursor is over a portion of the -polygon that remains visible. Very small islands that may flake -off are automatically deleted. - -

- -


-Next: , -Previous: MorphPolygon Action, -Up: core actions - -
- -

F.1.54 MoveLayer

- - -

-
MoveLayer(old,new)
-
- -

Moves/Creates/Deletes Layers. - - -

Moves a layer, creates a new layer, or deletes a layer. - -

-
old
The is the layer number to act upon. Allowed values are: -
-
c
Currently selected layer. - -
-1
Create a new layer. - -
number
An existing layer number. - -
- -
new
Specifies where to move the layer to. Allowed values are: -
-
-1
Deletes the layer. - -
up
Moves the layer up. - -
down
Moves the layer down. - -
c
Creates a new layer. - -
- -
- -
- -


-Next: , -Previous: MoveLayer Action, -Up: core actions - -
- -

F.1.55 MoveObject

- - -

-
MoveObject(X,Y,dim)
-
- -

Moves the object under the crosshair. - - -

The X and Y are treated like delta is for many -other objects. For each, if it's prefixed by + or -, -then that amount is relative. Otherwise, it's absolute. Units can be -mil or mm; if unspecified, units are PCB's internal -units, currently 1/100 mil. - -

- -


-Next: , -Previous: MoveObject Action, -Up: core actions - -
- -

F.1.56 MoveToCurrentLayer

- - -

-
MoveToCurrentLayer(Object|SelectedObjects)
-
- -

Moves objects to the current layer. - - -

Note that moving an element from a component layer to a solder layer, -or from solder to component, won't automatically flip it. Use the -Flip() action to do that. - -

- -


-Next: , -Previous: MoveToCurrentLayer Action, -Up: core actions - -
- -

F.1.57 Netlist

- - -

-
Net(find|select|rats|norats|clear[,net[,pin]])
-Net(freeze|thaw|forcethaw)
-Net(add,net,pin)
-
- -

Perform various actions on netlists. - - -

Each of these actions apply to a specified set of nets. net and -pin are patterns which match one or more nets or pins; these -patterns may be full names or regular expressions. If an exact match -is found, it is the only match; if no exact match is found, -then the pattern is tried as a regular expression. - -

If neither net nor pin are specified, all nets apply. If -net is specified but not pin, all nets matching net -apply. If both are specified, nets which match net and contain -a pin matching pin apply. - -

-
find
Nets which apply are marked found and are drawn in the -connected-color color. - -
select
Nets which apply are selected. - -
rats
Nets which apply are marked as available for the rats nest. - -
norats
Nets which apply are marked as not available for the rats nest. - -
clear
Clears the netlist. - -
add
Add the given pin to the given netlist, creating either if needed. - -
sort
Called after a list of add's, this sorts the netlist. - -
freeze
thaw
forcethaw
Temporarily prevents changes to the netlist from being reflected in -the GUI. For example, if you need to make multiple changes, you -freeze the netlist, make the changes, then thaw it. Note that -freeze/thaw requests may nest, with the netlist being fully thawed -only when all pending freezes are thawed. You can bypass the nesting -by using forcethaw, which resets the freeze count and immediately -updates the GUI. - -
- -
- -


-Next: , -Previous: Netlist Action, -Up: core actions - -
- -

F.1.58 New

- - -

-
New([name])
-
- -

Starts a new layout. - - -

If a name is not given, one is prompted for. - -

- -


-Next: , -Previous: New Action, -Up: core actions - -
- -

F.1.59 OptAutoOnly

- - -

-
OptAutoOnly()
-
- -

Toggles the optimize-only-autorouted flag. - - -

The original purpose of the trace optimizer was to clean up the traces -created by the various autorouters that have been used with PCB. When -a board has a mix of autorouted and carefully hand-routed traces, you -don't normally want the optimizer to move your hand-routed traces. -But, sometimes you do. By default, the optimizer only optimizes -autorouted traces. This action toggles that setting, so that you can -optimize hand-routed traces also. - -

- -


-Next: , -Previous: OptAutoOnly Action, -Up: core actions - -
- -

F.1.60 PasteBuffer

- - -

-
PasteBuffer(AddSelected|Clear|1..MAX_BUFFER)
-PasteBuffer(Rotate, 1..3)
-PasteBuffer(Convert|Save|Restore|Mirror)
-PasteBuffer(ToLayout, X, Y, units)
-
- -

Various operations on the paste buffer. - - -

There are a number of paste buffers; the actual limit is a -compile-time constant MAX_BUFFER in globalconst.h. It -is currently 5. One of these is the “current” paste buffer, -often referred to as “the” paste buffer. - -

-
AddSelected
Copies the selected objects to the current paste buffer. - -
Clear
Remove all objects from the current paste buffer. - -
Convert
Convert the current paste buffer to an element. Vias are converted to -pins, lines are converted to pads. - -
Restore
Convert any elements in the paste buffer back to vias and lines. - -
Mirror
Flip all objects in the paste buffer vertically (up/down flip). To mirror -horizontally, combine this with rotations. - -
Rotate
Rotates the current buffer. The number to pass is 1..3, where 1 means -90 degrees counter clockwise, 2 means 180 degrees, and 3 means 90 -degrees clockwise (270 CCW). - -
Save
Saves any elements in the current buffer to the indicated file. - -
ToLayout
Pastes any elements in the current buffer to the indicated X, Y -coordinates in the layout. The X and Y are treated like -delta is for many other objects. For each, if it's prefixed by -+ or -, then that amount is relative to the last -location. Otherwise, it's absolute. Units can be -mil or mm; if unspecified, units are PCB's internal -units, currently 1/100 mil. - -
1..MAX_BUFFER
Selects the given buffer to be the current paste buffer. - -
- -
- -


-Next: , -Previous: PasteBuffer Action, -Up: core actions - -
- -

F.1.61 Polygon

- - -

-
Polygon(Close|PreviousPoint)
-
- -

Some polygon related stuff. - - -

Polygons need a special action routine to make life easier. - -

-
Close
Creates the final segment of the polygon. This may fail if clipping -to 45 degree lines is switched on, in which case a warning is issued. - -
PreviousPoint
Resets the newly entered corner to the previous one. The Undo action -will call Polygon(PreviousPoint) when appropriate to do so. - -
- -
- -


-Next: , -Previous: Polygon Action, -Up: core actions - -
- -

F.1.62 Puller

- - -

-
Puller()
-
- -

Pull an arc-line junction tight. - - -

The Puller() action is a special-purpose optimization. When -invoked while the crosshair is over the junction of an arc and a line, -it will adjust the arc's angle and the connecting line's endpoint such -that the line intersects the arc at a tangent. In the example below, -the left side is “before” with the black target marking where to put -the crosshair: - -

Example of how puller works
- -

The right side is “after” with the black target marking where the -arc-line intersection was moved to. - -

- -


-Next: , -Previous: Puller Action, -Up: core actions - -
- -

F.1.63 q

- - -

-
q
-
- -

Quits the application after confirming. - - -

If you have unsaved changes, you will be prompted to confirm (or -save) before quitting. - -

This is one of the command box helper actions. While it is a regular -action and can be used like any other action, its name and syntax are -optimized for use with the command box (:) and thus the syntax -is documented for that purpose. - -

- - -


-Next: , -Previous: q Action, -Up: core actions - -
- -

F.1.64 q!

- - -

-
q!
-
- -

Quits the application without confirming. - - -

Note that this command neither saves your data nor prompts for -confirmation. - -

This is one of the command box helper actions. While it is a regular -action and can be used like any other action, its name and syntax are -optimized for use with the command box (:) and thus the syntax -is documented for that purpose. - -

- -


-Next: , -Previous: q! Action, -Up: core actions - -
- -

F.1.65 Quit

- - -

-
Quit()
-
- -

Quits the application after confirming. - - -

If you have unsaved changes, you will be prompted to confirm (or -save) before quitting. - -

- -


-Next: , -Previous: Quit Action, -Up: core actions - -
- -

F.1.66 Redo

- - -

-
Redo()
-
- -

Redo recent“undo”operations. - - -

This routine allows you to recover from the last undo command. You -might want to do this if you thought that undo was going to revert -something other than what it actually did (in case you are confused -about which operations are un-doable), or if you have been backing up -through a long undo list and over-shoot your stopping point. Any -change that is made since the undo in question will trim the redo -list. For example if you add ten lines, then undo three of them you -could use redo to put them back, but if you move a line on the board -before performing the redo, you will lose the ability to "redo" the -three "undone" lines. - -

- -


-Next: , -Previous: Redo Action, -Up: core actions - -
- -

F.1.67 RemoveSelected

- - -

-
RemoveSelected()
-
- -

Removes any selected objects. - - -

- -


-Next: , -Previous: RemoveSelected Action, -Up: core actions - -
- -

F.1.68 Renumber

- - -

-
Renumber()
-Renumber(filename)
-
- -

Renumber all elements. The changes will be recorded to filename -for use in backannotating these changes to the schematic. - - -

- -


-Next: , -Previous: Renumber Action, -Up: core actions - -
- -

F.1.69 Report

- - -

-
Report(Object|DrillReport|FoundPins|NetLength|AllNetLengths|[,name])
-
- -

Produce various report. - - -

-
Object
The object under the crosshair will be reported, describing various -aspects of the object. - -
DrillReport
A report summarizing the number of drill sizes used, and how many of -each, will be produced. - -
FoundPins
A report listing all pins and pads which are marked as “found” will -be produced. - -
NetLength
The name and length of the net under the crosshair will be reported to -the message log. - -
AllNetLengths
The name and length of the net under the crosshair will be reported to -the message log. An optional parameter specifies mm, mil, pcb, or in -units - -
- -
- -


-Next: , -Previous: Report Action, -Up: core actions - -
- -

F.1.70 ReportDialog

- - -

-
ReportDialog()
-
- -

Report on the object under the crosshair - - -

This is a shortcut for Report(Object). - -

- -


-Next: , -Previous: ReportDialog Action, -Up: core actions - -
- -

F.1.71 RipUp

- - -

-
RipUp(All|Selected|Element)
-
- -

Ripup auto-routed tracks, or convert an element to parts. - - -

-
All
Removes all lines and vias which were created by the autorouter. - -
Selected
Removes all selected lines and vias which were created by the -autorouter. - -
Element
Converts the element under the cursor to parts (vias and lines). Note -that this uses the highest numbered paste buffer. - -
- -
- -


-Next: , -Previous: RipUp Action, -Up: core actions - -
- -

F.1.72 rn

- - -

-
rn [name]
-
- -

Reads netlist. - - -

If no filename is given a file select box will pop up. The file is -read via the command defined by the RatCommand resource. The -command must send its output to stdout. - -

Netlists are used for generating rat's nests (see Rats Nest) and -for verifying the board layout (which is also accomplished by the -Ratsnest command). - -

This is one of the command box helper actions. While it is a regular -action and can be used like any other action, its name and syntax are -optimized for use with the command box (:) and thus the syntax -is documented for that purpose. - -

- -


-Next: , -Previous: rn Action, -Up: core actions - -
- -

F.1.73 RouteStyle

- - -

-
RouteStyle(1|2|3|4)
-
- -

Copies the indicated routing style into the current sizes. - - -

- -


-Next: , -Previous: RouteStyle Action, -Up: core actions - -
- -

F.1.74 s

- - -

-
s [name]
-
- -

Saves layout data. - - -

Data and the filename are passed to the command defined by the -resource saveCommand. It must read the layout data from -stdin. If no filename is entered, either the last one is used -again or, if it is not available, a file select box will pop up. - -

This is one of the command box helper actions. While it is a regular -action and can be used like any other action, its name and syntax are -optimized for use with the command box (:) and thus the syntax -is documented for that purpose. - -

- -


-Next: , -Previous: s Action, -Up: core actions - -
- -

F.1.75 SaveSettings

- - -

-
SaveSettings()
-SaveSettings(local)
-
- -

Saves settings. - - -

If you pass no arguments, the settings are stored in -$HOME/.pcb/settings. If you pass the word local they're -saved in ./pcb.settings. - -

- -


-Next: , -Previous: SaveSettings Action, -Up: core actions - -
- -

F.1.76 SaveTo

- - -

-
SaveTo(Layout|LayoutAs,filename)
-SaveTo(AllConnections|AllUnusedPins|ElementConnections,filename)
-SaveTo(PasteBuffer,filename)
-
- -

Saves data to a file. - - -

-
Layout
Saves the current layout. - -
LayoutAs
Saves the current layout, and remembers the filename used. - -
AllConnections
Save all connections to a file. - -
AllUnusedPins
List all unused pins to a file. - -
ElementConnections
Save connections to the element at the cursor to a file. - -
PasteBuffer
Save the content of the active Buffer to a file. This is the graphical way to create a footprint. - -
- -
- -


-Next: , -Previous: SaveTo Action, -Up: core actions - -
- -

F.1.77 Select

- - -

-
Select(Object|ToggleObject)
-Select(All|Block|Connection)
-Select(ElementByName|ObjectByName|PadByName|PinByName)
-Select(ElementByName|ObjectByName|PadByName|PinByName, Name)
-Select(TextByName|ViaByName|NetByName)
-Select(TextByName|ViaByName|NetByName, Name)
-Select(Convert)
-
- -

Toggles or sets the selection. - - -

-
ElementByName
ObjectByName
PadByName
PinByName
TextByName
ViaByName
NetByName
-These all rely on having a regular expression parser built into -pcb. If the name is not specified then the user is prompted -for a pattern, and all objects that match the pattern and are of the -type specified are selected. - -
Object
ToggleObject
Selects the object under the cursor. - -
Block
Selects all objects in a rectangle indicated by the cursor. - -
All
Selects all objects on the board. - -
Connection
Selects all connections with the “found” flag set. - -
Convert
Converts the selected objects to an element. This uses the highest -numbered paste buffer. - -
- -
- -


-Next: , -Previous: Select Action, -Up: core actions - -
- -

F.1.78 SetFlag

- - -

-
SetFlag(Object|Selected|SelectedObjects, flag)
-SetFlag(SelectedLines|SelectedPins|SelectedVias, flag)
-SetFlag(SelectedPads|SelectedTexts|SelectedNames, flag)
-SetFlag(SelectedElements, flag)
-flag = square | octagon | thermal | join
-
- -

Sets flags on objects. - - -

Turns the given flag on, regardless of its previous setting. See -ChangeFlag. - -

     SetFlag(SelectedPins,thermal)
-
-
- -


-Next: , -Previous: SetFlag Action, -Up: core actions - -
- -

F.1.79 SetOctagon

- - -

-
SetOctagon(Object|ToggleObject|SelectedElements|Selected)
-
- -

Sets the octagon-flag of objects. - - -

Pins, pads, and vias can have various shapes. All may be round. Pins -and pads may be square (obviously "square" pads are usually -rectangular). Pins and vias may be octagonal. When you change a -shape flag of an element, you actually change all of its pins and -pads. - -

Note that the square flag takes precedence over the octagon flag, -thus, if both the square and octagon flags are set, the object is -square. When the square flag is cleared, the pins and pads will be -either round or, if the octagon flag is set, octagonal. - -

- -


-Next: , -Previous: SetOctagon Action, -Up: core actions - -
- -

F.1.80 SetSame

- - -

-
SetSame()
-
- -

Sets current layer and sizes to match indicated item. - - -

When invoked over any line, arc, polygon, or via, this changes the -current layer to be the layer that item is on, and changes the current -sizes (thickness, keepaway, drill, etc) according to that item. - -

- -


-Next: , -Previous: SetSame Action, -Up: core actions - -
- -

F.1.81 SetSquare

- - -

-
SetSquare(ToggleObject|SelectedElements|SelectedPins)
-
- -

sets the square-flag of objects. - - -

Note that Pins means pins and pads. - -

Pins, pads, and vias can have various shapes. All may be round. Pins -and pads may be square (obviously "square" pads are usually -rectangular). Pins and vias may be octagonal. When you change a -shape flag of an element, you actually change all of its pins and -pads. - -

Note that the square flag takes precedence over the octagon flag, -thus, if both the square and octagon flags are set, the object is -square. When the square flag is cleared, the pins and pads will be -either round or, if the octagon flag is set, octagonal. - -

- -


-Next: , -Previous: SetSquare Action, -Up: core actions - -
- -

F.1.82 SetThermal

- - -

-
SetThermal(Object|SelectedPins|SelectedVias|Selected, Style)
-
- -

Set the thermal (on the current layer) of pins or vias to the given style. -Style = 0 means no thermal. -Style = 1 has diagonal fingers with sharp edges. -Style = 2 has horizontal and vertical fingers with sharp edges. -Style = 3 is a solid connection to the plane.Style = 4 has diagonal fingers with rounded edges. -Style = 5 has horizontal and vertical fingers with rounded edges. - - -

This changes how/whether pins or vias connect to any rectangle or polygon -on the current layer. The first argument can specify one object, or all -selected pins, or all selected vias, or all selected pins and vias. -The second argument specifies the style of connection. -There are 5 possibilities: -0 - no connection, -1 - 45 degree fingers with sharp edges, -2 - horizontal & vertical fingers with sharp edges, -3 - solid connection, -4 - 45 degree fingers with rounded corners, -5 - horizontal & vertical fingers with rounded corners. - -

Pins and Vias may have thermals whether or not there is a polygon available -to connect with. However, they will have no effect without the polygon. - -

- -


-Next: , -Previous: SetThermal Action, -Up: core actions - -
- -

F.1.83 SetValue

- - -

-
SetValue(Grid|Line|LineSize|Text|TextScale|ViaDrillingHole|Via|ViaSize, delta)
-
- -

Change various board-wide values and sizes. - - -

-
ViaDrillingHole
Changes the diameter of the drill for new vias. - -
Grid
Sets the grid spacing. - -
Line
LineSize
Changes the thickness of new lines. - -
Via
ViaSize
Changes the diameter of new vias. - -
Text
TextScale
Changes the size of new text. - -
- -
- -


-Next: , -Previous: SetValue Action, -Up: core actions - -
- -

F.1.84 ToggleHideName

- - -

-
ToggleHideName(Object|SelectedElements)
-
- -

Toggles the visibility of element names. - - -

If names are hidden you won't see them on the screen and they will not -appear on the silk layer when you print the layout. - -

- -


-Next: , -Previous: ToggleHideName Action, -Up: core actions - -
- -

F.1.85 ToggleVendor

- - -

-
ToggleVendor()
-
- -

Toggles the state of automatic drill size mapping. - - -

-When drill mapping is enabled, new instances of pins and vias will -have their drill holes mapped to one of the allowed drill sizes -specified in the currently loaded vendor drill table. To enable drill -mapping, a vendor resource file containing a drill table must be -loaded first. - -

- -


-Next: , -Previous: ToggleVendor Action, -Up: core actions - -
- -

F.1.86 Undo

- - -

-
Undo()
-Undo(ClearList)
-
- -

Undo recent changes. - - -

The unlimited undo feature of Pcb allows you to recover from -most operations that materially affect you work. Calling -Undo() without any parameter recovers from the last (non-undo) -operation. ClearList is used to release the allocated -memory. ClearList is called whenever a new layout is started or -loaded. See also Redo and Atomic. - -

Note that undo groups operations by serial number; changes with the -same serial number will be undone (or redone) as a group. See -Atomic. - -

- -


-Next: , -Previous: Undo Action, -Up: core actions - -
- -

F.1.87 UnloadVendor

- - -

-
UnloadVendor()
-
- -

Unloads the current vendor drill mapping table. - - -

- -

- -


-Next: , -Previous: UnloadVendor Action, -Up: core actions - -
- -

F.1.88 Unselect

- - -

-
Unselect(All|Block|Connection)
-Unselect(ElementByName|ObjectByName|PadByName|PinByName)
-Unselect(ElementByName|ObjectByName|PadByName|PinByName, Name)
-Unselect(TextByName|ViaByName)
-Unselect(TextByName|ViaByName, Name)
-
-
- -

Unselects the object at the pointer location or the specified objects. - - -

-
All
Unselect all objects. - -
Block
Unselect all objects in a rectangle given by the cursor. - -
Connection
Unselect all connections with the “found” flag set. - -
ElementByName
ObjectByName
PadByName
PinByName
TextByName
ViaByName
-These all rely on having a regular expression parser built into -pcb. If the name is not specified then the user is prompted -for a pattern, and all objects that match the pattern and are of the -type specified are unselected. - -
- -
- -


-Next: , -Previous: Unselect Action, -Up: core actions - -
- -

F.1.89 w

- - -

-
w [name]
-
- -

Saves layout data. - - -

This commands has been added for the convenience of vi users -and has the same functionality as s. - -

This is one of the command box helper actions. While it is a regular -action and can be used like any other action, its name and syntax are -optimized for use with the command box (:) and thus the syntax -is documented for that purpose. - -

- -


-Previous: w Action, -Up: core actions - -
- -

F.1.90 wq

- - -

-
wq
-
- -

Saves the layout data and quits. - - -

This command has been added for the convenience of vi users and -has the same functionality as s combined with q. - -

This is one of the command box helper actions. While it is a regular -action and can be used like any other action, its name and syntax are -optimized for use with the command box (:) and thus the syntax -is documented for that purpose. - -

- -


-Next: , -Previous: core actions, -Up: Action Reference - -
- -

F.2 common actions

- - - -
- -


-Next: , -Up: common actions - -
- -

F.2.1 LayersChanged

- - -

-
LayersChanged()
-
- -

Tells the GUI that the layers have changed. - - -

This includes layer names, colors, stacking order, visibility, etc. - -

This is one of a number of actions which are part of the HID -interface. The core functions use these actions to tell the current -GUI when to change the presented information in response to changes -that the GUI may not know about. The user normally does not invoke -these directly. - -

- -


-Next: , -Previous: LayersChanged Action, -Up: common actions - -
- -

F.2.2 LibraryChanged

- - -

-
LibraryChanged()
-
- -

Tells the GUI that the libraries have changed. - - -

This is one of a number of actions which are part of the HID -interface. The core functions use these actions to tell the current -GUI when to change the presented information in response to changes -that the GUI may not know about. The user normally does not invoke -these directly. - -

- -


-Next: , -Previous: LibraryChanged Action, -Up: common actions - -
- -

F.2.3 NetlistChanged

- - -

-
NetlistChanged()
-
- -

Tells the GUI that the netlist has changed. - - -

This is one of a number of actions which are part of the HID -interface. The core functions use these actions to tell the current -GUI when to change the presented information in response to changes -that the GUI may not know about. The user normally does not invoke -these directly. - -

- -

F.2.4 PCBChanged

- - -

-
PCBChanged([revert])
-
- -

Tells the GUI that the whole PCB has changed. The optional“revert"parameter can be used as a hint to the GUI that the same design is beingreloaded, and that it might keep some viewport settings - - -

This is one of a number of actions which are part of the HID -interface. The core functions use these actions to tell the current -GUI when to change the presented information in response to changes -that the GUI may not know about. The user normally does not invoke -these directly. - -

- -


-Previous: PCBChanged Action, -Up: common actions - -
- -

F.2.5 RouteStylesChanged

- - -

-
RouteStylesChanged()
-
- -

Tells the GUI that the routing styles have changed. - - -

This is one of a number of actions which are part of the HID -interface. The core functions use these actions to tell the current -GUI when to change the presented information in response to changes -that the GUI may not know about. The user normally does not invoke -these directly. - -

- -


-Next: , -Previous: common actions, -Up: Action Reference - -
- -

F.3 gtk actions

- - -
- -


-Next: , -Up: gtk actions - -
- -

F.3.1 gtk About

- - -

-
About()
-
- -

N_("Tell the user about this version of PCB."); - - -

This just pops up a dialog telling the user which version of -pcb they're running. - -

- -


-Next: , -Previous: gtk About Action, -Up: gtk actions - -
- -

F.3.2 gtk AdjustStyle

- - -

-
AdjustStyle()
-
-
- -

Open the window which allows editing of the route styles. - - -

Opens the window which allows editing of the route styles. - -

- -


-Next: , -Previous: gtk AdjustStyle Action, -Up: gtk actions - -
- -

F.3.3 gtk Center

- - -

-
Center()
-
-
- -

N_("Moves the pointer to the center of the window."); - - -

Move the pointer to the center of the window, but only if it's -currently within the window already. - -

- -


-Next: , -Previous: gtk Center Action, -Up: gtk actions - -
- -

F.3.4 gtk Cursor

- - -

-
Cursor(Type,DeltaUp,DeltaRight,Units)
-
- -

N_("Move the cursor."); - - -

This action moves the mouse cursor. Unlike other actions which take -coordinates, this action's coordinates are always relative to the -user's view of the board. Thus, a positive DeltaUp may move the -cursor towards the board origin if the board is inverted. - -

Type is one of ‘Pan’ or ‘Warp’. ‘Pan’ causes the -viewport to move such that the crosshair is under the mouse cursor. -‘Warp’ causes the mouse cursor to move to be above the crosshair. - -

Units can be one of the following: - -

-
mil
mm
The cursor is moved by that amount, in board units. - -
grid
The cursor is moved by that many grid points. - -
view
The values are percentages of the viewport's view. Thus, a pan of -‘100’ would scroll the viewport by exactly the width of the -current view. - -
board
The values are percentages of the board size. Thus, a move of -‘50,50’ moves you halfway across the board. - -
- -
- -


-Next: , -Previous: gtk Cursor Action, -Up: gtk actions - -
- -

F.3.5 gtk DoWindows

- - -

-
DoWindows(1|2|3|4|5|6)
-DoWindows(Layout|Library|Log|Netlist|Preferences|DRC)
-
- -

N_("Open various GUI windows."); - - -

-
1
Layout
Open the layout window. Since the layout window is always shown -anyway, this has no effect. - -
2
Library
Open the library window. - -
3
Log
Open the log window. - -
4
Netlist
Open the netlist window. - -
5
Preferences
Open the preferences window. - -
6
DRC
Open the DRC violations window. - -
- -
- -


-Next: , -Previous: gtk DoWindows Action, -Up: gtk actions - -
- -

F.3.6 gtk EditLayerGroups

- - -

-
EditLayerGroups()
-
-
- -

Open the preferences window which allows editing of the layer groups. - - -

Opens the preferences window which is where the layer groups -are edited. This action is primarily provides to provide menu -resource compatibility with the lesstif HID. - -

- -


-Next: , -Previous: gtk EditLayerGroups Action, -Up: gtk actions - -
- -

F.3.7 gtk GetXY

- - -

-
GetXY()
-
- -

N_("Get a coordinate."); - - -

Prompts the user for a coordinate, if one is not already selected. - -

- -


-Next: , -Previous: gtk GetXY Action, -Up: gtk actions - -
- -

F.3.8 gtk ImportGUI

- - -

-
ImportGUI()
-
- -

N_("Asks user which schematics to import into PCB. -"); - - -

Asks user which schematics to import into PCB. - -

- -


-Next: , -Previous: gtk ImportGUI Action, -Up: gtk actions - -
- -

F.3.9 gtk Pan

- - -

-
Pan([thumb], Mode)
-
- -

N_("Start or stop panning (Mode = 1 to start, 0 to stop) -Optional thumb argument is ignored for now in gtk hid. -"); - - -

Start or stop panning. To start call with Mode = 1, to stop call with -Mode = 0. - -

- -


-Next: , -Previous: gtk Pan Action, -Up: gtk actions - -
- -

F.3.10 gtk Popup

- - -

-
Popup(MenuName, [Button])
-
- -

N_("Bring up the popup menu specified by MenuName. -If called by a mouse event then the mouse button number -must be specified as the optional second argument."); - - -

This just pops up the specified menu. The menu must have been defined -as a named subresource of the Popups resource in the menu resource -file. - -

- -


-Next: , -Previous: gtk Popup Action, -Up: gtk actions - -
- -

F.3.11 gtk Print

- - -

-
Print()
-
- -

N_("Print the layout."); - - -

This will find the default printing HID, prompt the user for its -options, and print the layout. - -

- -


-Next: , -Previous: gtk Print Action, -Up: gtk actions - -
- -

F.3.12 gtk PrintCalibrate

- - -

-
PrintCalibrate()
-
- -

N_("Calibrate the printer."); - - -

This will print a calibration page, which you would measure and type -the measurements in, so that future printouts will be more precise. - -

- -


-Next: , -Previous: gtk PrintCalibrate Action, -Up: gtk actions - -
- -

F.3.13 gtk Save

- - -

-
Save()
-Save(Layout|LayoutAs)
-Save(AllConnections|AllUnusedPins|ElementConnections)
-Save(PasteBuffer)
-
- -

N_("Save layout and/or element data to a user-selected file."); - - -

This action is a GUI front-end to the core's SaveTo action -(see SaveTo Action). If you happen to pass a filename, like -SaveTo, then SaveTo is called directly. Else, the -user is prompted for a filename to save, and then SaveTo is -called with that filename. - -

- -


-Next: , -Previous: gtk Save Action, -Up: gtk actions - -
- -

F.3.14 gtk SelectLayer

- - -

-
SelectLayer(1..MAXLAYER|Silk|Rats)
-
- -

Select which layer is the current layer. - - -

The specified layer becomes the currently active layer. It is made -visible if it is not already visible - -

- -


-Next: , -Previous: gtk SelectLayer Action, -Up: gtk actions - -
- -

F.3.15 gtk SetUnits

- - -

-
SetUnits(mm|mil)
-
- -

N_("Set the default measurement units."); - - -

-
mil
Sets the display units to mils (1/1000 inch). - -
mm
Sets the display units to millimeters. - -
- -
- -


-Next: , -Previous: gtk SetUnits Action, -Up: gtk actions - -
- -

F.3.16 gtk SwapSides

- - -

-
SwapSides(|v|h|r)
-
- -

N_("Swaps the side of the board you're looking at."); - - -

This action changes the way you view the board. - -

-
v
Flips the board over vertically (up/down). - -
h
Flips the board over horizontally (left/right), like flipping pages in -a book. - -
r
Rotates the board 180 degrees without changing sides. - -
- -

If no argument is given, the board isn't moved but the opposite side -is shown. - -

Normally, this action changes which pads and silk layer are drawn as -true silk, and which are drawn as the "invisible" layer. It also -determines which solder mask you see. - -

As a special case, if the layer group for the side you're looking at -is visible and currently active, and the layer group for the opposite -is not visible (i.e. disabled), then this action will also swap which -layer group is visible and active, effectively swapping the “working -side” of the board. - -

- -


-Next: , -Previous: gtk SwapSides Action, -Up: gtk actions - -
- -

F.3.17 gtk ToggleView

- - -

-
ToggleView(1..MAXLAYER)
-ToggleView(layername)
-ToggleView(Silk|Rats|Pins|Vias|Mask|BackSide)
-
- -

Toggle the visibility of the specified layer or layer group. - - -

If you pass an integer, that layer is specified by index (the first -layer is 1, etc). If you pass a layer name, that layer is -specified by name. When a layer is specified, the visibility of the -layer group containing that layer is toggled. - -

If you pass a special layer name, the visibility of those components -(silk, rats, etc) is toggled. Note that if you have a layer named -the same as a special layer, the layer is chosen over the special layer. - -

- -


-Previous: gtk ToggleView Action, -Up: gtk actions - -
- -

F.3.18 gtk Zoom

- - -

-
Zoom()
-Zoom(factor)
-
- -

N_("Various zoom factor changes."); - -Changes the zoom (magnification) of the view of the board. If no -arguments are passed, the view is scaled such that the board just fits -inside the visible window (i.e. “view all”). Otherwise, -factor specifies a change in zoom factor. It may be prefixed by -+, -, or = to change how the zoom factor is -modified. The factor is a floating point number, such as -1.5 or 0.75. - -

- -
+factor
Values greater than 1.0 cause the board to be drawn smaller; more of -the board will be visible. Values between 0.0 and 1.0 cause the board -to be drawn bigger; less of the board will be visible. - -
-factor
Values greater than 1.0 cause the board to be drawn bigger; less of -the board will be visible. Values between 0.0 and 1.0 cause the board -to be drawn smaller; more of the board will be visible. - -
=factor
-The factor is an absolute zoom factor; the unit for this value -is "PCB units per screen pixel". Since PCB units are 0.01 mil, a -factor of 1000 means 10 mils (0.01 in) per pixel, or 100 DPI, -about the actual resolution of most screens - resulting in an "actual -size" board. Similarly, a factor of 100 gives you a 10x actual -size. - -
- -

Note that zoom factors of zero are silently ignored. - -

- -


-Previous: gtk actions, -Up: Action Reference - -
- -

F.4 lesstif actions

- - - - -

F.4.1 lesstif About

- - -

-
About()
-
- -

Tell the user about this version of PCB. - - -

This just pops up a dialog telling the user which version of -pcb they're running. - -

- -

F.4.2 lesstif AdjustSizes

- - -

-
AdjustSizes()
-
- -

Let the user change the board size, DRC parameters, etc - - -

Displays a dialog box that lets the user change the board -size, DRC parameters, and text scale. - -

The units are determined by the default display units. - -

- -

F.4.3 lesstif AdjustStyle

- - -

-
AdjustStyle()
-
- -

Displays the route style adjustment window. - - -

- -

F.4.4 lesstif Benchmark

- - -

-
Benchmark()
-
- -

Benchmark the GUI speed. - - -

This action is used to speed-test the Lesstif graphics subsystem. It -redraws the current screen as many times as possible in ten seconds. -It reports the amount of time needed to draw the screen once. - -

- -

F.4.5 lesstif Command

- - -

-
Command()
-
- -

Displays the command line input window. - - -

The command window allows the user to manually enter actions to be -executed. Action syntax can be done one of two ways: - -

-
Follow the action name by an open parenthesis, arguments separated by -commas, end with a close parenthesis. Example: Abc(1,2,3) - -
Separate the action name and arguments by spaces. Example: Abc -1 2 3. - -
- -

The first option allows you to have arguments with spaces in them, -but the second is more “natural” to type for most people. - -

Note that action names are not case sensitive, but arguments normally -are. However, most actions will check for “keywords” in a case -insensitive way. - -

There are three ways to finish with the command window. If you press -the Enter key, the command is invoked, the window goes away, -and the next time you bring up the command window it's empty. If you -press the Esc key, the window goes away without invoking -anything, and the next time you bring up the command window it's -empty. If you change focus away from the command window (i.e. click -on some other window), the command window goes away but the next time -you bring it up it resumes entering the command you were entering -before. - -

- -


-Next: , -Previous: lesstif Command Action, -Up: lesstif actions - -
- -

F.4.6 lesstif Cursor

- - -

-
Cursor(Type,DeltaUp,DeltaRight,Units)
-
- -

Move the cursor. - - -

This action moves the mouse cursor. Unlike other actions which take -coordinates, this action's coordinates are always relative to the -user's view of the board. Thus, a positive DeltaUp may move the -cursor towards the board origin if the board is inverted. - -

Type is one of ‘Pan’ or ‘Warp’. ‘Pan’ causes the -viewport to move such that the crosshair is under the mouse cursor. -‘Warp’ causes the mouse cursor to move to be above the crosshair. - -

Units can be one of the following: - -

-
mil
mm
The cursor is moved by that amount, in board units. - -
grid
The cursor is moved by that many grid points. - -
view
The values are percentages of the viewport's view. Thus, a pan of -‘100’ would scroll the viewport by exactly the width of the -current view. - -
board
The values are percentages of the board size. Thus, a move of -‘50,50’ moves you halfway across the board. - -
- -
- -


-Next: , -Previous: lesstif Cursor Action, -Up: lesstif actions - -
- -

F.4.7 lesstif Debug

- - -

-
Debug(...)
-
- -

Debug action. - - -

This action exists to help debug scripts; it simply prints all its -arguments to stdout. - -

- -

F.4.8 lesstif DebugXY

- - -

-
DebugXY(...)
-
- -

Debug action, with coordinates - - -

Like Debug, but requires a coordinate. If the user hasn't yet -indicated a location on the board, the user will be prompted to click -on one. - -

- -

F.4.9 lesstif DoWindows

- - -

-
DoWindows(1|2|3|4)
-DoWindows(Layout|Library|Log|Netlist)
-
- -

Open various GUI windows. - - -

-
1
Layout
Open the layout window. Since the layout window is always shown -anyway, this has no effect. - -
2
Library
Open the library window. - -
3
Log
Open the log window. - -
4
Netlist
Open the netlist window. - -
- - - -

F.4.10 lesstif DumpKeys

- - -

-
DumpKeys()
-
- -

Dump Lesstif key bindings. - - -

Causes the list of key bindings (from pcb-menu.res) to be -dumped to stdout. This is most useful when invoked from the command -line like this: - -

     pcb --action-string DumpKeys
-
- - -

F.4.11 lesstif EditLayerGroups

- - -

-
EditLayerGroups()
-
- -

Let the user change the layer groupings - - -

Displays a dialog that lets the user view and change the layer -groupings. Each layer (row) can be a member of any one layer group -(column). Note the special layers solder and component -allow you to specify which groups represent the top and bottom of the -board. - -

See ChangeName Action. - -

- -

F.4.12 lesstif Export

- - -

-
Export()
-
- -

Export the layout. - - -

Prompts the user for an exporter to use. Then, prompts the user for -that exporter's options, and exports the layout. - -

- -

F.4.13 lesstif GetXY

- - -

-
GetXY()
-
- -

Get a coordinate. - - -

Prompts the user for a coordinate, if one is not already selected. - -

- -

F.4.14 lesstif ImportGUI

- - -

-
ImportGUI()
-
- -

Lets the user choose the schematics to import from - - -

Displays a dialog that lets the user select the schematic(s) to import -from, then saves that information in the layout's attributes for -future imports. - -

- -


-Next: , -Previous: lesstif ImportGUI Action, -Up: lesstif actions - -
- -

F.4.15 lesstif LibraryShow

- - -

-
LibraryShow()
-
- -

Displays the library window. - - -

- -

F.4.16 lesstif Load

- - -

-
Load()
-Load(Layout|LayoutToBuffer|ElementToBuffer|Netlist|Revert)
-
- -

Load layout data from a user-selected file. - - -

This action is a GUI front-end to the core's LoadFrom action -(see LoadFrom Action). If you happen to pass a filename, like -LoadFrom, then LoadFrom is called directly. Else, the -user is prompted for a filename to load, and then LoadFrom is -called with that filename. - -

- -

F.4.17 lesstif LoadVendor

- - -

-
LoadVendor()
-
- -

Loads a user-selected vendor resource file. - - -

The user is prompted for a file to load, and then -LoadVendorFrom is called (see LoadVendorFrom Action) to -load that vendor file. - -

- -

F.4.18 lesstif NetlistShow

- - -

-
NetlistShow(pinname|netname)
-
- -

Selects the given pinname or netname in the netlist window. - - -

- -

F.4.19 lesstif Print

- - -

-
Print()
-
- -

Print the layout. - - -

This will find the default printing HID, prompt the user for its -options, and print the layout. - -

- -

F.4.20 lesstif PrintCalibrate

- - -

-
PrintCalibrate()
-
- -

Calibrate the printer. - - -

This will print a calibration page, which you would measure and type -the measurements in, so that future printouts will be more precise. - -

- -

F.4.21 lesstif PromptFor

- - -

-
PromptFor([message[,default]])
-
- -

Prompt for a response. - - -

This is mostly for testing the lesstif HID interface. The parameters -are passed to the prompt_for() HID function, causing the user -to be prompted for a response. The respose is simply printed to the -user's stdout. - -

- -


-Next: , -Previous: lesstif PromptFor Action, -Up: lesstif actions - -
- -

F.4.22 lesstif Return

- - -

-
Return(0|1)
-
- -

Simulate a passing or failing action. - - -

This is for testing. If passed a 0, does nothing and succeeds. If -passed a 1, does nothing but pretends to fail. - -

- -

F.4.23 lesstif Save

- - -

-
Save()
-Save(Layout|LayoutAs)
-Save(AllConnections|AllUnusedPins|ElementConnections)
-Save(PasteBuffer)
-
- -

Save layout data to a user-selected file. - - -

This action is a GUI front-end to the core's SaveTo action -(see SaveTo Action). If you happen to pass a filename, like -SaveTo, then SaveTo is called directly. Else, the -user is prompted for a filename to save, and then SaveTo is -called with that filename. - -

- -


-Next: , -Previous: lesstif Save Action, -Up: lesstif actions - -
- -

F.4.24 lesstif SelectLayer

- - -

-
SelectLayer(1..MAXLAYER|Silk|Rats)
-
- -

Select which layer is the current layer. - - -

The specified layer becomes the currently active layer. It is made -visible if it is not already visible - -

- -

F.4.25 lesstif SetUnits

- - -

-
SetUnits(mm|mil)
-
- -

Set the default measurement units. - - -

-
mil
Sets the display units to mils (1/1000 inch). - -
mm
Sets the display units to millimeters. - -
- - - -

F.4.26 lesstif SwapSides

- - -

-
SwapSides(|v|h|r)
-
- -

Swaps the side of the board you're looking at. - - -

This action changes the way you view the board. - -

-
v
Flips the board over vertically (up/down). - -
h
Flips the board over horizontally (left/right), like flipping pages in -a book. - -
r
Rotates the board 180 degrees without changing sides. - -
- -

If no argument is given, the board isn't moved but the opposite side -is shown. - -

Normally, this action changes which pads and silk layer are drawn as -true silk, and which are drawn as the "invisible" layer. It also -determines which solder mask you see. - -

As a special case, if the layer group for the side you're looking at -is visible and currently active, and the layer group for the opposite -is not visible (i.e. disabled), then this action will also swap which -layer group is visible and active, effectively swapping the “working -side” of the board. - -

- -


-Next: , -Previous: lesstif SwapSides Action, -Up: lesstif actions - -
- -

F.4.27 lesstif ToggleView

- - -

-
ToggleView(1..MAXLAYER)
-ToggleView(layername)
-ToggleView(Silk|Rats|Pins|Vias|Mask|BackSide)
-
- -

Toggle the visibility of the specified layer or layer group. - - -

If you pass an integer, that layer is specified by index (the first -layer is 1, etc). If you pass a layer name, that layer is -specified by name. When a layer is specified, the visibility of the -layer group containing that layer is toggled. - -

If you pass a special layer name, the visibility of those components -(silk, rats, etc) is toggled. Note that if you have a layer named -the same as a special layer, the layer is chosen over the special layer. - -

- -


-Previous: lesstif ToggleView Action, -Up: lesstif actions - -
- -

F.4.28 lesstif Zoom

- - -

-
Zoom()
-Zoom(factor)
-
- -

Various zoom factor changes. - - -

Changes the zoom (magnification) of the view of the board. If no -arguments are passed, the view is scaled such that the board just fits -inside the visible window (i.e. “view all”). Otherwise, -factor specifies a change in zoom factor. It may be prefixed by -+, -, or = to change how the zoom factor is -modified. The factor is a floating point number, such as -1.5 or 0.75. - -

-
+factor
Values greater than 1.0 cause the board to be drawn smaller; more of -the board will be visible. Values between 0.0 and 1.0 cause the board -to be drawn bigger; less of the board will be visible. - -
-factor
Values greater than 1.0 cause the board to be drawn bigger; less of -the board will be visible. Values between 0.0 and 1.0 cause the board -to be drawn smaller; more of the board will be visible. - -
=factor
-The factor is an absolute zoom factor; the unit for this value -is "PCB units per screen pixel". Since PCB units are 0.01 mil, a -factor of 1000 means 10 mils (0.01 in) per pixel, or 100 DPI, -about the actual resolution of most screens - resulting in an "actual -size" board. Similarly, a factor of 100 gives you a 10x actual -size. - -
- -

Note that zoom factors of zero are silently ignored. - - -

- -


-Next: , -Previous: Action Reference, -Up: Top - -
- -

Appendix G Glossary

- -

-

-
Footprint
The pattern of metal, silkscreen, soldermask relief, and drills which -defines where you place a component on a circuit board. -Footprints are the placed by the user onto the PC board during the -placement phase of PCB layout. - -
Gerber File
The file format used in the industry to convey a board database to the -manufacturer is RS-274X (which replaces the now obsolete RS-274D -format). This file format was originally developed by Gerber for -their photo plotters and thus RS-274D and RS-274X format files -are often times refered to as “Gerber” files. - -
Thermal, Thermal Relief
A thermal relief is a way of connecting a pin to a ground -or power plane. Instead of directly connecting to the plane, small "spokes" -are used to increase the thermal resistance between the pin and the plane. -Often times these connections are refered to as simply a thermal. By increasing -the thermal resistance to the plane, it becomes easier to solder to the -pin. In the drawing below, the pin on the left is connected to the -polygon using a solid connection with no thermal relief, the middle -pin is connected using a thermal, while the pin on the right has no -connection to the polygon. In PCB, the “Thermal” Tool is used to -make both a solid connection and one with thermal relief (see Polygon Objects). - -
Example of a thermal relief
- -
- - -
- -


-Previous: Glossary, -Up: Top - -
- -

Index of Resources

- -

Index of Actions, Commands and Options

- - - -

Index of Concepts

- - - - -
-

Table of Contents

- -
- - - Index: trunk/doc/wire_size.texi =================================================================== --- trunk/doc/wire_size.texi (revision 1036) +++ trunk/doc/wire_size.texi (nonexistent) @@ -1,40 +0,0 @@ -@c Generated file. Do not edit directly -@c $Id$ -@multitable @columnfractions 0.167 0.167 0.167 0.167 0.167 0.167 -@item Drill @tab Diameter @tab Drill @tab Diameter @tab Drill @tab Diameter -@item Size @tab (inches) @tab Size @tab (inches) @tab Size @tab (inches) - -@item 97 @tab .0059 @tab 96 @tab .0063 @tab 95 @tab .0067 -@item 94 @tab .0071 @tab 93 @tab .0075 @tab 92 @tab .0079 -@item 91 @tab .0083 @tab 90 @tab .0087 @tab 89 @tab .0091 -@item 88 @tab .0095 @tab 87 @tab .0100 @tab 86 @tab .0105 -@item 85 @tab .0110 @tab 84 @tab .0115 @tab 83 @tab .0120 -@item 82 @tab .0125 @tab 81 @tab .0130 @tab 80 @tab .0135 -@item 79 @tab .0145 @tab 78 @tab .0160 @tab 77 @tab .0180 -@item 76 @tab .0200 @tab 75 @tab .0210 @tab 74 @tab .0225 -@item 73 @tab .0240 @tab 72 @tab .0250 @tab 71 @tab .0260 -@item 70 @tab .0280 @tab 69 @tab .0292 @tab 68 @tab .0310 -@item 67 @tab .0320 @tab 66 @tab .0330 @tab 65 @tab .0350 -@item 64 @tab .0360 @tab 63 @tab .0370 @tab 62 @tab .0380 -@item 61 @tab .0390 @tab 60 @tab .0400 @tab 59 @tab .0410 -@item 58 @tab .0420 @tab 57 @tab .0430 @tab 56 @tab .0465 -@item 55 @tab .0520 @tab 54 @tab .0550 @tab 53 @tab .0595 -@item 52 @tab .0635 @tab 51 @tab .0670 @tab 50 @tab .0700 -@item 49 @tab .0730 @tab 48 @tab .0760 @tab 47 @tab .0785 -@item 46 @tab .0810 @tab 45 @tab .0820 @tab 44 @tab .0860 -@item 43 @tab .0890 @tab 42 @tab .0935 @tab 41 @tab .0960 -@item 40 @tab .0980 @tab 39 @tab .0995 @tab 38 @tab .1015 -@item 37 @tab .1040 @tab 36 @tab .1065 @tab 35 @tab .1100 -@item 34 @tab .1110 @tab 33 @tab .1130 @tab 32 @tab .1160 -@item 31 @tab .1200 @tab 30 @tab .1285 @tab 29 @tab .1360 -@item 28 @tab .1405 @tab 27 @tab .1440 @tab 26 @tab .1470 -@item 25 @tab .1495 @tab 24 @tab .1520 @tab 23 @tab .1540 -@item 22 @tab .1570 @tab 21 @tab .1590 @tab 20 @tab .1610 -@item 19 @tab .1660 @tab 18 @tab .1695 @tab 17 @tab .1730 -@item 16 @tab .1770 @tab 15 @tab .1800 @tab 14 @tab .1820 -@item 13 @tab .1850 @tab 12 @tab .1890 @tab 11 @tab .1910 -@item 10 @tab .1935 @tab 9 @tab .1960 @tab 8 @tab .1990 -@item 7 @tab .2010 @tab 6 @tab .2040 @tab 5 @tab .2055 -@item 4 @tab .2090 @tab 3 @tab .2130 @tab 2 @tab .2210 -@item 1 @tab .2280 @tab @tab @tab @tab @end multitable - Index: trunk/doc/actions.texi =================================================================== --- trunk/doc/actions.texi (revision 1036) +++ trunk/doc/actions.texi (nonexistent) @@ -1,3574 +0,0 @@ -@c key actions -@c ./../src/action.c 225 - -Many actions take a @code{delta} parameter as the last parameter, -which is an amount to change something. That @code{delta} may include -units, as an additional parameter, such as @code{Action(Object,5,mm)}. -If no units are specified, the default is PCB's native units -(currently 1/100 mil). Also, if the delta is prefixed by @code{+} or -@code{-}, the size is increased or decreased by that amount. -Otherwise, the size size is set to the given amount. - -@example -Action(Object,5,mil) -Action(Object,+0.5,mm) -Action(Object,-1) -@end example - -Actions which take a @code{delta} parameter which do not accept all -these options will specify what they do take. - -@c ./../src/action.c 229 - -@macro pinshapes - -Pins, pads, and vias can have various shapes. All may be round. Pins -and pads may be square (obviously "square" pads are usually -rectangular). Pins and vias may be octagonal. When you change a -shape flag of an element, you actually change all of its pins and -pads. - -Note that the square flag takes precedence over the octagon flag, -thus, if both the square and octagon flags are set, the object is -square. When the square flag is cleared, the pins and pads will be -either round or, if the octagon flag is set, octagonal. - -@end macro - -@c ./../src/command.c 64 - -@macro colonaction - -This is one of the command box helper actions. While it is a regular -action and can be used like any other action, its name and syntax are -optimized for use with the command box (@code{:}) and thus the syntax -is documented for that purpose. - -@end macro - -@c ./../src/action.c 227 - -Many actions act on indicated objects on the board. They will have -parameters like @code{ToggleObject} or @code{SelectedVias} to indicate -what group of objects they act on. Unless otherwise specified, these -parameters are defined as follows: - -@table @code - -@item Object -@itemx ToggleObject -Affects the object under the mouse pointer. If this action is invoked -from a menu or script, the user will be prompted to click on an -object, which is then the object affected. - -@item Selected -@itemx SelectedObjects - -Affects all objects which are currently selected. At least, all -selected objects for which the given action makes sense. - -@item SelectedPins -@itemx SelectedVias -@itemx Selected@var{Type} -@itemx @i{etc} -Affects all objects which are both selected and of the @var{Type} specified. - -@end table - - -@menu -* core actions:: -* common actions:: -* gtk actions:: -* lesstif actions:: -@end menu - -@node core actions -@section Core actions -@menu -* AddRats Action:: Add one or more rat lines to the board. -* ApplyVendor Action:: Applies the currently loaded vendor drill table to the current design. -* Atomic Action:: Save or restore the undo serial number. -* Attributes Action:: Let the user edit the attributes of the layout, current or given -layer, or selected element. -* AutoPlaceSelected Action:: Auto-place selected components. -* AutoRoute Action:: Auto-route some or all rat lines. -* ChangeClearSize Action:: Changes the clearance size of objects. -* ChangeDrillSize Action:: Changes the drilling hole size of objects. -* ChangeFlag Action:: Sets or clears flags on objects. -* ChangeHole Action:: Changes the hole flag of objects. -* ChangeJoin Action:: Changes the join (clearance through polygons) of objects. -* ChangeName Action:: Sets the name of objects. -* ChangeOctagon Action:: Changes the octagon-flag of pins and vias. -* ChangePaste Action:: Changes the no paste flag of objects. -* ChangePinName Action:: Sets the name of a specific pin on a specific element. -* ChangeSize Action:: Changes the size of objects. -* ChangeSquare Action:: Changes the square flag of pins and pads. -* ClearOctagon Action:: Clears the octagon-flag of pins and vias. -* ClearSquare Action:: Clears the square-flag of pins and pads. -* ClrFlag Action:: Clears flags on objects. -* Connection Action:: Searches connections of the object at the cursor position. -* Delete Action:: Delete stuff. -* DeleteRats Action:: Delete rat lines. -* DisableVendor Action:: Disables automatic drill size mapping. -* DisperseElements Action:: Disperses elements. -* Display Action:: Several display-related actions. -* djopt Action:: Perform various optimizations on the current board. -* DRC Action:: Invoke the DRC check. -* DumpLibrary Action:: Display the entire contents of the libraries. -* elementlist Action:: Adds the given element if it doesn't already exist. -* elementsetattr Action:: Sets or clears an element-specific attribute. -* EnableVendor Action:: Enables automatic drill size mapping. -* execcommand Action:: Runs a command. -* ExecuteFile Action:: Run actions from the given file. -* Flip Action:: Flip an element to the opposite side of the board. -* FontEdit Action:: Convert the current font to a PCB for editing. -* FontSave Action:: Convert the current PCB back to a font. -* FreeRotateBuffer Action:: Rotates the current paste buffer contents by the specified angle. The -angle is given in degrees. If no angle is given, the user is prompted -for one. - -* GlobalPuller Action:: Pull all traces tight. -* h Action:: Print a help message for commands. -* Import Action:: Import schematics. -* l Action:: Loads layout data. -* le Action:: Loads an element into the current buffer. -* LoadFootprint Action:: Loads a single footprint by name. -* LoadFrom Action:: Load layout data from a file. -* LoadVendorFrom Action:: Loads the specified vendor resource file. -* m Action:: Loads a layout into the current buffer. -* MarkCrosshair Action:: Set/Reset the Crosshair mark. -* Message Action:: Writes a message to the log window. -* MinClearGap Action:: Ensures that polygons are a minimum distance from objects. -* MinMaskGap Action:: Ensures the mask is a minimum distance from pins and pads. -* Mode Action:: Change or use the tool mode. -* MorphPolygon Action:: Converts dead polygon islands into separate polygons. -* MoveLayer Action:: Moves/Creates/Deletes Layers. -* MoveObject Action:: Moves the object under the crosshair. -* MoveToCurrentLayer Action:: Moves objects to the current layer. -* Netlist Action:: Perform various actions on netlists. -* New Action:: Starts a new layout. -* OptAutoOnly Action:: Toggles the optimize-only-autorouted flag. -* PasteBuffer Action:: Various operations on the paste buffer. -* Polygon Action:: Some polygon related stuff. -* Puller Action:: Pull an arc-line junction tight. -* q Action:: Quits the application after confirming. -* q! Action:: Quits the application without confirming. -* Quit Action:: Quits the application after confirming. -* Redo Action:: Redo recent``undo''operations. -* RemoveSelected Action:: Removes any selected objects. -* Renumber Action:: Renumber all elements. The changes will be recorded to filename -for use in backannotating these changes to the schematic. -* Report Action:: Produce various report. -* ReportDialog Action:: Report on the object under the crosshair -* RipUp Action:: Ripup auto-routed tracks, or convert an element to parts. -* rn Action:: Reads netlist. -* RouteStyle Action:: Copies the indicated routing style into the current sizes. -* s Action:: Saves layout data. -* SaveSettings Action:: Saves settings. -* SaveTo Action:: Saves data to a file. -* Select Action:: Toggles or sets the selection. -* SetFlag Action:: Sets flags on objects. -* SetOctagon Action:: Sets the octagon-flag of objects. -* SetSame Action:: Sets current layer and sizes to match indicated item. -* SetSquare Action:: sets the square-flag of objects. -* SetThermal Action:: Set the thermal (on the current layer) of pins or vias to the given style. -Style = 0 means no thermal. -Style = 1 has diagonal fingers with sharp edges. -Style = 2 has horizontal and vertical fingers with sharp edges. -Style = 3 is a solid connection to the plane.Style = 4 has diagonal fingers with rounded edges. -Style = 5 has horizontal and vertical fingers with rounded edges. - -* SetValue Action:: Change various board-wide values and sizes. -* ToggleHideName Action:: Toggles the visibility of element names. -* ToggleVendor Action:: Toggles the state of automatic drill size mapping. -* Undo Action:: Undo recent changes. -* UnloadVendor Action:: Unloads the current vendor drill mapping table. -* Unselect Action:: Unselects the object at the pointer location or the specified objects. -* w Action:: Saves layout data. -* wq Action:: Saves the layout data and quits. -@end menu -@node AddRats Action -@subsection AddRats -@c key AddRats in hid -@cartouche -@format -AddRats(AllRats|SelectedRats|Close)@end format -@end cartouche - -Add one or more rat lines to the board. -@c ./../src/action.c 3310 - -@table @code - -@item AllRats -Create rat lines for all loaded nets that aren't already connected on -with copper. - -@item SelectedRats -Similarly, but only add rat lines for nets connected to selected pins -and pads. - -@item Close -Selects the shortest unselected rat on the board. - -@end table - - -@node ApplyVendor Action -@subsection ApplyVendor -@c key ApplyVendor in hid -@cartouche -@format -ApplyVendor()@end format -@end cartouche - -Applies the currently loaded vendor drill table to the current design. -@c ./../src/vendor.c 112 -@cindex vendor map -@cindex vendor drill table -@findex ApplyVendor() - -This will modify all of your drill holes to match the list of allowed -sizes for your vendor. - -@node Atomic Action -@subsection Atomic -@c key Atomic in hid -@cartouche -@format -Atomic(Save|Restore|Close|Block)@end format -@end cartouche - -Save or restore the undo serial number. -@c ./../src/action.c 1720 - -This action allows making multiple-action bindings into an atomic -operation that will be undone by a single Undo command. For example, -to optimize rat lines, you'd delete the rats and re-add them. To -group these into a single undo, you'd want the deletions and the -additions to have the same undo serial number. So, you @code{Save}, -delete the rats, @code{Restore}, add the rats - using the same serial -number as the deletes, then @code{Block}, which checks to see if the -deletions or additions actually did anything. If not, the serial -number is set to the saved number, as there's nothing to undo. If -something did happen, the serial number is incremented so that these -actions are counted as a single undo step. - -@table @code - -@item Save -Saves the undo serial number. - -@item Restore -Returns it to the last saved number. - -@item Close -Sets it to 1 greater than the last save. - -@item Block -Does a Restore if there was nothing to undo, else does a Close. - -@end table - - -@node Attributes Action -@subsection Attributes -@c key Attributes in hid -@cartouche -@format -Attributes(Layout|Layer|Element) -Attributes(Layer,layername)@end format -@end cartouche - -Let the user edit the attributes of the layout, current or given -layer, or selected element. -@c ./../src/action.c 6761 - -This just pops up a dialog letting the user edit the attributes of the -pcb, an element, or a layer. - - -@node AutoPlaceSelected Action -@subsection AutoPlaceSelected -@c key AutoPlaceSelected in hid -@cartouche -@format -AutoPlaceSelected()@end format -@end cartouche - -Auto-place selected components. -@c ./../src/action.c 3450 - -Attempts to re-arrange the selected components such that the nets -connecting them are minimized. Note that you cannot undo this. - - -@node AutoRoute Action -@subsection AutoRoute -@c key AutoRoute in hid -@cartouche -@format -AutoRoute(AllRats|SelectedRats)@end format -@end cartouche - -Auto-route some or all rat lines. -@c ./../src/action.c 3471 - -@table @code - -@item AllRats -Attempt to autoroute all rats. - -@item SelectedRats -Attempt to autoroute the selected rats. - -@end table - -Before autorouting, it's important to set up a few things. First, -make sure any layers you aren't using are disabled, else the -autorouter may use them. Next, make sure the current line and via -styles are set accordingly. Last, make sure "new lines clear -polygons" is set, in case you eventually want to add a copper pour. - -Autorouting takes a while. During this time, the program may not be -responsive. - - -@node ChangeClearSize Action -@subsection ChangeClearSize -@c key ChangeClearSize in hid -@cartouche -@format -ChangeClearSize(Object, delta) -ChangeClearSize(SelectedPins|SelectedPads|SelectedVias, delta) -ChangeClearSize(SelectedLines|SelectedArcs, delta -ChangeClearSize(Selected|SelectedObjects, delta)@end format -@end cartouche - -Changes the clearance size of objects. -@c ./../src/action.c 3686 - -If the solder mask is currently showing, this action changes the -solder mask clearance. If the mask is not showing, this action -changes the polygon clearance. - - -@node ChangeDrillSize Action -@subsection ChangeDrillSize -@c key ChangeDrillSize in hid -@cartouche -@format -ChangeDrillSize(Object, delta) -ChangeDrillSize(SelectedPins|SelectedVias|Selected|SelectedObjects, delta)@end format -@end cartouche - -Changes the drilling hole size of objects. -@c ./../src/action.c 3630 - - -@node ChangeFlag Action -@subsection ChangeFlag -@c key ChangeFlag in hid -@cartouche -@format -ChangeFlag(Object|Selected|SelectedObjects, flag, value) -ChangeFlag(SelectedLines|SelectedPins|SelectedVias, flag, value) -ChangeFlag(SelectedPads|SelectedTexts|SelectedNames, flag, value) -ChangeFlag(SelectedElements, flag, value) -flag = square | octagon | thermal | join -value = 0 | 1@end format -@end cartouche - -Sets or clears flags on objects. -@c ./../src/action.c 5750 - -Toggles the given flag on the indicated object(s). The flag may be -one of the flags listed above (square, octagon, thermal, join). The -value may be the number 0 or 1. If the value is 0, the flag is -cleared. If the value is 1, the flag is set. - - -@node ChangeHole Action -@subsection ChangeHole -@c key ChangeHole in hid -@cartouche -@format -ChangeHole(ToggleObject|Object|SelectedVias|Selected)@end format -@end cartouche - -Changes the hole flag of objects. -@c ./../src/action.c 4571 - -The "hole flag" of a via determines whether the via is a -plated-through hole (not set), or an unplated hole (set). - - -@node ChangeJoin Action -@subsection ChangeJoin -@c key ChangeJoin in hid -@cartouche -@format -ChangeJoin(ToggleObject|SelectedLines|SelectedArcs|Selected)@end format -@end cartouche - -Changes the join (clearance through polygons) of objects. -@c ./../src/action.c 4199 - -The join flag determines whether a line or arc, drawn to intersect a -polygon, electrically connects to the polygon or not. When joined, -the line/arc is simply drawn over the polygon, making an electrical -connection. When not joined, a gap is drawn between the line and the -polygon, insulating them from each other. - - -@node ChangeName Action -@subsection ChangeName -@c key ChangeName in hid -@cartouche -@format -ChangeName(Object) -ChangeName(Layout|Layer)@end format -@end cartouche - -Sets the name of objects. -@c ./../src/action.c 4005 - -@table @code - -@item Object -Changes the name of the element under the cursor. - -@item Layout -Changes the name of the layout. This is printed on the fab drawings. - -@item Layer -Changes the name of the currently active layer. - -@end table - - -@node ChangeOctagon Action -@subsection ChangeOctagon -@c key ChangeOctagon in hid -@cartouche -@format -ChangeOctagon(Object|ToggleObject|SelectedObjects|Selected) -ChangeOctagon(SelectedElements|SelectedPins|SelectedVias)@end format -@end cartouche - -Changes the octagon-flag of pins and vias. -@c ./../src/action.c 4403 - -@pinshapes - - -@node ChangePaste Action -@subsection ChangePaste -@c key ChangePaste in hid -@cartouche -@format -ChangePaste(ToggleObject|Object|SelectedPads|Selected)@end format -@end cartouche - -Changes the no paste flag of objects. -@c ./../src/action.c 4611 - -The "no paste flag" of a pad determines whether the solderpaste - stencil will have an opening for the pad (no set) or if there wil be - no solderpaste on the pad (set). This is used for things such as - fiducial pads. - - -@node ChangePinName Action -@subsection ChangePinName -@c key ChangePinName in hid -@cartouche -@format -ChangePinName(ElementName,PinNumber,PinName)@end format -@end cartouche - -Sets the name of a specific pin on a specific element. -@c ./../src/action.c 3924 - -This can be especially useful for annotating pin names from a -schematic to the layout without requiring knowledge of the pcb file -format. - -@example -ChangePinName(U3, 7, VCC) -@end example - - -@node ChangeSize Action -@subsection ChangeSize -@c key ChangeSize in hid -@cartouche -@format -ChangeSize(Object, delta) -ChangeSize(SelectedObjects|Selected, delta) -ChangeSize(SelectedLines|SelectedPins|SelectedVias, delta) -ChangeSize(SelectedPads|SelectedTexts|SelectedNames, delta) -ChangeSize(SelectedElements, delta)@end format -@end cartouche - -Changes the size of objects. -@c ./../src/action.c 3543 - -For lines and arcs, this changes the width. For pins and vias, this -changes the overall diameter of the copper annulus. For pads, this -changes the width and, indirectly, the length. For texts and names, -this changes the scaling factor. For elements, this changes the width -of the silk layer lines and arcs for this element. - - -@node ChangeSquare Action -@subsection ChangeSquare -@c key ChangeSquare in hid -@cartouche -@format -ChangeSquare(ToggleObject) -ChangeSquare(SelectedElements|SelectedPins) -ChangeSquare(Selected|SelectedObjects)@end format -@end cartouche - -Changes the square flag of pins and pads. -@c ./../src/action.c 4250 - -Note that @code{Pins} means both pins and pads. - -@pinshapes - - -@node ClearOctagon Action -@subsection ClearOctagon -@c key ClearOctagon in hid -@cartouche -@format -ClearOctagon(ToggleObject|Object|SelectedObjects|Selected) -ClearOctagon(SelectedElements|SelectedPins|SelectedVias)@end format -@end cartouche - -Clears the octagon-flag of pins and vias. -@c ./../src/action.c 4515 - -@pinshapes - - -@node ClearSquare Action -@subsection ClearSquare -@c key ClearSquare in hid -@cartouche -@format -ClearSquare(ToggleObject|SelectedElements|SelectedPins)@end format -@end cartouche - -Clears the square-flag of pins and pads. -@c ./../src/action.c 4352 - -Note that @code{Pins} means pins and pads. - -@pinshapes - - -@node ClrFlag Action -@subsection ClrFlag -@c key ClrFlag in hid -@cartouche -@format -ClrFlag(Object|Selected|SelectedObjects, flag) -ClrFlag(SelectedLines|SelectedPins|SelectedVias, flag) -ClrFlag(SelectedPads|SelectedTexts|SelectedNames, flag) -ClrFlag(SelectedElements, flag) -flag = square | octagon | thermal | join@end format -@end cartouche - -Clears flags on objects. -@c ./../src/action.c 5733 - -Turns the given flag off, regardless of its previous setting. See -@code{ChangeFlag}. - -@example -ClrFlag(SelectedLines,join) -@end example - - -@node Connection Action -@subsection Connection -@c key Connection in hid -@cartouche -@format -Connection(Find|ResetLinesAndPolygons|ResetPinsAndVias|Reset)@end format -@end cartouche - -Searches connections of the object at the cursor position. -@c ./../src/action.c 2093 - -Connections found with this action will be highlighted in the -``connected-color'' color and will have the ``found'' flag set. - -@table @code - -@item Find -The net under the cursor is ``found''. - -@item ResetLinesAndPolygons -Any ``found'' lines and polygons are marked ``not found''. - -@item ResetPinsAndVias -Any ``found'' pins and vias are marked ``not found''. - -@item Reset -All ``found'' objects are marked ``not found''. - -@end table - - -@node Delete Action -@subsection Delete -@c key Delete in hid -@cartouche -@format -Delete(Object|Selected) -Delete(AllRats|SelectedRats)@end format -@end cartouche - -Delete stuff. -@c ./../src/action.c 3371 - - -@node DeleteRats Action -@subsection DeleteRats -@c key DeleteRats in hid -@cartouche -@format -DeleteRats(AllRats|Selected|SelectedRats)@end format -@end cartouche - -Delete rat lines. -@c ./../src/action.c 3418 - - -@node DisableVendor Action -@subsection DisableVendor -@c key DisableVendor in hid -@cartouche -@format -DisableVendor()@end format -@end cartouche - -Disables automatic drill size mapping. -@c ./../src/vendor.c 161 - -@cindex vendor map -@cindex vendor drill table -@findex DisableVendor() - -When drill mapping is enabled, new instances of pins and vias will -have their drill holes mapped to one of the allowed drill sizes -specified in the currently loaded vendor drill table. - - -@node DisperseElements Action -@subsection DisperseElements -@c key DisperseElements in hid -@cartouche -@format -DisperseElements(All|Selected)@end format -@end cartouche - -Disperses elements. -@c ./../src/action.c 2146 - -Normally this is used when starting a board, by selecting all elements -and then dispersing them. This scatters the elements around the board -so that you can pick individual ones, rather than have all the -elements at the same 0,0 coordinate and thus impossible to choose -from. - - -@node Display Action -@subsection Display -@c key Display in hid -@cartouche -@format -Display(NameOnPCB|Description|Value) -Display(Grid|Redraw) -Display(CycleClip|CycleCrosshair|Toggle45Degree|ToggleStartDirection) -Display(ToggleGrid|ToggleRubberBandMode|ToggleUniqueNames) -Display(ToggleMask|ToggleName|ToggleClearLine|ToggleFullPoly|ToggleSnapPin) -Display(ToggleThindraw|ToggleThindrawPoly|ToggleOrthoMove|ToggleLocalRef) -Display(ToggleCheckPlanes|ToggleShowDRC|ToggleAutoDRC) -Display(ToggleLiveRoute|LockNames|OnlyNames) -Display(Pinout|PinOrPadName)@end format -@end cartouche - -Several display-related actions. -@c ./../src/action.c 2262 - -@table @code - -@item NameOnPCB -@item Description -@item Value -Specify whether all elements show their name, description, or value. - -@item Redraw -Redraw the whole board. - -@item Toggle45Degree -When clear, lines can be drawn at any angle. When set, lines are -restricted to multiples of 45 degrees and requested lines may be -broken up according to the clip setting. - -@item CycleClip -Changes the way lines are restricted to 45 degree increments. The -various settings are: straight only, orthogonal then angled, and angled -then orthogonal. If AllDirections is set, this action disables it. - -@item CycleCrosshair -Changes crosshair drawing. Crosshair may accept form of 4-ray, -8-ray and 12-ray cross. - -@item ToggleRubberBandMode -If set, moving an object moves all the lines attached to it too. - -@item ToggleStartDirection -If set, each time you set a point in a line, the Clip toggles between -orth-angle and angle-ortho. - -@item ToggleUniqueNames -If set, you will not be permitted to change the name of an element to -match that of another element. - -@item ToggleSnapPin -If set, pin centers and pad end points are treated as additional grid -points that the cursor can snap to. - -@item ToggleLocalRef -If set, the mark is automatically set to the beginning of any move, so -you can see the relative distance you've moved. - -@item ToggleThindraw -If set, objects on the screen are drawn as outlines (lines are drawn -as center-lines). This lets you see line endpoints hidden under pins, -for example. - -@item ToggleThindrawPoly -If set, polygons on the screen are drawn as outlines. - -@item ToggleShowDRC -If set, pending objects (i.e. lines you're in the process of drawing) -will be drawn with an outline showing how far away from other copper -you need to be. - -@item ToggleLiveRoute -If set, the progress of the autorouter will be visible on the screen. - -@item ToggleAutoDRC -If set, you will not be permitted to make connections which violate -the current DRC and netlist settings. - -@item ToggleCheckPlanes -If set, lines and arcs aren't drawn, which usually leaves just the -polygons. If you also disable all but the layer you're interested in, -this allows you to check for isolated regions. - -@item ToggleOrthoMove -If set, the crosshair is only allowed to move orthogonally from its -previous position. I.e. you can move an element or line up, down, -left, or right, but not up+left or down+right. - -@item ToggleName -Selects whether the pinouts show the pin names or the pin numbers. - -@item ToggleLockNames -If set, text will ignore left mouse clicks and actions that work on -objects under the mouse. You can still select text with a lasso (left -mouse drag) and perform actions on the selection. - -@item ToggleOnlyNames -If set, only text will be sensitive for mouse clicks and actions that -work on objects under the mouse. You can still select other objects -with a lasso (left mouse drag) and perform actions on the selection. - -@item ToggleMask -Turns the solder mask on or off. - -@item ToggleClearLine -When set, the clear-line flag causes new lines and arcs to have their -``clear polygons'' flag set, so they won't be electrically connected -to any polygons they overlap. - -@item ToggleFullPoly -When set, the full-poly flag causes new polygons to have their -``full polygon'' flag set, so all parts of them will be displayed -instead of only the biggest one. - -@item ToggleGrid -Resets the origin of the current grid to be wherever the mouse pointer -is (not where the crosshair currently is). If you provide two numbers -after this, the origin is set to that coordinate. - -@item Grid -Toggles whether the grid is displayed or not. - -@item Pinout -Causes the pinout of the element indicated by the cursor to be -displayed, usually in a separate window. - -@item PinOrPadName -Toggles whether the names of pins, pads, or (yes) vias will be -displayed. If the cursor is over an element, all of its pins and pads -are affected. - -@end table - - -@node djopt Action -@subsection djopt -@c key djopt in hid -@cartouche -@format -djopt(debumpify|unjaggy|simple|vianudge|viatrim|orthopull) -djopt(auto) - all of the above -djopt(miter)@end format -@end cartouche - -Perform various optimizations on the current board. -@c ./../src/djopt.c 2853 - -The different types of optimizations change your board in order to -reduce the total trace length and via count. - -@table @code - -@item debumpify -Looks for U-shaped traces that can be shortened or eliminated. - -@item unjaggy -Looks for corners which could be flipped to eliminate one or more -corners (i.e. jaggy lines become simpler). - -@item simple -Removing uneeded vias, replacing two or more trace segments in a row -with a single segment. This is usually performed automatically after -other optimizations. - -@item vianudge -Looks for vias where all traces leave in the same direction. Tries to -move via in that direction to eliminate one of the traces (and thus a -corner). - -@item viatrim -Looks for traces that go from via to via, where moving that trace to a -different layer eliminates one or both vias. - -@item orthopull -Looks for chains of traces all going in one direction, with more -traces orthogonal on one side than on the other. Moves the chain in -that direction, causing a net reduction in trace length, possibly -eliminating traces and/or corners. - -@item splitlines -Looks for lines that pass through vias, pins, or pads, and splits them -into separate lines so they can be managed separately. - -@item auto -Performs the above options, repeating until no further optimizations -can be made. - -@item miter -Replaces 90 degree corners with a pair of 45 degree corners, to reduce -RF losses and trace length. - -@end table - - -@node DRC Action -@subsection DRC -@c key DRC in hid -@cartouche -@format -DRC()@end format -@end cartouche - -Invoke the DRC check. -@c ./../src/action.c 1755 - -Note that the design rule check uses the current board rule settings, -not the current style settings. - - -@node DumpLibrary Action -@subsection DumpLibrary -@c key DumpLibrary in hid -@cartouche -@format -DumpLibrary()@end format -@end cartouche - -Display the entire contents of the libraries. -@c ./../src/action.c 1791 - - - -@node elementlist Action -@subsection elementlist -@c key elementlist in hid -@cartouche -@format -ElementList(Start|Done|Need,,,)@end format -@end cartouche - -Adds the given element if it doesn't already exist. -@c ./../src/action.c 5983 - -@table @code - -@item Start -Indicates the start of an element list; call this before any Need -actions. - -@item Need -Searches the board for an element with a matching refdes. - -If found, the value and footprint are updated. - -If not found, a new element is created with the given footprint and value. - -@item Done -Compares the list of elements needed since the most recent -@code{start} with the list of elements actually on the board. Any -elements that weren't listed are selected, so that the user may delete -them. - -@end table - - -@node elementsetattr Action -@subsection elementsetattr -@c key elementsetattr in hid -@cartouche -@format -ElementSetAttr(refdes,name[,value])@end format -@end cartouche - -Sets or clears an element-specific attribute. -@c ./../src/action.c 6176 - -If a value is specified, the named attribute is added (if not already -present) or changed (if it is) to the given value. If the value is -not specified, the given attribute is removed if present. - - -@node EnableVendor Action -@subsection EnableVendor -@c key EnableVendor in hid -@cartouche -@format -EnableVendor()@end format -@end cartouche - -Enables automatic drill size mapping. -@c ./../src/vendor.c 146 - -@cindex vendor map -@cindex vendor drill table -@findex EnableVendor() - -When drill mapping is enabled, new instances of pins and vias will -have their drill holes mapped to one of the allowed drill sizes -specified in the currently loaded vendor drill table. To enable drill -mapping, a vendor resource file containing a drill table must be -loaded first. - - -@node execcommand Action -@subsection execcommand -@c key execcommand in hid -@cartouche -@format -ExecCommand(command)@end format -@end cartouche - -Runs a command. -@c ./../src/action.c 6234 - -Runs the given command, which is a system executable. - - -@node ExecuteFile Action -@subsection ExecuteFile -@c key ExecuteFile in hid -@cartouche -@format -ExecuteFile(filename)@end format -@end cartouche - -Run actions from the given file. -@c ./../src/action.c 5861 - -Lines starting with @code{#} are ignored. - - -@node Flip Action -@subsection Flip -@c key Flip in hid -@cartouche -@format -Flip(Object|Selected|SelectedElements)@end format -@end cartouche - -Flip an element to the opposite side of the board. -@c ./../src/action.c 1841 - -Note that the location of the element will be symmetric about the -cursor location; i.e. if the part you are pointing at will still be at -the same spot once the element is on the other side. When flipping -multiple elements, this retains their positions relative to each -other, not their absolute positions on the board. - - -@node FontEdit Action -@subsection FontEdit -@c key FontEdit in hid -@cartouche -@format -FontEdit()@end format -@end cartouche - -Convert the current font to a PCB for editing. -@c ./../src/fontmode.c 73 - - -@node FontSave Action -@subsection FontSave -@c key FontSave in hid -@cartouche -@format -FontSave()@end format -@end cartouche - -Convert the current PCB back to a font. -@c ./../src/fontmode.c 173 - - -@node FreeRotateBuffer Action -@subsection FreeRotateBuffer -@c key FreeRotateBuffer in hid -@cartouche -@format -FreeRotateBuffer([Angle])@end format -@end cartouche - -Rotates the current paste buffer contents by the specified angle. The -angle is given in degrees. If no angle is given, the user is prompted -for one. - -@c ./../src/buffer.c 1370 - -Rotates the contents of the pastebuffer by an arbitrary angle. If no -angle is given, the user is prompted for one. - - -@node GlobalPuller Action -@subsection GlobalPuller -@c key GlobalPuller in hid -@cartouche -@format -GlobalPuller()@end format -@end cartouche - -Pull all traces tight. -@c ./../src/puller.c 534 - - -@node h Action -@subsection h -@c key h in hid -@cartouche -@format -h@end format -@end cartouche - -Print a help message for commands. -@c ./../src/command.c 72 - -@colonaction - - -@node Import Action -@subsection Import -@c key Import in hid -@cartouche -@format -Import() -Import([gnetlist|make[,source,source,...]]) -Import(setnewpoint[,(mark|center|X,Y)]) -Import(setdisperse,D,units) -@end format -@end cartouche - -Import schematics. -@c ./../src/action.c 6464 - -Imports element and netlist data from the schematics (or some other -source). The first parameter, which is optional, is the mode. If not -specified, the @code{import::mode} attribute in the PCB is used. -@code{gnetlist} means gnetlist is used to obtain the information from -the schematics. @code{make} invokes @code{make}, assuming the user -has a @code{Makefile} in the current directory. The @code{Makefile} -will be invoked with the following variables set: - -@table @code - -@item PCB -The name of the .pcb file - -@item SRCLIST -A space-separated list of source files - -@item OUT -The name of the file in which to put the command script, which may -contain any @pcb{} actions. By default, this is a temporary file -selected by @pcb{}, but if you specify an @code{import::outfile} -attribute, that file name is used instead (and not automatically -deleted afterwards). - -@end table - -The target specified to be built is the first of these that apply: - -@itemize @bullet - -@item -The target specified by an @code{import::target} attribute. - -@item -The output file specified by an @code{import::outfile} attribute. - -@item -If nothing else is specified, the target is @code{pcb_import}. - -@end itemize - -If you specify an @code{import::makefile} attribute, then "-f " will be added to the command line. - -If you specify the mode, you may also specify the source files -(schematics). If you do not specify any, the list of schematics is -obtained by reading the @code{import::src@var{N}} attributes (like -@code{import::src0}, @code{import::src1}, etc). - -For compatibility with future extensions to the import file format, -the generated file @emph{must not} start with the two characters -@code{#%}. - -If a temporary file is needed the @code{TMPDIR} environment variable -is used to select its location. - -Note that the programs @code{gnetlist} and @code{make} may be -overridden by the user via the @code{make-program} and @code{gnetlist} -@code{pcb} settings (i.e. in @code{~/.pcb/settings} or on the command -line). - -If @pcb{} cannot determine which schematic(s) to import from, the GUI -is called to let user choose (see @code{ImportGUI()}). - -Note that Import() doesn't delete anything - after an Import, elements -which shouldn't be on the board are selected and may be removed once -it's determined that the deletion is appropriate. - -If @code{Import()} is called with @code{setnewpoint}, then the location -of new components can be specified. This is where parts show up when -they're added to the board. The default is the center of the board. - -@table @code - -@item Import(setnewpoint) - -Prompts the user to click on the board somewhere, uses that point. If -called by a hotkey, uses the current location of the crosshair. - -@item Import(setnewpoint,mark) - -Uses the location of the mark. If no mark is present, the point is -not changed. - -@item Import(setnewpoint,center) - -Resets the point to the center of the board. - -@item Import(setnewpoint,X,Y,units) - -Sets the point to the specific coordinates given. Example: -@code{Import(setnewpoint,50,25,mm)} - -@end table - -Note that the X and Y locations are stored in attributes named -@code{import::newX} and @code{import::newY} so you could change them -manually if you wished. - -Calling @code{Import(setdisperse,D,units)} sets how much the newly -placed elements are dispersed relative to the set point. For example, -@code{Import(setdisperse,10,mm)} will offset each part randomly up to -10mm away from the point. The default dispersion is 1/10th of the -smallest board dimension. Dispersion is saved in the -@code{import::disperse} attribute. - - -@node l Action -@subsection l -@c key l in hid -@cartouche -@format -l [name]@end format -@end cartouche - -Loads layout data. -@c ./../src/command.c 99 - -Loads a new datafile (layout) and, if confirmed, overwrites any -existing unsaved data. The filename and the searchpath -(@emph{filePath}) are passed to the command defined by -@emph{fileCommand}. If no filename is specified a file select box -will popup. - -@colonaction - - -@node le Action -@subsection le -@c key le in hid -@cartouche -@format -le [name]@end format -@end cartouche - -Loads an element into the current buffer. -@c ./../src/command.c 129 - -The filename and the searchpath (@emph{elementPath}) are passed to the -command defined by @emph{elementCommand}. If no filename is specified -a file select box will popup. - -@colonaction - - -@node LoadFootprint Action -@subsection LoadFootprint -@c key LoadFootprint in hid -@cartouche -@format -LoadFootprint(filename[,refdes,value])@end format -@end cartouche - -Loads a single footprint by name. -@c ./../src/buffer.c 809 - -Loads a single footprint by name, rather than by reference or through -the library. If a refdes and value are specified, those are inserted -into the footprint as well. The footprint remains in the paste buffer. - - -@node LoadFrom Action -@subsection LoadFrom -@c key LoadFrom in hid -@cartouche -@format -LoadFrom(Layout|LayoutToBuffer|ElementToBuffer|Netlist|Revert,filename)@end format -@end cartouche - -Load layout data from a file. -@c ./../src/action.c 5031 - -This action assumes you know what the filename is. The various GUIs -should have a similar @code{Load} action where the filename is -optional, and will provide their own file selection mechanism to let -you choose the file name. - -@table @code - -@item Layout -Loads an entire PCB layout, replacing the current one. - -@item LayoutToBuffer -Loads an entire PCB layout to the paste buffer. - -@item ElementToBuffer -Loads the given element file into the paste buffer. Element files -contain only a single @code{Element} definition, such as the -``newlib'' library uses. - -@item Netlist -Loads a new netlist, replacing any current netlist. - -@item Revert -Re-loads the current layout from its disk file, reverting any changes -you may have made. - -@end table - - -@node LoadVendorFrom Action -@subsection LoadVendorFrom -@c key LoadVendorFrom in hid -@cartouche -@format -LoadVendorFrom(filename)@end format -@end cartouche - -Loads the specified vendor resource file. -@c ./../src/vendor.c 201 - -@cindex vendor map -@cindex vendor drill table -@findex LoadVendorFrom() - -@table @var -@item filename -Name of the vendor resource file. If not specified, the user will -be prompted to enter one. -@end table - - -@node m Action -@subsection m -@c key m in hid -@cartouche -@format -m [name]@end format -@end cartouche - -Loads a layout into the current buffer. -@c ./../src/command.c 157 - -The filename and the searchpath (@emph{filePath}) are passed to the -command defined by @emph{fileCommand}. -If no filename is specified a file select box will popup. - -@colonaction - - -@node MarkCrosshair Action -@subsection MarkCrosshair -@c key MarkCrosshair in hid -@cartouche -@format -MarkCrosshair() -MarkCrosshair(Center)@end format -@end cartouche - -Set/Reset the Crosshair mark. -@c ./../src/action.c 3502 - -The ``mark'' is a small X-shaped target on the display which is -treated like a second origin (the normal origin is the upper let -corner of the board). The GUI will display a second set of -coordinates for this mark, which tells you how far you are from it. - -If no argument is given, the mark is toggled - disabled if it was -enabled, or enabled at the current cursor position of disabled. If -the @code{Center} argument is given, the mark is moved to the current -cursor location. - - -@node Message Action -@subsection Message -@c key Message in hid -@cartouche -@format -Message(message)@end format -@end cartouche - -Writes a message to the log window. -@c ./../src/action.c 1886 - -This action displays a message to the log window. This action is primarily -provided for use by other programs which may interface with PCB. If -multiple arguments are given, each one is sent to the log window -followed by a newline. - - -@node MinClearGap Action -@subsection MinClearGap -@c key MinClearGap in hid -@cartouche -@format -MinClearGap(delta) -MinClearGap(Selected, delta)@end format -@end cartouche - -Ensures that polygons are a minimum distance from objects. -@c ./../src/action.c 3827 - -Checks all specified objects, and increases the polygon clearance if -needed to ensure a minimum distance between their edges and the -polygon edges. - - -@node MinMaskGap Action -@subsection MinMaskGap -@c key MinMaskGap in hid -@cartouche -@format -MinMaskGap(delta) -MinMaskGap(Selected, delta)@end format -@end cartouche - -Ensures the mask is a minimum distance from pins and pads. -@c ./../src/action.c 3752 - -Checks all specified pins and/or pads, and increases the mask if -needed to ensure a minimum distance between the pin or pad edge and -the mask edge. - - -@node Mode Action -@subsection Mode -@c key Mode in hid -@cartouche -@format -Mode(Arc|Arrow|Copy|InsertPoint|Line|Lock|Move|None|PasteBuffer) -Mode(Polygon|Rectangle|Remove|Rotate|Text|Thermal|Via) -Mode(Notify|Release|Cancel|Stroke) -Mode(Save|Restore)@end format -@end cartouche - -Change or use the tool mode. -@c ./../src/action.c 2612 - -@table @code - -@item Arc -@itemx Arrow -@itemx Copy -@itemx InsertPoint -@itemx Line -@itemx Lock -@itemx Move -@itemx None -@itemx PasteBuffer -@itemx Polygon -@itemx Rectangle -@itemx Remove -@itemx Rotate -@itemx Text -@itemx Thermal -@itemx Via -Select the indicated tool. - -@item Notify -Called when you press the mouse button, or move the mouse. - -@item Release -Called when you release the mouse button. - -@item Cancel -Cancels any pending tool activity, allowing you to restart elsewhere. -For example, this allows you to start a new line rather than attach a -line to the previous line. - -@item Escape -Similar to Cancel but calling this action a second time will return -to the Arrow tool. - -@item Stroke -If your @code{pcb} was built with libstroke, this invokes the stroke -input method. If not, this will restart a drawing mode if you were -drawing, else it will select objects. - -@item Save -Remembers the current tool. - -@item Restore -Restores the tool to the last saved tool. - -@end table - - -@node MorphPolygon Action -@subsection MorphPolygon -@c key MorphPolygon in hid -@cartouche -@format -MorphPolygon(Object|Selected)@end format -@end cartouche - -Converts dead polygon islands into separate polygons. -@c ./../src/action.c 4087 - -If a polygon is divided into unconnected "islands", you can use -this command to convert the otherwise disappeared islands into -separate polygons. Be sure the cursor is over a portion of the -polygon that remains visible. Very small islands that may flake -off are automatically deleted. - - -@node MoveLayer Action -@subsection MoveLayer -@c key MoveLayer in hid -@cartouche -@format -MoveLayer(old,new)@end format -@end cartouche - -Moves/Creates/Deletes Layers. -@c ./../src/move.c 1091 - -Moves a layer, creates a new layer, or deletes a layer. - -@table @code - -@item old -The is the layer number to act upon. Allowed values are: -@table @code - -@item c -Currently selected layer. - -@item -1 -Create a new layer. - -@item number -An existing layer number. - -@end table - -@item new -Specifies where to move the layer to. Allowed values are: -@table @code -@item -1 -Deletes the layer. - -@item up -Moves the layer up. - -@item down -Moves the layer down. - -@item c -Creates a new layer. - -@end table - -@end table - - -@node MoveObject Action -@subsection MoveObject -@c key MoveObject in hid -@cartouche -@format -MoveObject(X,Y,dim)@end format -@end cartouche - -Moves the object under the crosshair. -@c ./../src/action.c 5567 - -The @code{X} and @code{Y} are treated like @code{delta} is for many -other objects. For each, if it's prefixed by @code{+} or @code{-}, -then that amount is relative. Otherwise, it's absolute. Units can be -@code{mil} or @code{mm}; if unspecified, units are PCB's internal -units, currently 1/100 mil. - - -@node MoveToCurrentLayer Action -@subsection MoveToCurrentLayer -@c key MoveToCurrentLayer in hid -@cartouche -@format -MoveToCurrentLayer(Object|SelectedObjects)@end format -@end cartouche - -Moves objects to the current layer. -@c ./../src/action.c 5609 - -Note that moving an element from a component layer to a solder layer, -or from solder to component, won't automatically flip it. Use the -@code{Flip()} action to do that. - - -@node Netlist Action -@subsection Netlist -@c key Netlist in hid -@cartouche -@format -Net(find|select|rats|norats|clear[,net[,pin]]) -Net(freeze|thaw|forcethaw) -Net(add,net,pin)@end format -@end cartouche - -Perform various actions on netlists. -@c ./../src/netlist.c 289 - -Each of these actions apply to a specified set of nets. @var{net} and -@var{pin} are patterns which match one or more nets or pins; these -patterns may be full names or regular expressions. If an exact match -is found, it is the only match; if no exact match is found, -@emph{then} the pattern is tried as a regular expression. - -If neither @var{net} nor @var{pin} are specified, all nets apply. If -@var{net} is specified but not @var{pin}, all nets matching @var{net} -apply. If both are specified, nets which match @var{net} and contain -a pin matching @var{pin} apply. - -@table @code - -@item find -Nets which apply are marked @emph{found} and are drawn in the -@code{connected-color} color. - -@item select -Nets which apply are selected. - -@item rats -Nets which apply are marked as available for the rats nest. - -@item norats -Nets which apply are marked as not available for the rats nest. - -@item clear -Clears the netlist. - -@item add -Add the given pin to the given netlist, creating either if needed. - -@item sort -Called after a list of add's, this sorts the netlist. - -@item freeze -@itemx thaw -@itemx forcethaw -Temporarily prevents changes to the netlist from being reflected in -the GUI. For example, if you need to make multiple changes, you -freeze the netlist, make the changes, then thaw it. Note that -freeze/thaw requests may nest, with the netlist being fully thawed -only when all pending freezes are thawed. You can bypass the nesting -by using forcethaw, which resets the freeze count and immediately -updates the GUI. - -@end table - - -@node New Action -@subsection New -@c key New in hid -@cartouche -@format -New([name])@end format -@end cartouche - -Starts a new layout. -@c ./../src/action.c 5093 - -If a name is not given, one is prompted for. - - -@node OptAutoOnly Action -@subsection OptAutoOnly -@c key OptAutoOnly in hid -@cartouche -@format -OptAutoOnly()@end format -@end cartouche - -Toggles the optimize-only-autorouted flag. -@c ./../src/djopt.c 129 - -The original purpose of the trace optimizer was to clean up the traces -created by the various autorouters that have been used with PCB. When -a board has a mix of autorouted and carefully hand-routed traces, you -don't normally want the optimizer to move your hand-routed traces. -But, sometimes you do. By default, the optimizer only optimizes -autorouted traces. This action toggles that setting, so that you can -optimize hand-routed traces also. - - -@node PasteBuffer Action -@subsection PasteBuffer -@c key PasteBuffer in hid -@cartouche -@format -PasteBuffer(AddSelected|Clear|1..MAX_BUFFER) -PasteBuffer(Rotate, 1..3) -PasteBuffer(Convert|Save|Restore|Mirror) -PasteBuffer(ToLayout, X, Y, units)@end format -@end cartouche - -Various operations on the paste buffer. -@c ./../src/action.c 5153 - -There are a number of paste buffers; the actual limit is a -compile-time constant @code{MAX_BUFFER} in @file{globalconst.h}. It -is currently @code{5}. One of these is the ``current'' paste buffer, -often referred to as ``the'' paste buffer. - -@table @code - -@item AddSelected -Copies the selected objects to the current paste buffer. - -@item Clear -Remove all objects from the current paste buffer. - -@item Convert -Convert the current paste buffer to an element. Vias are converted to -pins, lines are converted to pads. - -@item Restore -Convert any elements in the paste buffer back to vias and lines. - -@item Mirror -Flip all objects in the paste buffer vertically (up/down flip). To mirror -horizontally, combine this with rotations. - -@item Rotate -Rotates the current buffer. The number to pass is 1..3, where 1 means -90 degrees counter clockwise, 2 means 180 degrees, and 3 means 90 -degrees clockwise (270 CCW). - -@item Save -Saves any elements in the current buffer to the indicated file. - -@item ToLayout -Pastes any elements in the current buffer to the indicated X, Y -coordinates in the layout. The @code{X} and @code{Y} are treated like -@code{delta} is for many other objects. For each, if it's prefixed by -@code{+} or @code{-}, then that amount is relative to the last -location. Otherwise, it's absolute. Units can be -@code{mil} or @code{mm}; if unspecified, units are PCB's internal -units, currently 1/100 mil. - - -@item 1..MAX_BUFFER -Selects the given buffer to be the current paste buffer. - -@end table - - -@node Polygon Action -@subsection Polygon -@c key Polygon in hid -@cartouche -@format -Polygon(Close|PreviousPoint)@end format -@end cartouche - -Some polygon related stuff. -@c ./../src/action.c 5503 - -Polygons need a special action routine to make life easier. - -@table @code - -@item Close -Creates the final segment of the polygon. This may fail if clipping -to 45 degree lines is switched on, in which case a warning is issued. - -@item PreviousPoint -Resets the newly entered corner to the previous one. The Undo action -will call Polygon(PreviousPoint) when appropriate to do so. - -@end table - - -@node Puller Action -@subsection Puller -@c key Puller in hid -@cartouche -@format -Puller()@end format -@end cartouche - -Pull an arc-line junction tight. -@c ./../src/puller.c 411 - -The @code{Puller()} action is a special-purpose optimization. When -invoked while the crosshair is over the junction of an arc and a line, -it will adjust the arc's angle and the connecting line's endpoint such -that the line intersects the arc at a tangent. In the example below, -the left side is ``before'' with the black target marking where to put -the crosshair: - -@center @image{puller,,,Example of how puller works,png} - -The right side is ``after'' with the black target marking where the -arc-line intersection was moved to. - - -@node q Action -@subsection q -@c key q in hid -@cartouche -@format -q@end format -@end cartouche - -Quits the application after confirming. -@c ./../src/command.c 185 - -If you have unsaved changes, you will be prompted to confirm (or -save) before quitting. - -@colonaction - - -@node q! Action -@subsection q! -@c key q! in hid -@cartouche -@format -q!@end format -@end cartouche - -Quits the application without confirming. -@c ./../src/command.c 199 - -Note that this command neither saves your data nor prompts for -confirmation. - -@colonaction - - -@node Quit Action -@subsection Quit -@c key Quit in hid -@cartouche -@format -Quit()@end format -@end cartouche - -Quits the application after confirming. -@c ./../src/action.c 2071 - -If you have unsaved changes, you will be prompted to confirm (or -save) before quitting. - - -@node Redo Action -@subsection Redo -@c key Redo in hid -@cartouche -@format -Redo()@end format -@end cartouche - -Redo recent``undo''operations. -@c ./../src/action.c 5468 - -This routine allows you to recover from the last undo command. You -might want to do this if you thought that undo was going to revert -something other than what it actually did (in case you are confused -about which operations are un-doable), or if you have been backing up -through a long undo list and over-shoot your stopping point. Any -change that is made since the undo in question will trim the redo -list. For example if you add ten lines, then undo three of them you -could use redo to put them back, but if you move a line on the board -before performing the redo, you will lose the ability to "redo" the -three "undone" lines. - - -@node RemoveSelected Action -@subsection RemoveSelected -@c key RemoveSelected in hid -@cartouche -@format -RemoveSelected()@end format -@end cartouche - -Removes any selected objects. -@c ./../src/action.c 2832 - - -@node Renumber Action -@subsection Renumber -@c key Renumber in hid -@cartouche -@format -Renumber() -Renumber(filename)@end format -@end cartouche - -Renumber all elements. The changes will be recorded to filename -for use in backannotating these changes to the schematic. -@c ./../src/action.c 2848 - - -@node Report Action -@subsection Report -@c key Report in hid -@cartouche -@format -Report(Object|DrillReport|FoundPins|NetLength|AllNetLengths|[,name])@end format -@end cartouche - -Produce various report. -@c ./../src/report.c 942 - -@table @code - -@item Object -The object under the crosshair will be reported, describing various -aspects of the object. - -@item DrillReport -A report summarizing the number of drill sizes used, and how many of -each, will be produced. - -@item FoundPins -A report listing all pins and pads which are marked as ``found'' will -be produced. - -@item NetLength -The name and length of the net under the crosshair will be reported to -the message log. - -@item AllNetLengths -The name and length of the net under the crosshair will be reported to -the message log. An optional parameter specifies mm, mil, pcb, or in -units - -@end table - - -@node ReportDialog Action -@subsection ReportDialog -@c key ReportDialog in hid -@cartouche -@format -ReportDialog()@end format -@end cartouche - -Report on the object under the crosshair -@c ./../src/report.c 125 - -This is a shortcut for @code{Report(Object)}. - - -@node RipUp Action -@subsection RipUp -@c key RipUp in hid -@cartouche -@format -RipUp(All|Selected|Element)@end format -@end cartouche - -Ripup auto-routed tracks, or convert an element to parts. -@c ./../src/action.c 3199 - -@table @code - -@item All -Removes all lines and vias which were created by the autorouter. - -@item Selected -Removes all selected lines and vias which were created by the -autorouter. - -@item Element -Converts the element under the cursor to parts (vias and lines). Note -that this uses the highest numbered paste buffer. - -@end table - - -@node rn Action -@subsection rn -@c key rn in hid -@cartouche -@format -rn [name]@end format -@end cartouche - -Reads netlist. -@c ./../src/command.c 214 - -If no filename is given a file select box will pop up. The file is -read via the command defined by the @emph{RatCommand} resource. The -command must send its output to @emph{stdout}. - -Netlists are used for generating rat's nests (see @ref{Rats Nest}) and -for verifying the board layout (which is also accomplished by the -@emph{Ratsnest} command). - -@colonaction - - -@node RouteStyle Action -@subsection RouteStyle -@c key RouteStyle in hid -@cartouche -@format -RouteStyle(1|2|3|4)@end format -@end cartouche - -Copies the indicated routing style into the current sizes. -@c ./../src/action.c 5535 - - -@node s Action -@subsection s -@c key s in hid -@cartouche -@format -s [name]@end format -@end cartouche - -Saves layout data. -@c ./../src/command.c 244 - -Data and the filename are passed to the command defined by the -resource @emph{saveCommand}. It must read the layout data from -@emph{stdin}. If no filename is entered, either the last one is used -again or, if it is not available, a file select box will pop up. - -@colonaction - - -@node SaveSettings Action -@subsection SaveSettings -@c key SaveSettings in hid -@cartouche -@format -SaveSettings() -SaveSettings(local)@end format -@end cartouche - -Saves settings. -@c ./../src/action.c 5015 - -If you pass no arguments, the settings are stored in -@code{$HOME/.pcb/settings}. If you pass the word @code{local} they're -saved in @code{./pcb.settings}. - - -@node SaveTo Action -@subsection SaveTo -@c key SaveTo in hid -@cartouche -@format -SaveTo(Layout|LayoutAs,filename) -SaveTo(AllConnections|AllUnusedPins|ElementConnections,filename) -SaveTo(PasteBuffer,filename)@end format -@end cartouche - -Saves data to a file. -@c ./../src/action.c 4919 - -@table @code - -@item Layout -Saves the current layout. - -@item LayoutAs -Saves the current layout, and remembers the filename used. - -@item AllConnections -Save all connections to a file. - -@item AllUnusedPins -List all unused pins to a file. - -@item ElementConnections -Save connections to the element at the cursor to a file. - -@item PasteBuffer -Save the content of the active Buffer to a file. This is the graphical way to create a footprint. - -@end table - - -@node Select Action -@subsection Select -@c key Select in hid -@cartouche -@format -Select(Object|ToggleObject) -Select(All|Block|Connection) -Select(ElementByName|ObjectByName|PadByName|PinByName) -Select(ElementByName|ObjectByName|PadByName|PinByName, Name) -Select(TextByName|ViaByName|NetByName) -Select(TextByName|ViaByName|NetByName, Name) -Select(Convert)@end format -@end cartouche - -Toggles or sets the selection. -@c ./../src/action.c 4651 - -@table @code - -@item ElementByName -@item ObjectByName -@item PadByName -@item PinByName -@item TextByName -@item ViaByName -@item NetByName - -These all rely on having a regular expression parser built into -@code{pcb}. If the name is not specified then the user is prompted -for a pattern, and all objects that match the pattern and are of the -type specified are selected. - -@item Object -@item ToggleObject -Selects the object under the cursor. - -@item Block -Selects all objects in a rectangle indicated by the cursor. - -@item All -Selects all objects on the board. - -@item Connection -Selects all connections with the ``found'' flag set. - -@item Convert -Converts the selected objects to an element. This uses the highest -numbered paste buffer. - -@end table - - -@node SetFlag Action -@subsection SetFlag -@c key SetFlag in hid -@cartouche -@format -SetFlag(Object|Selected|SelectedObjects, flag) -SetFlag(SelectedLines|SelectedPins|SelectedVias, flag) -SetFlag(SelectedPads|SelectedTexts|SelectedNames, flag) -SetFlag(SelectedElements, flag) -flag = square | octagon | thermal | join@end format -@end cartouche - -Sets flags on objects. -@c ./../src/action.c 5716 - -Turns the given flag on, regardless of its previous setting. See -@code{ChangeFlag}. - -@example -SetFlag(SelectedPins,thermal) -@end example - - -@node SetOctagon Action -@subsection SetOctagon -@c key SetOctagon in hid -@cartouche -@format -SetOctagon(Object|ToggleObject|SelectedElements|Selected)@end format -@end cartouche - -Sets the octagon-flag of objects. -@c ./../src/action.c 4459 - -@pinshapes - - -@node SetSame Action -@subsection SetSame -@c key SetSame in hid -@cartouche -@format -SetSame()@end format -@end cartouche - -Sets current layer and sizes to match indicated item. -@c ./../src/action.c 5648 - -When invoked over any line, arc, polygon, or via, this changes the -current layer to be the layer that item is on, and changes the current -sizes (thickness, keepaway, drill, etc) according to that item. - - -@node SetSquare Action -@subsection SetSquare -@c key SetSquare in hid -@cartouche -@format -SetSquare(ToggleObject|SelectedElements|SelectedPins)@end format -@end cartouche - -sets the square-flag of objects. -@c ./../src/action.c 4301 - -Note that @code{Pins} means pins and pads. - -@pinshapes - - -@node SetThermal Action -@subsection SetThermal -@c key SetThermal in hid -@cartouche -@format -SetThermal(Object|SelectedPins|SelectedVias|Selected, Style)@end format -@end cartouche - -Set the thermal (on the current layer) of pins or vias to the given style. -Style = 0 means no thermal. -Style = 1 has diagonal fingers with sharp edges. -Style = 2 has horizontal and vertical fingers with sharp edges. -Style = 3 is a solid connection to the plane.Style = 4 has diagonal fingers with rounded edges. -Style = 5 has horizontal and vertical fingers with rounded edges. - -@c ./../src/action.c 1912 - -This changes how/whether pins or vias connect to any rectangle or polygon -on the current layer. The first argument can specify one object, or all -selected pins, or all selected vias, or all selected pins and vias. -The second argument specifies the style of connection. -There are 5 possibilities: -0 - no connection, -1 - 45 degree fingers with sharp edges, -2 - horizontal & vertical fingers with sharp edges, -3 - solid connection, -4 - 45 degree fingers with rounded corners, -5 - horizontal & vertical fingers with rounded corners. - -Pins and Vias may have thermals whether or not there is a polygon available -to connect with. However, they will have no effect without the polygon. - -@node SetValue Action -@subsection SetValue -@c key SetValue in hid -@cartouche -@format -SetValue(Grid|Line|LineSize|Text|TextScale|ViaDrillingHole|Via|ViaSize, delta)@end format -@end cartouche - -Change various board-wide values and sizes. -@c ./../src/action.c 1996 - -@table @code - -@item ViaDrillingHole -Changes the diameter of the drill for new vias. - -@item Grid -Sets the grid spacing. - -@item Line -@item LineSize -Changes the thickness of new lines. - -@item Via -@item ViaSize -Changes the diameter of new vias. - -@item Text -@item TextScale -Changes the size of new text. - -@end table - - -@node ToggleHideName Action -@subsection ToggleHideName -@c key ToggleHideName in hid -@cartouche -@format -ToggleHideName(Object|SelectedElements)@end format -@end cartouche - -Toggles the visibility of element names. -@c ./../src/action.c 4134 - -If names are hidden you won't see them on the screen and they will not -appear on the silk layer when you print the layout. - - -@node ToggleVendor Action -@subsection ToggleVendor -@c key ToggleVendor in hid -@cartouche -@format -ToggleVendor()@end format -@end cartouche - -Toggles the state of automatic drill size mapping. -@c ./../src/vendor.c 128 - -@cindex vendor map -@cindex vendor drill table -@findex ToggleVendor() - -When drill mapping is enabled, new instances of pins and vias will -have their drill holes mapped to one of the allowed drill sizes -specified in the currently loaded vendor drill table. To enable drill -mapping, a vendor resource file containing a drill table must be -loaded first. - - -@node Undo Action -@subsection Undo -@c key Undo in hid -@cartouche -@format -Undo() -Undo(ClearList)@end format -@end cartouche - -Undo recent changes. -@c ./../src/action.c 5304 - -The unlimited undo feature of @code{Pcb} allows you to recover from -most operations that materially affect you work. Calling -@code{Undo()} without any parameter recovers from the last (non-undo) -operation. @code{ClearList} is used to release the allocated -memory. @code{ClearList} is called whenever a new layout is started or -loaded. See also @code{Redo} and @code{Atomic}. - -Note that undo groups operations by serial number; changes with the -same serial number will be undone (or redone) as a group. See -@code{Atomic}. - - -@node UnloadVendor Action -@subsection UnloadVendor -@c key UnloadVendor in hid -@cartouche -@format -UnloadVendor()@end format -@end cartouche - -Unloads the current vendor drill mapping table. -@c ./../src/vendor.c 176 - -@cindex vendor map -@cindex vendor drill table -@findex UnloadVendor() - - -@node Unselect Action -@subsection Unselect -@c key Unselect in hid -@cartouche -@format -Unselect(All|Block|Connection) -Unselect(ElementByName|ObjectByName|PadByName|PinByName) -Unselect(ElementByName|ObjectByName|PadByName|PinByName, Name) -Unselect(TextByName|ViaByName) -Unselect(TextByName|ViaByName, Name) -@end format -@end cartouche - -Unselects the object at the pointer location or the specified objects. -@c ./../src/action.c 4803 - -@table @code - -@item All -Unselect all objects. - -@item Block -Unselect all objects in a rectangle given by the cursor. - -@item Connection -Unselect all connections with the ``found'' flag set. - -@item ElementByName -@item ObjectByName -@item PadByName -@item PinByName -@item TextByName -@item ViaByName - -These all rely on having a regular expression parser built into -@code{pcb}. If the name is not specified then the user is prompted -for a pattern, and all objects that match the pattern and are of the -type specified are unselected. - - -@end table - - -@node w Action -@subsection w -@c key w in hid -@cartouche -@format -w [name]@end format -@end cartouche - -Saves layout data. -@c ./../src/command.c 250 - -This commands has been added for the convenience of @code{vi} users -and has the same functionality as @code{s}. - -@colonaction - - -@node wq Action -@subsection wq -@c key wq in hid -@cartouche -@format -wq@end format -@end cartouche - -Saves the layout data and quits. -@c ./../src/command.c 291 - -This command has been added for the convenience of @code{vi} users and -has the same functionality as @code{s} combined with @code{q}. - -@colonaction - - -@node common actions -@section common actions -@c ./../src/hid/common/actions.c 425 - -@macro hidaction - -This is one of a number of actions which are part of the HID -interface. The core functions use these actions to tell the current -GUI when to change the presented information in response to changes -that the GUI may not know about. The user normally does not invoke -these directly. - -@end macro - -@menu -* LayersChanged Action:: Tells the GUI that the layers have changed. -* LibraryChanged Action:: Tells the GUI that the libraries have changed. -* NetlistChanged Action:: Tells the GUI that the netlist has changed. -* PCBChanged Action:: Tells the GUI that the whole PCB has changed. The optional``revert"parameter can be used as a hint to the GUI that the same design is beingreloaded, and that it might keep some viewport settings -* RouteStylesChanged Action:: Tells the GUI that the routing styles have changed. -@end menu -@node LayersChanged Action -@subsection LayersChanged -@c key LayersChanged in hid common -@cartouche -@format -LayersChanged()@end format -@end cartouche - -Tells the GUI that the layers have changed. -@c ./../src/hid/common/actions.c 446 - -This includes layer names, colors, stacking order, visibility, etc. - -@hidaction - - -@node LibraryChanged Action -@subsection LibraryChanged -@c key LibraryChanged in hid common -@cartouche -@format -LibraryChanged()@end format -@end cartouche - -Tells the GUI that the libraries have changed. -@c ./../src/hid/common/actions.c 451 - -@hidaction - - -@node NetlistChanged Action -@subsection NetlistChanged -@c key NetlistChanged in hid common -@cartouche -@format -NetlistChanged()@end format -@end cartouche - -Tells the GUI that the netlist has changed. -@c ./../src/hid/common/actions.c 441 - -@hidaction - - -@node PCBChanged Action -@subsection PCBChanged -@c key PCBChanged in hid common -@cartouche -@format -PCBChanged([revert])@end format -@end cartouche - -Tells the GUI that the whole PCB has changed. The optional``revert"parameter can be used as a hint to the GUI that the same design is beingreloaded, and that it might keep some viewport settings -@c ./../src/hid/common/actions.c 431 - -@hidaction - - -@node RouteStylesChanged Action -@subsection RouteStylesChanged -@c key RouteStylesChanged in hid common -@cartouche -@format -RouteStylesChanged()@end format -@end cartouche - -Tells the GUI that the routing styles have changed. -@c ./../src/hid/common/actions.c 436 - -@hidaction - - -@node gtk actions -@section gtk actions -@menu -* gtk About Action:: N_("Tell the user about this version of PCB."); -* gtk AdjustStyle Action:: Open the window which allows editing of the route styles. -* gtk Center Action:: N_("Moves the pointer to the center of the window."); -* gtk Cursor Action:: N_("Move the cursor."); -* gtk DoWindows Action:: N_("Open various GUI windows."); -* gtk EditLayerGroups Action:: Open the preferences window which allows editing of the layer groups. -* gtk GetXY Action:: N_("Get a coordinate."); -* gtk ImportGUI Action:: N_("Asks user which schematics to import into PCB. -"); -* gtk Pan Action:: N_("Start or stop panning (Mode = 1 to start, 0 to stop) -Optional thumb argument is ignored for now in gtk hid. -"); -* gtk Popup Action:: N_("Bring up the popup menu specified by @code{MenuName}. -If called by a mouse event then the mouse button number -must be specified as the optional second argument."); -* gtk Print Action:: N_("Print the layout."); -* gtk PrintCalibrate Action:: N_("Calibrate the printer."); -* gtk Save Action:: N_("Save layout and/or element data to a user-selected file."); -* gtk SelectLayer Action:: Select which layer is the current layer. -* gtk SetUnits Action:: N_("Set the default measurement units."); -* gtk SwapSides Action:: N_("Swaps the side of the board you're looking at."); -* gtk ToggleView Action:: Toggle the visibility of the specified layer or layer group. -* gtk Zoom Action:: N_("Various zoom factor changes."); -@end menu -@node gtk About Action -@subsection gtk About -@c key gtk About in hid gtk -@cartouche -@format -About()@end format -@end cartouche - -N_("Tell the user about this version of PCB."); -@c ./../src/hid/gtk/gtkhid-main.c 1059 - -This just pops up a dialog telling the user which version of -@code{pcb} they're running. - - -@node gtk AdjustStyle Action -@subsection gtk AdjustStyle -@c key gtk AdjustStyle in hid gtk -@cartouche -@format -AdjustStyle() -@end format -@end cartouche - -Open the window which allows editing of the route styles. -@c ./../src/hid/gtk/gui-top-window.c 2081 - -Opens the window which allows editing of the route styles. - - -@node gtk Center Action -@subsection gtk Center -@c key gtk Center in hid gtk -@cartouche -@format -Center() -@end format -@end cartouche - -N_("Moves the pointer to the center of the window."); -@c ./../src/hid/gtk/gtkhid-main.c 1470 - -Move the pointer to the center of the window, but only if it's -currently within the window already. - - -@node gtk Cursor Action -@subsection gtk Cursor -@c key gtk Cursor in hid gtk -@cartouche -@format -Cursor(Type,DeltaUp,DeltaRight,Units)@end format -@end cartouche - -N_("Move the cursor."); -@c ./../src/hid/gtk/gtkhid-main.c 1515 - -This action moves the mouse cursor. Unlike other actions which take -coordinates, this action's coordinates are always relative to the -user's view of the board. Thus, a positive @var{DeltaUp} may move the -cursor towards the board origin if the board is inverted. - -Type is one of @samp{Pan} or @samp{Warp}. @samp{Pan} causes the -viewport to move such that the crosshair is under the mouse cursor. -@samp{Warp} causes the mouse cursor to move to be above the crosshair. - -@var{Units} can be one of the following: - -@table @samp - -@item mil -@itemx mm -The cursor is moved by that amount, in board units. - -@item grid -The cursor is moved by that many grid points. - -@item view -The values are percentages of the viewport's view. Thus, a pan of -@samp{100} would scroll the viewport by exactly the width of the -current view. - -@item board -The values are percentages of the board size. Thus, a move of -@samp{50,50} moves you halfway across the board. - -@end table - - -@node gtk DoWindows Action -@subsection gtk DoWindows -@c key gtk DoWindows in hid gtk -@cartouche -@format -DoWindows(1|2|3|4|5|6) -DoWindows(Layout|Library|Log|Netlist|Preferences|DRC)@end format -@end cartouche - -N_("Open various GUI windows."); -@c ./../src/hid/gtk/gtkhid-main.c 1563 - -@table @code - -@item 1 -@itemx Layout -Open the layout window. Since the layout window is always shown -anyway, this has no effect. - -@item 2 -@itemx Library -Open the library window. - -@item 3 -@itemx Log -Open the log window. - -@item 4 -@itemx Netlist -Open the netlist window. - -@item 5 -@itemx Preferences -Open the preferences window. - -@item 6 -@itemx DRC -Open the DRC violations window. - -@end table - - -@node gtk EditLayerGroups Action -@subsection gtk EditLayerGroups -@c key gtk EditLayerGroups in hid gtk -@cartouche -@format -EditLayerGroups() -@end format -@end cartouche - -Open the preferences window which allows editing of the layer groups. -@c ./../src/hid/gtk/gui-top-window.c 2100 - -Opens the preferences window which is where the layer groups -are edited. This action is primarily provides to provide menu -resource compatibility with the lesstif HID. - - -@node gtk GetXY Action -@subsection gtk GetXY -@c key gtk GetXY in hid gtk -@cartouche -@format -GetXY()@end format -@end cartouche - -N_("Get a coordinate."); -@c ./../src/hid/gtk/gtkhid-main.c 1074 - -Prompts the user for a coordinate, if one is not already selected. - - -@node gtk ImportGUI Action -@subsection gtk ImportGUI -@c key gtk ImportGUI in hid gtk -@cartouche -@format -ImportGUI()@end format -@end cartouche - -N_("Asks user which schematics to import into PCB. -"); -@c ./../src/hid/gtk/gtkhid-main.c 1750 - -Asks user which schematics to import into PCB. - - -@node gtk Pan Action -@subsection gtk Pan -@c key gtk Pan in hid gtk -@cartouche -@format -Pan([thumb], Mode)@end format -@end cartouche - -N_("Start or stop panning (Mode = 1 to start, 0 to stop) -Optional thumb argument is ignored for now in gtk hid. -"); -@c ./../src/hid/gtk/gtkhid-main.c 1687 - -Start or stop panning. To start call with Mode = 1, to stop call with -Mode = 0. - - -@node gtk Popup Action -@subsection gtk Popup -@c key gtk Popup in hid gtk -@cartouche -@format -Popup(MenuName, [Button])@end format -@end cartouche - -N_("Bring up the popup menu specified by @code{MenuName}. -If called by a mouse event then the mouse button number -must be specified as the optional second argument."); -@c ./../src/hid/gtk/gtkhid-main.c 1719 - -This just pops up the specified menu. The menu must have been defined -as a named subresource of the Popups resource in the menu resource -file. - - -@node gtk Print Action -@subsection gtk Print -@c key gtk Print in hid gtk -@cartouche -@format -Print()@end format -@end cartouche - -N_("Print the layout."); -@c ./../src/hid/gtk/gtkhid-main.c 1350 - -This will find the default printing HID, prompt the user for its -options, and print the layout. - - -@node gtk PrintCalibrate Action -@subsection gtk PrintCalibrate -@c key gtk PrintCalibrate in hid gtk -@cartouche -@format -PrintCalibrate()@end format -@end cartouche - -N_("Calibrate the printer."); -@c ./../src/hid/gtk/gtkhid-main.c 1401 - -This will print a calibration page, which you would measure and type -the measurements in, so that future printouts will be more precise. - - -@node gtk Save Action -@subsection gtk Save -@c key gtk Save in hid gtk -@cartouche -@format -Save() -Save(Layout|LayoutAs) -Save(AllConnections|AllUnusedPins|ElementConnections) -Save(PasteBuffer)@end format -@end cartouche - -N_("Save layout and/or element data to a user-selected file."); -@c ./../src/hid/gtk/gtkhid-main.c 1230 - -This action is a GUI front-end to the core's @code{SaveTo} action -(@pxref{SaveTo Action}). If you happen to pass a filename, like -@code{SaveTo}, then @code{SaveTo} is called directly. Else, the -user is prompted for a filename to save, and then @code{SaveTo} is -called with that filename. - - -@node gtk SelectLayer Action -@subsection gtk SelectLayer -@c key gtk SelectLayer in hid gtk -@cartouche -@format -SelectLayer(1..MAXLAYER|Silk|Rats)@end format -@end cartouche - -Select which layer is the current layer. -@c ./../src/hid/gtk/gui-top-window.c 1851 - -The specified layer becomes the currently active layer. It is made -visible if it is not already visible - - -@node gtk SetUnits Action -@subsection gtk SetUnits -@c key gtk SetUnits in hid gtk -@cartouche -@format -SetUnits(mm|mil)@end format -@end cartouche - -N_("Set the default measurement units."); -@c ./../src/hid/gtk/gtkhid-main.c 1606 - -@table @code - -@item mil -Sets the display units to mils (1/1000 inch). - -@item mm -Sets the display units to millimeters. - -@end table - - -@node gtk SwapSides Action -@subsection gtk SwapSides -@c key gtk SwapSides in hid gtk -@cartouche -@format -SwapSides(|v|h|r)@end format -@end cartouche - -N_("Swaps the side of the board you're looking at."); -@c ./../src/hid/gtk/gtkhid-main.c 1295 - -This action changes the way you view the board. - -@table @code - -@item v -Flips the board over vertically (up/down). - -@item h -Flips the board over horizontally (left/right), like flipping pages in -a book. - -@item r -Rotates the board 180 degrees without changing sides. - -@end table - -If no argument is given, the board isn't moved but the opposite side -is shown. - -Normally, this action changes which pads and silk layer are drawn as -true silk, and which are drawn as the "invisible" layer. It also -determines which solder mask you see. - -As a special case, if the layer group for the side you're looking at -is visible and currently active, and the layer group for the opposite -is not visible (i.e. disabled), then this action will also swap which -layer group is visible and active, effectively swapping the ``working -side'' of the board. - - -@node gtk ToggleView Action -@subsection gtk ToggleView -@c key gtk ToggleView in hid gtk -@cartouche -@format -ToggleView(1..MAXLAYER) -ToggleView(layername) -ToggleView(Silk|Rats|Pins|Vias|Mask|BackSide)@end format -@end cartouche - -Toggle the visibility of the specified layer or layer group. -@c ./../src/hid/gtk/gui-top-window.c 1792 - -If you pass an integer, that layer is specified by index (the first -layer is @code{1}, etc). If you pass a layer name, that layer is -specified by name. When a layer is specified, the visibility of the -layer group containing that layer is toggled. - -If you pass a special layer name, the visibility of those components -(silk, rats, etc) is toggled. Note that if you have a layer named -the same as a special layer, the layer is chosen over the special layer. - - -@node gtk Zoom Action -@subsection gtk Zoom -@c key gtk Zoom in hid gtk -@cartouche -@format -Zoom() -Zoom(factor)@end format -@end cartouche - -N_("Various zoom factor changes."); -@c ./../src/hid/gtk/gtkhid-main.c 161 -Changes the zoom (magnification) of the view of the board. If no -arguments are passed, the view is scaled such that the board just fits -inside the visible window (i.e. ``view all''). Otherwise, -@var{factor} specifies a change in zoom factor. It may be prefixed by -@code{+}, @code{-}, or @code{=} to change how the zoom factor is -modified. The @var{factor} is a floating point number, such as -@code{1.5} or @code{0.75}. - -@table @code - -@item +@var{factor} -Values greater than 1.0 cause the board to be drawn smaller; more of -the board will be visible. Values between 0.0 and 1.0 cause the board -to be drawn bigger; less of the board will be visible. - -@item -@var{factor} -Values greater than 1.0 cause the board to be drawn bigger; less of -the board will be visible. Values between 0.0 and 1.0 cause the board -to be drawn smaller; more of the board will be visible. - -@item =@var{factor} - -The @var{factor} is an absolute zoom factor; the unit for this value -is "PCB units per screen pixel". Since PCB units are 0.01 mil, a -@var{factor} of 1000 means 10 mils (0.01 in) per pixel, or 100 DPI, -about the actual resolution of most screens - resulting in an "actual -size" board. Similarly, a @var{factor} of 100 gives you a 10x actual -size. - -@end table - -Note that zoom factors of zero are silently ignored. - - - - -@node lesstif actions -@section lesstif actions -@menu -* lesstif About Action:: Tell the user about this version of PCB. -* lesstif AdjustSizes Action:: Let the user change the board size, DRC parameters, etc -* lesstif AdjustStyle Action:: Displays the route style adjustment window. -* lesstif Benchmark Action:: Benchmark the GUI speed. -* lesstif Command Action:: Displays the command line input window. -* lesstif Cursor Action:: Move the cursor. -* lesstif Debug Action:: Debug action. -* lesstif DebugXY Action:: Debug action, with coordinates -* lesstif DoWindows Action:: Open various GUI windows. -* lesstif DumpKeys Action:: Dump Lesstif key bindings. -* lesstif EditLayerGroups Action:: Let the user change the layer groupings -* lesstif Export Action:: Export the layout. -* lesstif GetXY Action:: Get a coordinate. -* lesstif ImportGUI Action:: Lets the user choose the schematics to import from -* lesstif LibraryShow Action:: Displays the library window. -* lesstif Load Action:: Load layout data from a user-selected file. -* lesstif LoadVendor Action:: Loads a user-selected vendor resource file. -* lesstif NetlistShow Action:: Selects the given pinname or netname in the netlist window. -* lesstif Print Action:: Print the layout. -* lesstif PrintCalibrate Action:: Calibrate the printer. -* lesstif PromptFor Action:: Prompt for a response. -* lesstif Return Action:: Simulate a passing or failing action. -* lesstif Save Action:: Save layout data to a user-selected file. -* lesstif SelectLayer Action:: Select which layer is the current layer. -* lesstif SetUnits Action:: Set the default measurement units. -* lesstif SwapSides Action:: Swaps the side of the board you're looking at. -* lesstif ToggleView Action:: Toggle the visibility of the specified layer or layer group. -* lesstif Zoom Action:: Various zoom factor changes. -@end menu -@node lesstif About Action -@subsection lesstif About -@c key lesstif About in hid lesstif -@cartouche -@format -About()@end format -@end cartouche - -Tell the user about this version of PCB. -@c ./../src/hid/lesstif/dialogs.c 867 - -This just pops up a dialog telling the user which version of -@code{pcb} they're running. - - -@node lesstif AdjustSizes Action -@subsection lesstif AdjustSizes -@c key lesstif AdjustSizes in hid lesstif -@cartouche -@format -AdjustSizes()@end format -@end cartouche - -Let the user change the board size, DRC parameters, etc -@c ./../src/hid/lesstif/dialogs.c 1136 - -Displays a dialog box that lets the user change the board -size, DRC parameters, and text scale. - -The units are determined by the default display units. - - -@node lesstif AdjustStyle Action -@subsection lesstif AdjustStyle -@c key lesstif AdjustStyle in hid lesstif -@cartouche -@format -AdjustStyle()@end format -@end cartouche - -Displays the route style adjustment window. -@c ./../src/hid/lesstif/styles.c 344 - - -@node lesstif Benchmark Action -@subsection lesstif Benchmark -@c key lesstif Benchmark in hid lesstif -@cartouche -@format -Benchmark()@end format -@end cartouche - -Benchmark the GUI speed. -@c ./../src/hid/lesstif/main.c 659 - -This action is used to speed-test the Lesstif graphics subsystem. It -redraws the current screen as many times as possible in ten seconds. -It reports the amount of time needed to draw the screen once. - - -@node lesstif Command Action -@subsection lesstif Command -@c key lesstif Command in hid lesstif -@cartouche -@format -Command()@end format -@end cartouche - -Displays the command line input window. -@c ./../src/hid/lesstif/main.c 644 - -The command window allows the user to manually enter actions to be -executed. Action syntax can be done one of two ways: - -@table @code - -@item -Follow the action name by an open parenthesis, arguments separated by -commas, end with a close parenthesis. Example: @code{Abc(1,2,3)} - -@item -Separate the action name and arguments by spaces. Example: @code{Abc -1 2 3}. - -@end table - -The first option allows you to have arguments with spaces in them, -but the second is more ``natural'' to type for most people. - -Note that action names are not case sensitive, but arguments normally -are. However, most actions will check for ``keywords'' in a case -insensitive way. - -There are three ways to finish with the command window. If you press -the @code{Enter} key, the command is invoked, the window goes away, -and the next time you bring up the command window it's empty. If you -press the @code{Esc} key, the window goes away without invoking -anything, and the next time you bring up the command window it's -empty. If you change focus away from the command window (i.e. click -on some other window), the command window goes away but the next time -you bring it up it resumes entering the command you were entering -before. - - -@node lesstif Cursor Action -@subsection lesstif Cursor -@c key lesstif Cursor in hid lesstif -@cartouche -@format -Cursor(Type,DeltaUp,DeltaRight,Units)@end format -@end cartouche - -Move the cursor. -@c ./../src/hid/lesstif/main.c 716 - -This action moves the mouse cursor. Unlike other actions which take -coordinates, this action's coordinates are always relative to the -user's view of the board. Thus, a positive @var{DeltaUp} may move the -cursor towards the board origin if the board is inverted. - -Type is one of @samp{Pan} or @samp{Warp}. @samp{Pan} causes the -viewport to move such that the crosshair is under the mouse cursor. -@samp{Warp} causes the mouse cursor to move to be above the crosshair. - -@var{Units} can be one of the following: - -@table @samp - -@item mil -@itemx mm -The cursor is moved by that amount, in board units. - -@item grid -The cursor is moved by that many grid points. - -@item view -The values are percentages of the viewport's view. Thus, a pan of -@samp{100} would scroll the viewport by exactly the width of the -current view. - -@item board -The values are percentages of the board size. Thus, a move of -@samp{50,50} moves you halfway across the board. - -@end table - - -@node lesstif Debug Action -@subsection lesstif Debug -@c key lesstif Debug in hid lesstif -@cartouche -@format -Debug(...)@end format -@end cartouche - -Debug action. -@c ./../src/hid/lesstif/menu.c 66 - -This action exists to help debug scripts; it simply prints all its -arguments to stdout. - - -@node lesstif DebugXY Action -@subsection lesstif DebugXY -@c key lesstif DebugXY in hid lesstif -@cartouche -@format -DebugXY(...)@end format -@end cartouche - -Debug action, with coordinates -@c ./../src/hid/lesstif/menu.c 72 - -Like @code{Debug}, but requires a coordinate. If the user hasn't yet -indicated a location on the board, the user will be prompted to click -on one. - - -@node lesstif DoWindows Action -@subsection lesstif DoWindows -@c key lesstif DoWindows in hid lesstif -@cartouche -@format -DoWindows(1|2|3|4) -DoWindows(Layout|Library|Log|Netlist)@end format -@end cartouche - -Open various GUI windows. -@c ./../src/hid/lesstif/dialogs.c 831 - -@table @code - -@item 1 -@itemx Layout -Open the layout window. Since the layout window is always shown -anyway, this has no effect. - -@item 2 -@itemx Library -Open the library window. - -@item 3 -@itemx Log -Open the log window. - -@item 4 -@itemx Netlist -Open the netlist window. - -@end table - - -@node lesstif DumpKeys Action -@subsection lesstif DumpKeys -@c key lesstif DumpKeys in hid lesstif -@cartouche -@format -DumpKeys()@end format -@end cartouche - -Dump Lesstif key bindings. -@c ./../src/hid/lesstif/menu.c 101 - -Causes the list of key bindings (from @code{pcb-menu.res}) to be -dumped to stdout. This is most useful when invoked from the command -line like this: - -@example -pcb --action-string DumpKeys -@end example - - -@node lesstif EditLayerGroups Action -@subsection lesstif EditLayerGroups -@c key lesstif EditLayerGroups in hid lesstif -@cartouche -@format -EditLayerGroups()@end format -@end cartouche - -Let the user change the layer groupings -@c ./../src/hid/lesstif/dialogs.c 1448 - -Displays a dialog that lets the user view and change the layer -groupings. Each layer (row) can be a member of any one layer group -(column). Note the special layers @code{solder} and @code{component} -allow you to specify which groups represent the top and bottom of the -board. - -See @ref{ChangeName Action}. - - -@node lesstif Export Action -@subsection lesstif Export -@c key lesstif Export in hid lesstif -@cartouche -@format -Export()@end format -@end cartouche - -Export the layout. -@c ./../src/hid/lesstif/dialogs.c 957 - -Prompts the user for an exporter to use. Then, prompts the user for -that exporter's options, and exports the layout. - - -@node lesstif GetXY Action -@subsection lesstif GetXY -@c key lesstif GetXY in hid lesstif -@cartouche -@format -GetXY()@end format -@end cartouche - -Get a coordinate. -@c ./../src/hid/lesstif/menu.c 54 - -Prompts the user for a coordinate, if one is not already selected. - - -@node lesstif ImportGUI Action -@subsection lesstif ImportGUI -@c key lesstif ImportGUI in hid lesstif -@cartouche -@format -ImportGUI()@end format -@end cartouche - -Lets the user choose the schematics to import from -@c ./../src/hid/lesstif/dialogs.c 1882 - -Displays a dialog that lets the user select the schematic(s) to import -from, then saves that information in the layout's attributes for -future imports. - - -@node lesstif LibraryShow Action -@subsection lesstif LibraryShow -@c key lesstif LibraryShow in hid lesstif -@cartouche -@format -LibraryShow()@end format -@end cartouche - -Displays the library window. -@c ./../src/hid/lesstif/library.c 151 - - -@node lesstif Load Action -@subsection lesstif Load -@c key lesstif Load in hid lesstif -@cartouche -@format -Load() -Load(Layout|LayoutToBuffer|ElementToBuffer|Netlist|Revert)@end format -@end cartouche - -Load layout data from a user-selected file. -@c ./../src/hid/lesstif/dialogs.c 99 - -This action is a GUI front-end to the core's @code{LoadFrom} action -(@pxref{LoadFrom Action}). If you happen to pass a filename, like -@code{LoadFrom}, then @code{LoadFrom} is called directly. Else, the -user is prompted for a filename to load, and then @code{LoadFrom} is -called with that filename. - - -@node lesstif LoadVendor Action -@subsection lesstif LoadVendor -@c key lesstif LoadVendor in hid lesstif -@cartouche -@format -LoadVendor()@end format -@end cartouche - -Loads a user-selected vendor resource file. -@c ./../src/hid/lesstif/dialogs.c 152 - -The user is prompted for a file to load, and then -@code{LoadVendorFrom} is called (@pxref{LoadVendorFrom Action}) to -load that vendor file. - - -@node lesstif NetlistShow Action -@subsection lesstif NetlistShow -@c key lesstif NetlistShow in hid lesstif -@cartouche -@format -NetlistShow(pinname|netname)@end format -@end cartouche - -Selects the given pinname or netname in the netlist window. -@c ./../src/hid/lesstif/netlist.c 415 - - -@node lesstif Print Action -@subsection lesstif Print -@c key lesstif Print in hid lesstif -@cartouche -@format -Print()@end format -@end cartouche - -Print the layout. -@c ./../src/hid/lesstif/dialogs.c 894 - -This will find the default printing HID, prompt the user for its -options, and print the layout. - - -@node lesstif PrintCalibrate Action -@subsection lesstif PrintCalibrate -@c key lesstif PrintCalibrate in hid lesstif -@cartouche -@format -PrintCalibrate()@end format -@end cartouche - -Calibrate the printer. -@c ./../src/hid/lesstif/dialogs.c 937 - -This will print a calibration page, which you would measure and type -the measurements in, so that future printouts will be more precise. - - -@node lesstif PromptFor Action -@subsection lesstif PromptFor -@c key lesstif PromptFor in hid lesstif -@cartouche -@format -PromptFor([message[,default]])@end format -@end cartouche - -Prompt for a response. -@c ./../src/hid/lesstif/dialogs.c 560 - -This is mostly for testing the lesstif HID interface. The parameters -are passed to the @code{prompt_for()} HID function, causing the user -to be prompted for a response. The respose is simply printed to the -user's stdout. - - -@node lesstif Return Action -@subsection lesstif Return -@c key lesstif Return in hid lesstif -@cartouche -@format -Return(0|1)@end format -@end cartouche - -Simulate a passing or failing action. -@c ./../src/hid/lesstif/menu.c 89 - -This is for testing. If passed a 0, does nothing and succeeds. If -passed a 1, does nothing but pretends to fail. - - -@node lesstif Save Action -@subsection lesstif Save -@c key lesstif Save in hid lesstif -@cartouche -@format -Save() -Save(Layout|LayoutAs) -Save(AllConnections|AllUnusedPins|ElementConnections) -Save(PasteBuffer)@end format -@end cartouche - -Save layout data to a user-selected file. -@c ./../src/hid/lesstif/dialogs.c 197 - -This action is a GUI front-end to the core's @code{SaveTo} action -(@pxref{SaveTo Action}). If you happen to pass a filename, like -@code{SaveTo}, then @code{SaveTo} is called directly. Else, the -user is prompted for a filename to save, and then @code{SaveTo} is -called with that filename. - - -@node lesstif SelectLayer Action -@subsection lesstif SelectLayer -@c key lesstif SelectLayer in hid lesstif -@cartouche -@format -SelectLayer(1..MAXLAYER|Silk|Rats)@end format -@end cartouche - -Select which layer is the current layer. -@c ./../src/hid/lesstif/menu.c 387 - -The specified layer becomes the currently active layer. It is made -visible if it is not already visible - - -@node lesstif SetUnits Action -@subsection lesstif SetUnits -@c key lesstif SetUnits in hid lesstif -@cartouche -@format -SetUnits(mm|mil)@end format -@end cartouche - -Set the default measurement units. -@c ./../src/hid/lesstif/main.c 395 - -@table @code - -@item mil -Sets the display units to mils (1/1000 inch). - -@item mm -Sets the display units to millimeters. - -@end table - - -@node lesstif SwapSides Action -@subsection lesstif SwapSides -@c key lesstif SwapSides in hid lesstif -@cartouche -@format -SwapSides(|v|h|r)@end format -@end cartouche - -Swaps the side of the board you're looking at. -@c ./../src/hid/lesstif/main.c 494 - -This action changes the way you view the board. - -@table @code - -@item v -Flips the board over vertically (up/down). - -@item h -Flips the board over horizontally (left/right), like flipping pages in -a book. - -@item r -Rotates the board 180 degrees without changing sides. - -@end table - -If no argument is given, the board isn't moved but the opposite side -is shown. - -Normally, this action changes which pads and silk layer are drawn as -true silk, and which are drawn as the "invisible" layer. It also -determines which solder mask you see. - -As a special case, if the layer group for the side you're looking at -is visible and currently active, and the layer group for the opposite -is not visible (i.e. disabled), then this action will also swap which -layer group is visible and active, effectively swapping the ``working -side'' of the board. - - -@node lesstif ToggleView Action -@subsection lesstif ToggleView -@c key lesstif ToggleView in hid lesstif -@cartouche -@format -ToggleView(1..MAXLAYER) -ToggleView(layername) -ToggleView(Silk|Rats|Pins|Vias|Mask|BackSide)@end format -@end cartouche - -Toggle the visibility of the specified layer or layer group. -@c ./../src/hid/lesstif/menu.c 409 - -If you pass an integer, that layer is specified by index (the first -layer is @code{1}, etc). If you pass a layer name, that layer is -specified by name. When a layer is specified, the visibility of the -layer group containing that layer is toggled. - -If you pass a special layer name, the visibility of those components -(silk, rats, etc) is toggled. Note that if you have a layer named -the same as a special layer, the layer is chosen over the special layer. - - -@node lesstif Zoom Action -@subsection lesstif Zoom -@c key lesstif Zoom in hid lesstif -@cartouche -@format -Zoom() -Zoom(factor)@end format -@end cartouche - -Various zoom factor changes. -@c ./../src/hid/lesstif/main.c 419 - -Changes the zoom (magnification) of the view of the board. If no -arguments are passed, the view is scaled such that the board just fits -inside the visible window (i.e. ``view all''). Otherwise, -@var{factor} specifies a change in zoom factor. It may be prefixed by -@code{+}, @code{-}, or @code{=} to change how the zoom factor is -modified. The @var{factor} is a floating point number, such as -@code{1.5} or @code{0.75}. - -@table @code - -@item +@var{factor} -Values greater than 1.0 cause the board to be drawn smaller; more of -the board will be visible. Values between 0.0 and 1.0 cause the board -to be drawn bigger; less of the board will be visible. - -@item -@var{factor} -Values greater than 1.0 cause the board to be drawn bigger; less of -the board will be visible. Values between 0.0 and 1.0 cause the board -to be drawn smaller; more of the board will be visible. - -@item =@var{factor} - -The @var{factor} is an absolute zoom factor; the unit for this value -is "PCB units per screen pixel". Since PCB units are 0.01 mil, a -@var{factor} of 1000 means 10 mils (0.01 in) per pixel, or 100 DPI, -about the actual resolution of most screens - resulting in an "actual -size" board. Similarly, a @var{factor} of 100 gives you a 10x actual -size. - -@end table - -Note that zoom factors of zero are silently ignored. - - Index: trunk/doc/pcbfile.texi =================================================================== --- trunk/doc/pcbfile.texi (revision 1036) +++ trunk/doc/pcbfile.texi (nonexistent) @@ -1,946 +0,0 @@ -@c key pcbfile -@c ./../src/parse_y.y 143 - -A special note about units: Older versions of @code{pcb} used mils -(1/1000 inch) as the base unit; a value of 500 in the file meant -half an inch. Newer versions uses a "high resolution" syntax, -where the base unit is 1/100 of a mil (0.000010 inch); a value of 500 in -the file means 5 mils. As a general rule, the variants of each entry -listed below which use square brackets are the high resolution formats -and use the 1/100 mil units, and the ones with parentheses are the older -variants and use 1 mil units. Note that when multiple variants -are listed, the most recent (and most preferred) format is the first -listed. - -Symbolic and numeric flags (SFlags and NFlags) are described in -@ref{Object Flags}. - -@menu -* Arc syntax:: -* Attribute syntax:: -* Connect syntax:: -* Cursor syntax:: -* DRC syntax:: -* Element syntax:: -* ElementArc syntax:: -* ElementLine syntax:: -* FileVersion syntax:: -* Flags syntax:: -* Grid syntax:: -* Groups syntax:: -* Layer syntax:: -* Line syntax:: -* Mark syntax:: -* Net syntax:: -* Netlist syntax:: -* Pad syntax:: -* PCB syntax:: -* Pin syntax:: -* PolyArea syntax:: -* Polygon syntax:: -* Rat syntax:: -* Styles syntax:: -* Symbol syntax:: -* SymbolLine syntax:: -* Text syntax:: -* Thermal syntax:: -* Via syntax:: -@end menu -@c pcbfile Arc -@node Arc syntax -@subsection Arc -@c ./../src/parse_y.y 660 - -@cartouche -@format -Arc [X Y Width Height Thickness Clearance StartAngle DeltaAngle SFlags] -Arc (X Y Width Height Thickness Clearance StartAngle DeltaAngle NFlags) -Arc (X Y Width Height Thickness StartAngle DeltaAngle NFlags) -@end format -@end cartouche - -@table @var -@item X Y -Coordinates of the center of the arc. -@item Width Height -The width and height, from the center to the edge. The bounds of the -circle of which this arc is a segment, is thus @math{2*Width} by -@math{2*Height}. -@item Thickness -The width of the copper trace which forms the arc. -@item Clearance -The amount of space cleared around the arc when the line passes -through a polygon. The clearance is added to the thickness to get the -thickness of the clear; thus the space between the arc and the polygon -is @math{Clearance/2} wide. -@item StartAngle -The angle of one end of the arc, in degrees. In PCB, an angle of zero -points left (negative X direction), and 90 degrees points down -(positive Y direction). -@item DeltaAngle -The sweep of the arc. This may be negative. Positive angles sweep -counterclockwise. -@item SFlags -Symbolic or numeric flags. -@item NFlags -Numeric flags. -@end table - -@c pcbfile Attribute -@node Attribute syntax -@subsection Attribute -@c ./../src/parse_y.y 1268 - -@cartouche -@format -Attribute ("Name" "Value") -@end format -@end cartouche - -Attributes allow boards and elements to have arbitrary data attached -to them, which is not directly used by PCB itself but may be of use by -other programs or users. - -@table @var -@item Name -The name of the attribute - -@item Value -The value of the attribute. Values are always stored as strings, even -if the value is interpreted as, for example, a number. - -@end table - -@c pcbfile Connect -@node Connect syntax -@subsection Connect -@c ./../src/parse_y.y 1258 - -@cartouche -@format -Connect ("PinPad") -@end format -@end cartouche - -@table @var -@item PinPad -The name of a pin or pad which is included in this net. Pin and Pad -names are named by the refdes and pin name, like @code{"U14-7"} for -pin 7 of U14, or @code{"T4-E"} for pin E of T4. -@end table - -@c pcbfile Cursor -@node Cursor syntax -@subsection Cursor -@c ./../src/parse_y.y 335 - -@cartouche -@format -Cursor [X Y Zoom] -Cursor (X Y Zoom) -@end format -@end cartouche - -@table @var -@item X Y -Location of the cursor when the board was saved. -@item Zoom -The current zoom factor. Note that a zoom factor of "0" means 1 mil -per screen pixel, N means @math{2^N} mils per screen pixel, etc. The -first variant accepts floating point numbers. The special value -"1000" means "zoom to fit" -@end table - -@c pcbfile DRC -@node DRC syntax -@subsection DRC -@c ./../src/parse_y.y 376 - -@cartouche -@format -DRC [Bloat Shrink Line Silk Drill Ring] -DRC [Bloat Shrink Line Silk] -DRC [Bloat Shrink Line] -@end format -@end cartouche - -@table @var -@item Bloat -Minimum spacing between copper. -@item Shrink -Minimum copper overlap to guarantee connectivity. -@item Line -Minimum line thickness. -@item Silk -Minimum silk thickness. -@item Drill -Minimum drill size. -@item Ring -Minimum width of the annular ring around pins and vias. -@end table - -@c pcbfile Element -@node Element syntax -@subsection Element -@c ./../src/parse_y.y 816 - -@cartouche -@format -Element [SFlags "Desc" "Name" "Value" MX MY TX TY TDir TScale TSFlags] ( -Element (NFlags "Desc" "Name" "Value" MX MY TX TY TDir TScale TNFlags) ( -Element (NFlags "Desc" "Name" "Value" TX TY TDir TScale TNFlags) ( -Element (NFlags "Desc" "Name" TX TY TDir TScale TNFlags) ( -Element ("Desc" "Name" TX TY TDir TScale TNFlags) ( -@ @ @ @dots{} contents @dots{} -) -@end format -@end cartouche - -@table @var -@item SFlags -Symbolic or numeric flags, for the element as a whole. -@item NFlags -Numeric flags, for the element as a whole. -@item Desc -The description of the element. This is one of the three strings -which can be displayed on the screen. -@item Name -The name of the element, usually the reference designator. -@item Value -The value of the element. -@item MX MY -The location of the element's mark. This is the reference point -for placing the element and its pins and pads. -@item TX TY -The upper left corner of the text (one of the three strings). -@item TDir -The relative direction of the text. 0 means left to right for -an unrotated element, 1 means up, 2 left, 3 down. -@item TScale -Size of the text, as a percentage of the ``default'' size of of the -font (the default font is about 40 mils high). Default is 100 (40 -mils). -@item TSFlags -Symbolic or numeric flags, for the text. -@item TNFlags -Numeric flags, for the text. -@end table - -Elements may contain pins, pads, element lines, element arcs, -attributes, and (for older elements) an optional mark. Note that -element definitions that have the mark coordinates in the element -line, only support pins and pads which use relative coordinates. The -pin and pad coordinates are relative to the mark. Element definitions -which do not include the mark coordinates in the element line, may -have a Mark definition in their contents, and only use pin and pad -definitions which use absolute coordinates. - -@c pcbfile ElementArc -@node ElementArc syntax -@subsection ElementArc -@c ./../src/parse_y.y 927 - -@cartouche -@format -ElementArc [X Y Width Height StartAngle DeltaAngle Thickness] -ElementArc (X Y Width Height StartAngle DeltaAngle Thickness) -@end format -@end cartouche - -@table @var -@item X Y -Coordinates of the center of the arc. These are relative to the -Element's mark point for new element formats, or absolute for older -formats. -@item Width Height -The width and height, from the center to the edge. The bounds of the -circle of which this arc is a segment, is thus @math{2*Width} by -@math{2*Height}. -@item StartAngle -The angle of one end of the arc, in degrees. In PCB, an angle of zero -points left (negative X direction), and 90 degrees points down -(positive Y direction). -@item DeltaAngle -The sweep of the arc. This may be negative. Positive angles sweep -counterclockwise. -@item Thickness -The width of the silk line which forms the arc. -@end table - -@c pcbfile ElementLine -@node ElementLine syntax -@subsection ElementLine -@c ./../src/parse_y.y 925 - -@cartouche -@format -ElementLine [X1 Y1 X2 Y2 Thickness] -ElementLine (X1 Y1 X2 Y2 Thickness) -@end format -@end cartouche - -@table @var -@item X1 Y1 X2 Y2 -Coordinates of the endpoints of the line. These are relative to the -Element's mark point for new element formats, or absolute for older -formats. -@item Thickness -The width of the silk for this line. -@end table - -@c pcbfile FileVersion -@node FileVersion syntax -@subsection FileVersion -@c ./../src/parse_y.y 258 - -@cartouche -@format -FileVersion[Version] -@end format -@end cartouche - -@table @var -@item Version -File format version. This version number represents the date when the pcb file -format was last changed. -@end table - -Any version of pcb build from sources equal to or newer -than this number should be able to read the file. If this line is not present -in the input file then file format compatibility is not checked. - - -@c pcbfile Flags -@node Flags syntax -@subsection Flags -@c ./../src/parse_y.y 418 - -@cartouche -@format -Flags(Number) -@end format -@end cartouche - -@table @var -@item Number -A number, whose value is normally given in hex, individual bits of which -represent pcb-wide flags as defined in @ref{PCBFlags}. - -@end table - -@c pcbfile Grid -@node Grid syntax -@subsection Grid -@c ./../src/parse_y.y 294 - -@cartouche -@format -Grid [Step OffsetX OffsetY Visible] -Grid (Step OffsetX OffsetY Visible) -Grid (Step OffsetX OffsetY) -@end format -@end cartouche - -@table @var -@item Step -Distance from one grid point to adjacent points. This value may be a -floating point number for the first two variants. -@item OffsetX OffsetY -The "origin" of the grid. Normally zero. -@item Visible -If non-zero, the grid will be visible on the screen. -@end table - -@c pcbfile Groups -@node Groups syntax -@subsection Groups -@c ./../src/parse_y.y 432 - -@cartouche -@format -Groups("String") -@end format -@end cartouche - -@table @var -@item String - -Encodes the layer grouping information. Each group is separated by a -colon, each member of each group is separated by a comma. Group -members are either numbers from @code{1}..@var{N} for each layer, and -the letters @code{c} or @code{s} representing the component side and -solder side of the board. Including @code{c} or @code{s} marks that -group as being the top or bottom side of the board. - -@example -Groups("1,2,c:3:4:5,6,s:7,8") -@end example - -@end table - -@c pcbfile Layer -@node Layer syntax -@subsection Layer -@c ./../src/parse_y.y 573 - -@cartouche -@format -Layer (LayerNum "Name") ( -@ @ @ @dots{} contents @dots{} -) -@end format -@end cartouche - -@table @var -@item LayerNum -The layer number. Layers are numbered sequentially, starting with 1. -The last two layers (9 and 10 by default) are solder-side silk and -component-side silk, in that order. -@item Name -The layer name. -@item contents -The contents of the layer, which may include attributes, lines, arcs, rectangles, -text, and polygons. -@end table - -@c pcbfile Line -@node Line syntax -@subsection Line -@c ./../src/parse_y.y 629 - -@cartouche -@format -Line [X1 Y1 X2 Y2 Thickness Clearance SFlags] -Line (X1 Y1 X2 Y2 Thickness Clearance NFlags) -Line (X1 Y1 X2 Y2 Thickness NFlags) -@end format -@end cartouche - -@table @var -@item X1 Y1 X2 Y2 -The end points of the line -@item Thickness -The width of the line -@item Clearance -The amount of space cleared around the line when the line passes -through a polygon. The clearance is added to the thickness to get the -thickness of the clear; thus the space between the line and the -polygon is @math{Clearance/2} wide. -@item SFlags -Symbolic or numeric flags -@item NFlags -Numeric flags. -@end table - -@c pcbfile Mark -@node Mark syntax -@subsection Mark -@c ./../src/parse_y.y 929 - -@cartouche -@format -Mark [X Y] -Mark (X Y) -@end format -@end cartouche - -@table @var -@item X Y -Coordinates of the Mark, for older element formats that don't have -the mark as part of the Element line. -@end table - -@c pcbfile Net -@node Net syntax -@subsection Net -@c ./../src/parse_y.y 1235 - -@cartouche -@format -Net ("Name" "Style") ( -@ @ @ @dots{} connects @dots{} -) -@end format -@end cartouche - -@table @var -@item Name -The name of this net. -@item Style -The routing style that should be used when autorouting this net. -@end table - -@c pcbfile Netlist -@node Netlist syntax -@subsection Netlist -@c ./../src/parse_y.y 1214 - -@cartouche -@format -Netlist ( ) ( -@ @ @ @dots{} nets @dots{} -) -@end format -@end cartouche - -@c pcbfile Pad -@node Pad syntax -@subsection Pad -@c ./../src/parse_y.y 1086 - -@cartouche -@format -Pad [rX1 rY1 rX2 rY2 Thickness Clearance Mask "Name" "Number" SFlags] -Pad (rX1 rY1 rX2 rY2 Thickness Clearance Mask "Name" "Number" NFlags) -Pad (aX1 aY1 aX2 aY2 Thickness "Name" "Number" NFlags) -Pad (aX1 aY1 aX2 aY2 Thickness "Name" NFlags) -@end format -@end cartouche - -@table @var -@item rX1 rY1 rX2 rY2 -Coordinates of the endpoints of the pad, relative to the element's -mark. Note that the copper extends beyond these coordinates by half -the thickness. To make a square or round pad, specify the same -coordinate twice. -@item aX1 aY1 aX2 aY2 -Same, but absolute coordinates of the endpoints of the pad. -@item Thickness -width of the pad. -@item Clearance -add to thickness to get clearance width. -@item Mask -width of solder mask opening. -@item Name -name of pin -@item Number -number of pin -@item SFlags -symbolic or numerical flags -@item NFlags -numerical flags only -@end table - -@c pcbfile PCB -@node PCB syntax -@subsection PCB -@c ./../src/parse_y.y 271 - -@cartouche -@format -PCB ["Name" Width Height] -PCB ("Name" Width Height] -PCB ("Name") -@end format -@end cartouche - -@table @var -@item Name -Name of the PCB project -@item Width Height -Size of the board -@end table - -If you don't specify the size of the board, a very large default is -chosen. - -@c pcbfile Pin -@node Pin syntax -@subsection Pin -@c ./../src/parse_y.y 1013 - -@cartouche -@format -Pin [rX rY Thickness Clearance Mask Drill "Name" "Number" SFlags] -Pin (rX rY Thickness Clearance Mask Drill "Name" "Number" NFlags) -Pin (aX aY Thickness Drill "Name" "Number" NFlags) -Pin (aX aY Thickness Drill "Name" NFlags) -Pin (aX aY Thickness "Name" NFlags) -@end format -@end cartouche - -@table @var -@item rX rY -coordinates of center, relative to the element's mark -@item aX aY -absolute coordinates of center. -@item Thickness -outer diameter of copper annulus -@item Clearance -add to thickness to get clearance diameter -@item Mask -diameter of solder mask opening -@item Drill -diameter of drill -@item Name -name of pin -@item Number -number of pin -@item SFlags -symbolic or numerical flags -@item NFlags -numerical flags only -@end table - -@c pcbfile PolyArea -@node PolyArea syntax -@subsection PolyArea -@c ./../src/parse_y.y 353 - -@cartouche -@format -PolyArea [Area] -@end format -@end cartouche - -@table @var -@item Area -Minimum area of polygon island to retain. If a polygon has clearances that cause an isolated island to be created, then will only be retained if the area exceeds this minimum area. -@end table - -@c pcbfile Polygon -@node Polygon syntax -@subsection Polygon -@c ./../src/parse_y.y 743 - -@cartouche -@format -Polygon (SFlags) ( -@ @ @ @dots{} (X Y) @dots{} -@ @ @ @dots{} [X Y] @dots{} -@ @ @ Hole ( -@ @ @ @ @ @ @dots{} (X Y) @dots{} -@ @ @ @ @ @ @dots{} [X Y] @dots{} -@ @ @ ) -@ @ @ @dots{} -) -@end format -@end cartouche - -@table @var -@item SFlags -Symbolic or numeric flags. -@item X Y -Coordinates of each vertex. You must list at least three coordinates. -@item Hole (...) -Defines a hole within the polygon's outer contour. There may be zero or more such sections. -@end table - -@c pcbfile Rat -@node Rat syntax -@subsection Rat -@c ./../src/parse_y.y 558 - -@cartouche -@format -Rat [X1 Y1 Group1 X2 Y2 Group2 SFlags] -Rat (X1 Y1 Group1 X2 Y2 Group2 NFlags) -@end format -@end cartouche - -@table @var -@item X1 Y1 X2 Y2 -The endpoints of the rat line. -@item Group1 Group2 -The layer group each end is connected on. -@item SFlags -Symbolic or numeric flags. -@item NFlags -Numeric flags. -@end table - -@c pcbfile Styles -@node Styles syntax -@subsection Styles -@c ./../src/parse_y.y 442 - -@cartouche -@format -Styles("String") -@end format -@end cartouche - -@table @var -@item String - -Encodes the four routing styles @code{pcb} knows about. The four styles -are separated by colons. Each style consists of five parameters as follows: - -@table @var -@item Name -The name of the style. -@item Thickness -Width of lines and arcs. -@item Diameter -Copper diameter of pins and vias. -@item Drill -Drill diameter of pins and vias. -@item Keepaway -Minimum spacing to other nets. If omitted, 10 mils is the default. - -@end table - -@end table - -@example -Styles("Signal,10,40,20:Power,25,60,35:Fat,40,60,35:Skinny,8,36,20") -Styles["Logic,1000,3600,2000,1000:Power,2500,6000,3500,1000: -@ @ @ Line,4000,6000,3500,1000:Breakout,600,2402,1181,600"] -@end example - -@noindent -Note that strings in actual files cannot span lines; the above example -is split across lines only to make it readable. - -@c pcbfile Symbol -@node Symbol syntax -@subsection Symbol -@c ./../src/parse_y.y 1148 - -@cartouche -@format -Symbol [Char Delta] ( -Symbol (Char Delta) ( -@ @ @ @dots{} symbol lines @dots{} -) -@end format -@end cartouche - -@table @var -@item Char -The character or numerical character value this symbol represents. -Characters must be in single quotes. -@item Delta -Additional space to allow after this character. -@end table - -@c pcbfile SymbolLine -@node SymbolLine syntax -@subsection SymbolLine -@c ./../src/parse_y.y 1197 - -@cartouche -@format -SymbolLine [X1 Y1 X2 Y1 Thickness] -SymbolLine (X1 Y1 X2 Y1 Thickness) -@end format -@end cartouche - -@table @var -@item X1 Y1 X2 Y2 -The endpoints of this line. -@item Thickness -The width of this line. -@end table - -@c pcbfile Text -@node Text syntax -@subsection Text -@c ./../src/parse_y.y 689 - -@cartouche -@format -Text [X Y Direction Scale "String" SFlags] -Text (X Y Direction Scale "String" NFlags) -Text (X Y Direction "String" NFlags) -@end format -@end cartouche - -@table @var -@item X Y -The location of the upper left corner of the text. -@item Direction -0 means text is drawn left to right, 1 means up, 2 means right to left -(i.e. upside down), and 3 means down. -@item Scale -Size of the text, as a percentage of the ``default'' size of of the -font (the default font is about 40 mils high). Default is 100 (40 -mils). -@item String -The string to draw. -@item SFlags -Symbolic or numeric flags. -@item NFlags -Numeric flags. -@end table - -@c pcbfile Thermal -@node Thermal syntax -@subsection Thermal -@c ./../src/parse_y.y 365 - -@cartouche -@format -Thermal [Scale] -@end format -@end cartouche - -@table @var -@item Scale -Relative size of thermal fingers. A value of 1.0 makes the finger -width twice the clearance gap width (measured across the gap, not -diameter). The normal value is 0.5, which results in a finger width -the same as the clearance gap width. -@end table - -@c pcbfile Via -@node Via syntax -@subsection Via -@c ./../src/parse_y.y 498 - -@cartouche -@format -Via [X Y Thickness Clearance Mask Drill "Name" SFlags] -Via (X Y Thickness Clearance Mask Drill "Name" NFlags) -Via (X Y Thickness Clearance Drill "Name" NFlags) -Via (X Y Thickness Drill "Name" NFlags) -Via (X Y Thickness "Name" NFlags) -@end format -@end cartouche - -@table @var -@item X Y -coordinates of center -@item Thickness -outer diameter of copper annulus -@item Clearance -add to thickness to get clearance diameter -@item Mask -diameter of solder mask opening -@item Drill -diameter of drill -@item Name -string, name of via (vias have names?) -@item SFlags -symbolic or numerical flags -@item NFlags -numerical flags only -@end table - -@c pcbfile ~objectflags -@c ./../src/const.h 110 -@node Object Flags -@section Object Flags - -Note that object flags can be given numerically (like @code{0x0147}) -or symbolically (like @code{"found,showname,square"}. Some numeric -values are reused for different object types. The table below lists -the numeric value followed by the symbolic name. - -@table @code -@item 0x0001 pin -If set, this object is a pin. This flag is for internal use only. -@item 0x0002 via -Likewise, for vias. -@item 0x0004 found -If set, this object has been found by @code{FindConnection()}. -@item 0x0008 hole -For pins and vias, this flag means that the pin or via is a hole -without a copper annulus. -@item 0x0010 rat -If set for a line, indicates that this line is a rat line instead of a -copper trace. -@item 0x0010 pininpoly -For pins and pads, this flag is used internally to indicate that the -pin or pad overlaps a polygon on some layer. -@item 0x0010 clearpoly -For polygons, this flag means that pins and vias will normally clear -these polygons (thus, thermals are required for electrical -connection). When clear, polygons will solidly connect to pins and -vias. -@item 0x0010 hidename -For elements, when set the name of the element is hidden. -@item 0x0020 showname -For elements, when set the names of pins are shown. -@item 0x0020 clearline -For lines and arcs, the line/arc will clear polygons instead of -connecting to them. -@item 0x0020 fullpoly -For polygons, the full polygon is drawn (i.e. all parts instead of only the biggest one). -@item 0x0040 selected -Set when the object is selected. -@item 0x0080 onsolder -For elements and pads, indicates that they are on the solder side. -@item 0x0080 auto -For lines and vias, indicates that these were created by the -autorouter. -@item 0x0100 square -For pins and pads, indicates a square (vs round) pin/pad. -@item 0x0200 rubberend -For lines, used internally for rubber band moves. -@item 0x0200 warn -For pins, vias, and pads, set to indicate a warning. -@item 0x0400 usetherm -Obsolete, indicates that pins/vias should be drawn with thermal -fingers. -@item 0x0400 -Obsolete, old files used this to indicate lines drawn on silk. -@item 0x0800 octagon -Draw pins and vias as octagons. -@item 0x1000 drc -Set for objects that fail DRC. -@item 0x2000 lock -Set for locked objects. -@item 0x4000 edge2 -For pads, indicates that the second point is closer to the edge. For -pins, indicates that the pin is closer to a horizontal edge and thus -pinout text should be vertical. -@item 0x8000 marker -Marker used internally to avoid revisiting an object. -@item 0x10000 nopaste -For pads, set to prevent a solderpaste stencil opening for the -pad. Primarily used for pads used as fiducials. -@end table -@c pcbfile ~pcbflags -@c ./../src/const.h 149 -@node PCBFlags -@section PCBFlags -@table @code -@item 0x00001 -Pinout displays pin numbers instead of pin names. -@item 0x00002 -Use local reference for moves, by setting the mark at the beginning of -each move. -@item 0x00004 -When set, only polygons and their clearances are drawn, to see if -polygons have isolated regions. -@item 0x00008 -Display DRC region on crosshair. -@item 0x00010 -Do all move, mirror, rotate with rubberband connections. -@item 0x00020 -Display descriptions of elements, instead of refdes. -@item 0x00040 -Display names of elements, instead of refdes. -@item 0x00080 -Auto-DRC flag. When set, PCB doesn't let you place copper that -violates DRC. -@item 0x00100 -Enable 'all-direction' lines. -@item 0x00200 -Switch starting angle after each click. -@item 0x00400 -Force unique names on board. -@item 0x00800 -New lines/arc clear polygons. -@item 0x01000 -Crosshair snaps to pins and pads. -@item 0x02000 -Show the solder mask layer. -@item 0x04000 -Draw with thin lines. -@item 0x08000 -Move items orthogonally. -@item 0x10000 -Draw autoroute paths real-time. -@item 0x20000 -New polygons are full ones. -@item 0x40000 -Names are locked, the mouse cannot select them. -@item 0x80000 -Everything but names are locked, the mouse cannot select anything else. -@item 0x100000 -New polygons are full polygons. -@item 0x200000 -When set, element names are not drawn. -@end table Index: trunk/doc/pad.pdf =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: trunk/doc/pad.pdf =================================================================== --- trunk/doc/pad.pdf (revision 1036) +++ trunk/doc/pad.pdf (nonexistent) Property changes on: trunk/doc/pad.pdf ___________________________________________________________________ Deleted: svn:mime-type ## -1 +0,0 ## -application/octet-stream \ No newline at end of property Index: trunk/doc/pcb.pdf =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: trunk/doc/pcb.pdf =================================================================== --- trunk/doc/pcb.pdf (revision 1036) +++ trunk/doc/pcb.pdf (nonexistent) Property changes on: trunk/doc/pcb.pdf ___________________________________________________________________ Deleted: svn:mime-type ## -1 +0,0 ## -application/octet-stream \ No newline at end of property Index: trunk/doc/gcode_tool_path.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: trunk/doc/gcode_tool_path.png =================================================================== --- trunk/doc/gcode_tool_path.png (revision 1036) +++ trunk/doc/gcode_tool_path.png (nonexistent) Property changes on: trunk/doc/gcode_tool_path.png ___________________________________________________________________ Deleted: svn:mime-type ## -1 +0,0 ## -application/octet-stream \ No newline at end of property Index: trunk/doc/eps2png =================================================================== --- trunk/doc/eps2png (revision 1036) +++ trunk/doc/eps2png (nonexistent) @@ -1,495 +0,0 @@ -#!/usr/bin/perl - -my $RCS_Id = '$Id$ '; - -# Author : Johan Vromans -# Created On : Tue Sep 15 15:59:04 1992 -# Last Modified By: Johan Vromans -# Last Modified On: Sun Jun 24 17:07:29 2001 -# Update Count : 155 -# Status : Okay - -################ Common stuff ################ - -use strict; -use Getopt::Long 2.1; - -my $my_package = "Sciurix"; -my ($my_name, $my_version) = $RCS_Id =~ /: (.+).pl,v ([\d.]+)/; -$my_version .= '*' if length('$Locker$ ') > 12; - -use vars qw($VERSION); -( $VERSION ) = '$Revision$ ' =~ /\$Revision:\s+([^\s]+)/; - -################ Program parameters ################ - -### CONFIG -# Some GhostScript programs can produce GIF directly. -# If not, we need the PBM package for the conversion. -my $use_pbm = 1; # GhostScript can not produce GIF -### END CONFIG - -my $res = 82; # default resolution -my $scale = 1; # default scaling -my $mono = 0; # produce BW images if non-zero -my $format; # output format -my $gs_format; # GS output type -my $output; # output, defaults to STDOUT -my $antialias = 4; # antialiasing -my $width; # desired widht -my $height; # desired height - -my ($verbose,$trace,$test,$debug) = (0,0,0,0); -handle_options (); -unless ( defined $format ) { - if ( $0 =~ /2(gif|jpg|png)$/ ) { - set_out_type ($1); - } - else { - set_out_type ('png') unless defined $format; - } -} -print STDERR ("Producing $format ($gs_format) image.\n") if $verbose; - -$trace |= $test | $debug; -$verbose |= $trace; - -################ Presets ################ - -################ The Process ################ - -my $eps_file; -my $err = 0; - -foreach $eps_file ( @ARGV ) { - - unless ( open (EPS, $eps_file) ) { - print STDERR ("Cannot open $eps_file [$!], skipped\n"); - $err++; - next; - } - - my $line = ; - unless ( $line =~ /^%!PS-Adobe.*EPSF-/ ) { - print STDERR ("Not EPS file: $eps_file, skipped\n"); - $err++; - next; - } - - my $ps = ""; # PostScript input data - my $xscale; - my $yscale; - - while ( $line = ) { - - # Search for BoundingBox. - if ( $line =~ /^%%BoundingBox:\s*(\S+)\s+(\S+)\s+(\S+)\s+(\S+)/i ) { - - print STDERR ("$eps_file: x0=$1, y0=$2, w=", $3-$1, ", h=", $4-$2) - if $verbose; - - if ( defined $width ) { - $res = 72; - $xscale = $width / ($3 - $1); - if ( defined $height ) { - $yscale = $height / ($4 - $2); - } - else { - $yscale = $xscale; - $height = ($4 - $2) * $yscale; - } - } - elsif ( defined $height ) { - $res = 72; - $yscale = $height / ($4 - $2); - if ( defined $width ) { - $xscale = $width / ($3 - $1); - } - else { - $xscale = $yscale; - $width = ($3 - $1) * $xscale; - } - } - unless ( defined $xscale ) { - $xscale = $yscale = $scale; - # Calculate actual width. - $width = $3 - $1; - $height = $4 - $2; - # Normal PostScript resolution is 72. - $width *= $res/72 * $xscale; - $height *= $res/72 * $yscale; - # Round up. - $width = int ($width + 0.5) + 1; - $height = int ($height + 0.5) + 1; - } - print STDERR (", width=$width, height=$height\n") if $verbose; - - # Scale. - $ps .= "$xscale $yscale scale\n" - if $xscale != 1 || $yscale != 1; - - # Create PostScript code to translate coordinates. - $ps .= (0-$1) . " " . (0-$2) . " translate\n" - unless $1 == 0 && $2 == 0; - - # Include the image, show and quit. - $ps .= "($eps_file) run\n". - "showpage\n". - "quit\n"; - - last; - } - elsif ( $line =~ /^%%EndComments/i ) { - print STDERR ("No bounding box in $eps_file\n"); - $err++; - last; - } - } - close (EPS); - - my $out_file; # output file - my $pbm_file; # temporary file for PBM conversion - - # Note the temporary PBM file is created where the output file is - # located, since that will guarantee accessibility (and a valid - # filename). - if ( defined $output ) { - $out_file = $output; - $pbm_file = $output.".ppm"; - } - elsif ( $eps_file =~ /^(.+).epsf?$/i ) { - $out_file = "$1.$format"; - $pbm_file = $1.".ppm"; - } - else { - $out_file = $eps_file . ".$format"; - $pbm_file = $eps_file . ".ppm"; - } - print STDERR ("Creating $out_file\n") if $verbose; - - my $gs0 = "gs -q -dNOPAUSE -r$res -g${width}x$height"; - my $gs1 = "-"; - $gs0 .= " -dTextAlphaBits=$antialias -dGraphicsAlphaBits=$antialias" - if $antialias; - if ( $format eq 'png' ) { - mysystem ("$gs0 -sDEVICE=". ($mono ? "pngmono" : $gs_format). - " -sOutputFile=$out_file $gs1", $ps); - } - elsif ( $format eq 'jpg' ) { - mysystem ("$gs0 -sDEVICE=". ($mono ? "jpeggray" : $gs_format). - " -sOutputFile=$out_file $gs1", $ps); - } - elsif ( $format eq 'gif' ) { - if ( $use_pbm ) { - # Convert to PPM and use some of the PBM converters. - mysystem ("$gs0 -sDEVICE=". ($mono ? "pbm" : "ppm"). - " -sOutputFile=$pbm_file $gs1", $ps); - # mysystem ("pnmcrop $pbm_file | ppmtogif > $out_file"); - mysystem ("ppmtogif $pbm_file > $out_file"); - unlink ($pbm_file); - } - else { - # GhostScript has GIF drivers built-in. - mysystem ("$gs0 -sDEVICE=". ($mono ? "gifmono" : "gif8"). - " -sOutputFile=$out_file $gs1", $ps); - } - } - else { - print STDERR ("ASSERT ERROR: Unhandled output type: $format\n"); - exit (1); - } - - unless ( -s $out_file ) { - print STDERR ("Problem creating $out_file for $eps_file\n"); - $err++; - } - -} - -exit 1 if $err; - -################ Subroutines ################ - -sub mysystem { - my ($cmd, $data) = @_; - print STDERR ("+ $cmd\n") if $trace; - if ( $data ) { - if ( $trace ) { - my $dp = ">> " . $data; - $dp =~ s/\n(.)/\n>> $1/g; - print STDERR ("$dp"); - } - open (CMD, "|$cmd") or die ("cmd: $!\n"); - print CMD $data; - close CMD or die ("cmd close: $!\n"); - } - else { - system ($cmd); - } -} - -sub set_out_type { - my ($opt) = lc (shift (@_)); - if ( $opt =~ /^png(mono|gray|16|256|16m)?$/ ) { - $format = 'png'; - $gs_format = $format.(defined $1 ? $1 : '16m'); - } - elsif ( $opt =~ /^gif(mono)?$/ ) { - $format = 'gif'; - $gs_format = $format.(defined $1 ? $1 : ''); - } - elsif ( $opt =~ /^(jpg|jpeg)(gray)?$/ ) { - $format = 'jpg'; - $gs_format = 'jpeg'.(defined $2 ? $2 : ''); - } - else { - print STDERR ("ASSERT ERROR: Invalid value to set_out_type: $opt\n"); - exit (1); - } -} - -sub handle_options { - my ($help) = 0; # handled locally - my ($ident) = 0; # handled locally - - # Process options. - if ( @ARGV > 0 && $ARGV[0] =~ /^[-+]/ ) { - usage () - unless GetOptions ('ident' => \$ident, - 'verbose' => \$verbose, - 'antialias|aa=i' => \$antialias, - 'noantialias|noaa' => sub { $antialias = 0 }, - 'scale=f' => \$scale, - 'width=i' => \$width, - 'height=i' => \$height, - 'output=s' => \$output, - 'png' => \&set_out_type, - 'pngmono' => \&set_out_type, - 'pnggray' => \&set_out_type, - 'png16' => \&set_out_type, - 'png256' => \&set_out_type, - 'png16m' => \&set_out_type, - 'jpg' => \&set_out_type, - 'jpggray' => \&set_out_type, - 'jpeg' => \&set_out_type, - 'jpeggray' => \&set_out_type, - 'gif' => \&set_out_type, - 'gifmono' => \&set_out_type, - 'mono!' => \$mono, - 'resolution=i' => \$res, - 'pbm!' => \$use_pbm, - 'trace' => \$trace, - 'help' => \$help, - 'debug' => \$debug) - && !$help; - } - print STDERR ("This is $my_package [$my_name $my_version]\n") - if $ident; - die ("Only one file argument is allowed when -output is used\n") - if @ARGV > 1 && defined $output; - die ("At least one input file name must be specified\n") - unless @ARGV; - die ("Antialias value must be 0, 1, 2, 4, or 8\n") - unless "$antialias" =~ /^[01248]$/; -} - -sub usage { - print STDERR < (the default), it produces PNG images by -default. Likewise, C defaults to GIF images and C -defaults to JPG. Note that the normal installation procedure will -I install C. - -It uses GhostScript to produce the images. Since modern GhostScript -programs do not support GIF anymore, GIF images are produced via the -Portable PixMap converters (PBM-package). In this case, a temporary -file is created, named after the output file, with the extension -replaced by ".ppm". It is deleted upon completion. - -=head1 ARGUMENTS - -B always requires at least one argument: the name of the EPS -file to be converted. It is possible to specify more than one file -name. This will cause all named files to be converted into separate -files, e.g., "C" will be converted to "C" and -so on. - -=over 4 - -=item B<-png -pngmono -pnggray -png16 -png256 -png16m> - -Each of these options will instruct Ghostscript to use the -corresponding bitmap generator, and supply a C<.png> default -extension for output files. - -=item B<-jpg -jpggray -jpeg -jpeggray> - -Same, but with a C<.jpg> default extension for output files. - -=item B<-gif -gifmono> - -Same, but with a C<.gif> default extension for output files. - -Note: Since modern Ghostscript versions no longer support the GIF -format due to copyright restrictions, B will request -Ghostscript to produce a Portable Bitmap File (.ppm or .pbm) instead -and run the B converter to produce the actual GIF file. - -=item B<-mono> - -This option will select monochrome (BW or gray) output. It forces the -Ghostscript driver to C, C, C, or C. - -=item B<-nomono> - -Produces colour images. This is the default. - -=item B<-width> I - -The desired width of the output image. - -If B<-height> is not specified, the image will be scaled proportionally. - -=item B<-height> I - -The desired height of the output image. - -If B<-width> is not specified, the image will be scaled proportionally. - -=item B<-resolution> I - -Specifies the resolution for the output image. This is the width, in -pixels, of the bitmap image for an EPS image of one inch wide (72 -PostScript points). - -Note that for best results, use the B<-width> and B<-height> options -instead. - -Default value is 82, which causes the converted image to be of more -or less the same size as the EPS image. On my screen, that is. - -=item B<-scale> I - -Specify a scaling factor. This may be a fractional number. - -For a one-inch EPS image, the resultant bitmap image will be -I times I. - -Note that for best results, use the B<-width> and B<-height> options -instead. - -=item B<-antialias> I - -Sets the antialiasing depth. I must be 0 (no antialiasing), 1, 2, -4, or 8. Default value is 4. - -=item B<-noantialias> - -Sets the antialiasing depth to 0. - -=item B<-pbm> - -Forces GIF conversion through the PBM converters. - -=item B<-nopbm> - -Forces GIF conversion through Ghostscript. - -=item B<-output> I - -Stores the output in this file. Only one input file may be supplied if -this option is specified. - -=item B<-help> - -Prints a help message and exits. - -=item B<-ident> - -Prints the program version before doing anything else. - -=item B<-verbose> - -Provides more verbose information. - -=back - -=head1 AUTHOR - -Johan Vromans, . - -=head1 BUGS - -GhostScript and, if required, the PBM package, need to be installed and -accessible through the user's C. - -GhostScript is assumed to be capable of handling all the image types -listed above. - -The EPS should be well-behaving. - -=head1 COPYRIGHT AND DISCLAIMER - -This program is Copyright 1994,2001 by Johan Vromans. -This program is free software; you can redistribute it and/or -modify it under the terms of the Perl Artistic License or the -GNU General Public License as published by the Free Software -Foundation; either version 2 of the License, or (at your option) any -later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -If you do not have a copy of the GNU General Public License write to -the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, -MA 02139, USA. - -=cut Property changes on: trunk/doc/eps2png ___________________________________________________________________ Deleted: svn:executable ## -1 +0,0 ## -* \ No newline at end of property Index: trunk/doc/refcard.pdf =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: trunk/doc/refcard.pdf =================================================================== --- trunk/doc/refcard.pdf (revision 1036) +++ trunk/doc/refcard.pdf (nonexistent) Property changes on: trunk/doc/refcard.pdf ___________________________________________________________________ Deleted: svn:mime-type ## -1 +0,0 ## -application/octet-stream \ No newline at end of property Index: trunk/doc-orig/Makefile =================================================================== --- trunk/doc-orig/Makefile (nonexistent) +++ trunk/doc-orig/Makefile (revision 1037) @@ -0,0 +1,148 @@ +## -*- makefile -*- +## +## COPYRIGHT +## +## PCB, interactive printed circuit board design +## Copyright (C) 1994,1995,1996 Thomas Nau +## +## This program is free software; you can redistribute it and/or modify +## it under the terms of the GNU General Public License as published by +## the Free Software Foundation; either version 2 of the License, or +## (at your option) any later version. +## +## This program is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with this program; if not, write to the Free Software +## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +## +## Contact addresses for paper mail and Email: +## Thomas Nau, Schlehenweg 15, 88471 Baustetten, Germany +## Thomas.Nau@rz.uni-ulm.de +## + +## not until it is fully fixed up in terms of building +##SUBDIRS= gs + +info_TEXINFOS= pcb.texi +pcb_TEXINFOS= ${inline_texi} ${pcb_output} ${tab_texi} ${images_output} + +dist_html_DATA= ${html_docs} ${pcb_output_inst} ${images_output_inst} + +dist_man_MANS= pcb.1 + +html_docs= ${info_TEXINFOS:.texi=.html} + +DVIS= + +# put the html manual into 1 file instead of multiple files? +AM_MAKEINFOHTMLFLAGS= --css-include=pcb.css --no-split + +EXTRA_DIST= \ + ascii2texi.awk \ + eps2png \ + extract-docs \ + refcard.tex \ + pcb.css \ + ${inline_texi} \ + ${pcb_files} \ + ${pcb_output_noinst} \ + ${tab_files} \ + ${tab_texi} \ + ${images} + +all: $(html_docs) + +# use this to avoid having the clean target delete pcb.{dvi,html,pdf,ps} +# which unfortunately deletes files which are part of the distfile +clean: + -rm -rf pcb.aux pcb.cp pcb.cps pcb.fn pcb.fns pcb.ky pcb.kys pcb.log pcb.pg \ + pcb.pgs pcb.tmp pcb.toc pcb.tp pcb.tps pcb.vr pcb.vrs + + +BUILT_SOURCES= ${tab_texi} ${pcb_output} ${inline_texi} +CLEANFILES= \ + refcard.aux refcard.log refcard.pdf \ + ${pcb_output} ${tab_texi} ${inline_texi} pcb.html \ + ${images_output} + +inline_texi= \ + options.texi \ + actions.texi \ + pcbfile.texi + +ASCII2TEXI= ${AWK} -f $(srcdir)/ascii2texi.awk ncol=3 + +# Tables +tab_files= \ + fractional_size.tab \ + letter_size.tab \ + metric_size.tab \ + wire_size.tab +tab_texi= ${tab_files:.tab=.texi} + +# PCB Drawings +pcb_files= \ + pad.pcb \ + puller.pcb \ + thermal.pcb \ + gcode.pcb + +pcb_output_noinst= \ + ${pcb_files:.pcb=.pdf} + +pcb_output_inst= \ + ${pcb_files:.pcb=.png} + +pcb_output= ${pcb_output_inst} ${pcb_output_noinst} + +# Additional images +images= \ + gcode_control_img.eps \ + gcode_tool_path.eps + +images_output_noinst= \ + ${images:.eps=.pdf} + +images_output_inst= \ + ${images:.eps=.png} + +images_output= ${images_output_noinst} ${images_output_inst} + +${inline_texi} : extracted-docs + +# no need to build these when building via a tarball. They're not used then +# anyway. +.PHONY : extracted-docs +extracted-docs : + ${PERL} $(srcdir)/extract-docs $(srcdir) + +SUFFIXES = .eps .pcb .pdf .png .tab .tex .html .texi + +.pcb.eps : + ${PCB} -x eps --only-visible --font-path $(top_srcdir)/src --eps-file $@ $< + +.pcb.png : + ${PCB} -x png --only-visible --font-path $(top_srcdir)/src --outfile $@ $< + +.eps.pdf : + ${PS2PDF} `${AWK} 'BEGIN{s=8}; /BoundingBox/ {printf("-r%d -g%dx%d", s*72, s*$$4, s*$$5);}' $<` $< $@ + +.tab.texi: + ${ASCII2TEXI} $< > $@ + +.tex.pdf: + ${PDFLATEX} $< + ${PDFLATEX} $< + ${PDFLATEX} $< + +.eps.png: + ${PERL} $(srcdir)/eps2png --png $< > $@ + +%.html: %.texi + rm $@ 2>/dev/null; true + makeinfo --html --css-include=pcb.css --no-split --output=$@ $^ + Index: trunk/doc-orig/README =================================================================== --- trunk/doc-orig/README (nonexistent) +++ trunk/doc-orig/README (revision 1037) @@ -0,0 +1,10 @@ +This is the original doc dir of pcb. + +For the modifications introduced by pcb-rnd, check ../doc-rnd + +Most of the original documentation is in texi; makeinfo fails to +produce pdf from pcb.texi and even generating html throws +a large amount of warnings. + +It may be that pcb-rnd will switch from texi to html for documentation +source format. Index: trunk/doc-orig/actions.texi =================================================================== --- trunk/doc-orig/actions.texi (nonexistent) +++ trunk/doc-orig/actions.texi (revision 1037) @@ -0,0 +1,3574 @@ +@c key actions +@c ./../src/action.c 225 + +Many actions take a @code{delta} parameter as the last parameter, +which is an amount to change something. That @code{delta} may include +units, as an additional parameter, such as @code{Action(Object,5,mm)}. +If no units are specified, the default is PCB's native units +(currently 1/100 mil). Also, if the delta is prefixed by @code{+} or +@code{-}, the size is increased or decreased by that amount. +Otherwise, the size size is set to the given amount. + +@example +Action(Object,5,mil) +Action(Object,+0.5,mm) +Action(Object,-1) +@end example + +Actions which take a @code{delta} parameter which do not accept all +these options will specify what they do take. + +@c ./../src/action.c 229 + +@macro pinshapes + +Pins, pads, and vias can have various shapes. All may be round. Pins +and pads may be square (obviously "square" pads are usually +rectangular). Pins and vias may be octagonal. When you change a +shape flag of an element, you actually change all of its pins and +pads. + +Note that the square flag takes precedence over the octagon flag, +thus, if both the square and octagon flags are set, the object is +square. When the square flag is cleared, the pins and pads will be +either round or, if the octagon flag is set, octagonal. + +@end macro + +@c ./../src/command.c 64 + +@macro colonaction + +This is one of the command box helper actions. While it is a regular +action and can be used like any other action, its name and syntax are +optimized for use with the command box (@code{:}) and thus the syntax +is documented for that purpose. + +@end macro + +@c ./../src/action.c 227 + +Many actions act on indicated objects on the board. They will have +parameters like @code{ToggleObject} or @code{SelectedVias} to indicate +what group of objects they act on. Unless otherwise specified, these +parameters are defined as follows: + +@table @code + +@item Object +@itemx ToggleObject +Affects the object under the mouse pointer. If this action is invoked +from a menu or script, the user will be prompted to click on an +object, which is then the object affected. + +@item Selected +@itemx SelectedObjects + +Affects all objects which are currently selected. At least, all +selected objects for which the given action makes sense. + +@item SelectedPins +@itemx SelectedVias +@itemx Selected@var{Type} +@itemx @i{etc} +Affects all objects which are both selected and of the @var{Type} specified. + +@end table + + +@menu +* core actions:: +* common actions:: +* gtk actions:: +* lesstif actions:: +@end menu + +@node core actions +@section Core actions +@menu +* AddRats Action:: Add one or more rat lines to the board. +* ApplyVendor Action:: Applies the currently loaded vendor drill table to the current design. +* Atomic Action:: Save or restore the undo serial number. +* Attributes Action:: Let the user edit the attributes of the layout, current or given +layer, or selected element. +* AutoPlaceSelected Action:: Auto-place selected components. +* AutoRoute Action:: Auto-route some or all rat lines. +* ChangeClearSize Action:: Changes the clearance size of objects. +* ChangeDrillSize Action:: Changes the drilling hole size of objects. +* ChangeFlag Action:: Sets or clears flags on objects. +* ChangeHole Action:: Changes the hole flag of objects. +* ChangeJoin Action:: Changes the join (clearance through polygons) of objects. +* ChangeName Action:: Sets the name of objects. +* ChangeOctagon Action:: Changes the octagon-flag of pins and vias. +* ChangePaste Action:: Changes the no paste flag of objects. +* ChangePinName Action:: Sets the name of a specific pin on a specific element. +* ChangeSize Action:: Changes the size of objects. +* ChangeSquare Action:: Changes the square flag of pins and pads. +* ClearOctagon Action:: Clears the octagon-flag of pins and vias. +* ClearSquare Action:: Clears the square-flag of pins and pads. +* ClrFlag Action:: Clears flags on objects. +* Connection Action:: Searches connections of the object at the cursor position. +* Delete Action:: Delete stuff. +* DeleteRats Action:: Delete rat lines. +* DisableVendor Action:: Disables automatic drill size mapping. +* DisperseElements Action:: Disperses elements. +* Display Action:: Several display-related actions. +* djopt Action:: Perform various optimizations on the current board. +* DRC Action:: Invoke the DRC check. +* DumpLibrary Action:: Display the entire contents of the libraries. +* elementlist Action:: Adds the given element if it doesn't already exist. +* elementsetattr Action:: Sets or clears an element-specific attribute. +* EnableVendor Action:: Enables automatic drill size mapping. +* execcommand Action:: Runs a command. +* ExecuteFile Action:: Run actions from the given file. +* Flip Action:: Flip an element to the opposite side of the board. +* FontEdit Action:: Convert the current font to a PCB for editing. +* FontSave Action:: Convert the current PCB back to a font. +* FreeRotateBuffer Action:: Rotates the current paste buffer contents by the specified angle. The +angle is given in degrees. If no angle is given, the user is prompted +for one. + +* GlobalPuller Action:: Pull all traces tight. +* h Action:: Print a help message for commands. +* Import Action:: Import schematics. +* l Action:: Loads layout data. +* le Action:: Loads an element into the current buffer. +* LoadFootprint Action:: Loads a single footprint by name. +* LoadFrom Action:: Load layout data from a file. +* LoadVendorFrom Action:: Loads the specified vendor resource file. +* m Action:: Loads a layout into the current buffer. +* MarkCrosshair Action:: Set/Reset the Crosshair mark. +* Message Action:: Writes a message to the log window. +* MinClearGap Action:: Ensures that polygons are a minimum distance from objects. +* MinMaskGap Action:: Ensures the mask is a minimum distance from pins and pads. +* Mode Action:: Change or use the tool mode. +* MorphPolygon Action:: Converts dead polygon islands into separate polygons. +* MoveLayer Action:: Moves/Creates/Deletes Layers. +* MoveObject Action:: Moves the object under the crosshair. +* MoveToCurrentLayer Action:: Moves objects to the current layer. +* Netlist Action:: Perform various actions on netlists. +* New Action:: Starts a new layout. +* OptAutoOnly Action:: Toggles the optimize-only-autorouted flag. +* PasteBuffer Action:: Various operations on the paste buffer. +* Polygon Action:: Some polygon related stuff. +* Puller Action:: Pull an arc-line junction tight. +* q Action:: Quits the application after confirming. +* q! Action:: Quits the application without confirming. +* Quit Action:: Quits the application after confirming. +* Redo Action:: Redo recent``undo''operations. +* RemoveSelected Action:: Removes any selected objects. +* Renumber Action:: Renumber all elements. The changes will be recorded to filename +for use in backannotating these changes to the schematic. +* Report Action:: Produce various report. +* ReportDialog Action:: Report on the object under the crosshair +* RipUp Action:: Ripup auto-routed tracks, or convert an element to parts. +* rn Action:: Reads netlist. +* RouteStyle Action:: Copies the indicated routing style into the current sizes. +* s Action:: Saves layout data. +* SaveSettings Action:: Saves settings. +* SaveTo Action:: Saves data to a file. +* Select Action:: Toggles or sets the selection. +* SetFlag Action:: Sets flags on objects. +* SetOctagon Action:: Sets the octagon-flag of objects. +* SetSame Action:: Sets current layer and sizes to match indicated item. +* SetSquare Action:: sets the square-flag of objects. +* SetThermal Action:: Set the thermal (on the current layer) of pins or vias to the given style. +Style = 0 means no thermal. +Style = 1 has diagonal fingers with sharp edges. +Style = 2 has horizontal and vertical fingers with sharp edges. +Style = 3 is a solid connection to the plane.Style = 4 has diagonal fingers with rounded edges. +Style = 5 has horizontal and vertical fingers with rounded edges. + +* SetValue Action:: Change various board-wide values and sizes. +* ToggleHideName Action:: Toggles the visibility of element names. +* ToggleVendor Action:: Toggles the state of automatic drill size mapping. +* Undo Action:: Undo recent changes. +* UnloadVendor Action:: Unloads the current vendor drill mapping table. +* Unselect Action:: Unselects the object at the pointer location or the specified objects. +* w Action:: Saves layout data. +* wq Action:: Saves the layout data and quits. +@end menu +@node AddRats Action +@subsection AddRats +@c key AddRats in hid +@cartouche +@format +AddRats(AllRats|SelectedRats|Close)@end format +@end cartouche + +Add one or more rat lines to the board. +@c ./../src/action.c 3310 + +@table @code + +@item AllRats +Create rat lines for all loaded nets that aren't already connected on +with copper. + +@item SelectedRats +Similarly, but only add rat lines for nets connected to selected pins +and pads. + +@item Close +Selects the shortest unselected rat on the board. + +@end table + + +@node ApplyVendor Action +@subsection ApplyVendor +@c key ApplyVendor in hid +@cartouche +@format +ApplyVendor()@end format +@end cartouche + +Applies the currently loaded vendor drill table to the current design. +@c ./../src/vendor.c 112 +@cindex vendor map +@cindex vendor drill table +@findex ApplyVendor() + +This will modify all of your drill holes to match the list of allowed +sizes for your vendor. + +@node Atomic Action +@subsection Atomic +@c key Atomic in hid +@cartouche +@format +Atomic(Save|Restore|Close|Block)@end format +@end cartouche + +Save or restore the undo serial number. +@c ./../src/action.c 1720 + +This action allows making multiple-action bindings into an atomic +operation that will be undone by a single Undo command. For example, +to optimize rat lines, you'd delete the rats and re-add them. To +group these into a single undo, you'd want the deletions and the +additions to have the same undo serial number. So, you @code{Save}, +delete the rats, @code{Restore}, add the rats - using the same serial +number as the deletes, then @code{Block}, which checks to see if the +deletions or additions actually did anything. If not, the serial +number is set to the saved number, as there's nothing to undo. If +something did happen, the serial number is incremented so that these +actions are counted as a single undo step. + +@table @code + +@item Save +Saves the undo serial number. + +@item Restore +Returns it to the last saved number. + +@item Close +Sets it to 1 greater than the last save. + +@item Block +Does a Restore if there was nothing to undo, else does a Close. + +@end table + + +@node Attributes Action +@subsection Attributes +@c key Attributes in hid +@cartouche +@format +Attributes(Layout|Layer|Element) +Attributes(Layer,layername)@end format +@end cartouche + +Let the user edit the attributes of the layout, current or given +layer, or selected element. +@c ./../src/action.c 6761 + +This just pops up a dialog letting the user edit the attributes of the +pcb, an element, or a layer. + + +@node AutoPlaceSelected Action +@subsection AutoPlaceSelected +@c key AutoPlaceSelected in hid +@cartouche +@format +AutoPlaceSelected()@end format +@end cartouche + +Auto-place selected components. +@c ./../src/action.c 3450 + +Attempts to re-arrange the selected components such that the nets +connecting them are minimized. Note that you cannot undo this. + + +@node AutoRoute Action +@subsection AutoRoute +@c key AutoRoute in hid +@cartouche +@format +AutoRoute(AllRats|SelectedRats)@end format +@end cartouche + +Auto-route some or all rat lines. +@c ./../src/action.c 3471 + +@table @code + +@item AllRats +Attempt to autoroute all rats. + +@item SelectedRats +Attempt to autoroute the selected rats. + +@end table + +Before autorouting, it's important to set up a few things. First, +make sure any layers you aren't using are disabled, else the +autorouter may use them. Next, make sure the current line and via +styles are set accordingly. Last, make sure "new lines clear +polygons" is set, in case you eventually want to add a copper pour. + +Autorouting takes a while. During this time, the program may not be +responsive. + + +@node ChangeClearSize Action +@subsection ChangeClearSize +@c key ChangeClearSize in hid +@cartouche +@format +ChangeClearSize(Object, delta) +ChangeClearSize(SelectedPins|SelectedPads|SelectedVias, delta) +ChangeClearSize(SelectedLines|SelectedArcs, delta +ChangeClearSize(Selected|SelectedObjects, delta)@end format +@end cartouche + +Changes the clearance size of objects. +@c ./../src/action.c 3686 + +If the solder mask is currently showing, this action changes the +solder mask clearance. If the mask is not showing, this action +changes the polygon clearance. + + +@node ChangeDrillSize Action +@subsection ChangeDrillSize +@c key ChangeDrillSize in hid +@cartouche +@format +ChangeDrillSize(Object, delta) +ChangeDrillSize(SelectedPins|SelectedVias|Selected|SelectedObjects, delta)@end format +@end cartouche + +Changes the drilling hole size of objects. +@c ./../src/action.c 3630 + + +@node ChangeFlag Action +@subsection ChangeFlag +@c key ChangeFlag in hid +@cartouche +@format +ChangeFlag(Object|Selected|SelectedObjects, flag, value) +ChangeFlag(SelectedLines|SelectedPins|SelectedVias, flag, value) +ChangeFlag(SelectedPads|SelectedTexts|SelectedNames, flag, value) +ChangeFlag(SelectedElements, flag, value) +flag = square | octagon | thermal | join +value = 0 | 1@end format +@end cartouche + +Sets or clears flags on objects. +@c ./../src/action.c 5750 + +Toggles the given flag on the indicated object(s). The flag may be +one of the flags listed above (square, octagon, thermal, join). The +value may be the number 0 or 1. If the value is 0, the flag is +cleared. If the value is 1, the flag is set. + + +@node ChangeHole Action +@subsection ChangeHole +@c key ChangeHole in hid +@cartouche +@format +ChangeHole(ToggleObject|Object|SelectedVias|Selected)@end format +@end cartouche + +Changes the hole flag of objects. +@c ./../src/action.c 4571 + +The "hole flag" of a via determines whether the via is a +plated-through hole (not set), or an unplated hole (set). + + +@node ChangeJoin Action +@subsection ChangeJoin +@c key ChangeJoin in hid +@cartouche +@format +ChangeJoin(ToggleObject|SelectedLines|SelectedArcs|Selected)@end format +@end cartouche + +Changes the join (clearance through polygons) of objects. +@c ./../src/action.c 4199 + +The join flag determines whether a line or arc, drawn to intersect a +polygon, electrically connects to the polygon or not. When joined, +the line/arc is simply drawn over the polygon, making an electrical +connection. When not joined, a gap is drawn between the line and the +polygon, insulating them from each other. + + +@node ChangeName Action +@subsection ChangeName +@c key ChangeName in hid +@cartouche +@format +ChangeName(Object) +ChangeName(Layout|Layer)@end format +@end cartouche + +Sets the name of objects. +@c ./../src/action.c 4005 + +@table @code + +@item Object +Changes the name of the element under the cursor. + +@item Layout +Changes the name of the layout. This is printed on the fab drawings. + +@item Layer +Changes the name of the currently active layer. + +@end table + + +@node ChangeOctagon Action +@subsection ChangeOctagon +@c key ChangeOctagon in hid +@cartouche +@format +ChangeOctagon(Object|ToggleObject|SelectedObjects|Selected) +ChangeOctagon(SelectedElements|SelectedPins|SelectedVias)@end format +@end cartouche + +Changes the octagon-flag of pins and vias. +@c ./../src/action.c 4403 + +@pinshapes + + +@node ChangePaste Action +@subsection ChangePaste +@c key ChangePaste in hid +@cartouche +@format +ChangePaste(ToggleObject|Object|SelectedPads|Selected)@end format +@end cartouche + +Changes the no paste flag of objects. +@c ./../src/action.c 4611 + +The "no paste flag" of a pad determines whether the solderpaste + stencil will have an opening for the pad (no set) or if there wil be + no solderpaste on the pad (set). This is used for things such as + fiducial pads. + + +@node ChangePinName Action +@subsection ChangePinName +@c key ChangePinName in hid +@cartouche +@format +ChangePinName(ElementName,PinNumber,PinName)@end format +@end cartouche + +Sets the name of a specific pin on a specific element. +@c ./../src/action.c 3924 + +This can be especially useful for annotating pin names from a +schematic to the layout without requiring knowledge of the pcb file +format. + +@example +ChangePinName(U3, 7, VCC) +@end example + + +@node ChangeSize Action +@subsection ChangeSize +@c key ChangeSize in hid +@cartouche +@format +ChangeSize(Object, delta) +ChangeSize(SelectedObjects|Selected, delta) +ChangeSize(SelectedLines|SelectedPins|SelectedVias, delta) +ChangeSize(SelectedPads|SelectedTexts|SelectedNames, delta) +ChangeSize(SelectedElements, delta)@end format +@end cartouche + +Changes the size of objects. +@c ./../src/action.c 3543 + +For lines and arcs, this changes the width. For pins and vias, this +changes the overall diameter of the copper annulus. For pads, this +changes the width and, indirectly, the length. For texts and names, +this changes the scaling factor. For elements, this changes the width +of the silk layer lines and arcs for this element. + + +@node ChangeSquare Action +@subsection ChangeSquare +@c key ChangeSquare in hid +@cartouche +@format +ChangeSquare(ToggleObject) +ChangeSquare(SelectedElements|SelectedPins) +ChangeSquare(Selected|SelectedObjects)@end format +@end cartouche + +Changes the square flag of pins and pads. +@c ./../src/action.c 4250 + +Note that @code{Pins} means both pins and pads. + +@pinshapes + + +@node ClearOctagon Action +@subsection ClearOctagon +@c key ClearOctagon in hid +@cartouche +@format +ClearOctagon(ToggleObject|Object|SelectedObjects|Selected) +ClearOctagon(SelectedElements|SelectedPins|SelectedVias)@end format +@end cartouche + +Clears the octagon-flag of pins and vias. +@c ./../src/action.c 4515 + +@pinshapes + + +@node ClearSquare Action +@subsection ClearSquare +@c key ClearSquare in hid +@cartouche +@format +ClearSquare(ToggleObject|SelectedElements|SelectedPins)@end format +@end cartouche + +Clears the square-flag of pins and pads. +@c ./../src/action.c 4352 + +Note that @code{Pins} means pins and pads. + +@pinshapes + + +@node ClrFlag Action +@subsection ClrFlag +@c key ClrFlag in hid +@cartouche +@format +ClrFlag(Object|Selected|SelectedObjects, flag) +ClrFlag(SelectedLines|SelectedPins|SelectedVias, flag) +ClrFlag(SelectedPads|SelectedTexts|SelectedNames, flag) +ClrFlag(SelectedElements, flag) +flag = square | octagon | thermal | join@end format +@end cartouche + +Clears flags on objects. +@c ./../src/action.c 5733 + +Turns the given flag off, regardless of its previous setting. See +@code{ChangeFlag}. + +@example +ClrFlag(SelectedLines,join) +@end example + + +@node Connection Action +@subsection Connection +@c key Connection in hid +@cartouche +@format +Connection(Find|ResetLinesAndPolygons|ResetPinsAndVias|Reset)@end format +@end cartouche + +Searches connections of the object at the cursor position. +@c ./../src/action.c 2093 + +Connections found with this action will be highlighted in the +``connected-color'' color and will have the ``found'' flag set. + +@table @code + +@item Find +The net under the cursor is ``found''. + +@item ResetLinesAndPolygons +Any ``found'' lines and polygons are marked ``not found''. + +@item ResetPinsAndVias +Any ``found'' pins and vias are marked ``not found''. + +@item Reset +All ``found'' objects are marked ``not found''. + +@end table + + +@node Delete Action +@subsection Delete +@c key Delete in hid +@cartouche +@format +Delete(Object|Selected) +Delete(AllRats|SelectedRats)@end format +@end cartouche + +Delete stuff. +@c ./../src/action.c 3371 + + +@node DeleteRats Action +@subsection DeleteRats +@c key DeleteRats in hid +@cartouche +@format +DeleteRats(AllRats|Selected|SelectedRats)@end format +@end cartouche + +Delete rat lines. +@c ./../src/action.c 3418 + + +@node DisableVendor Action +@subsection DisableVendor +@c key DisableVendor in hid +@cartouche +@format +DisableVendor()@end format +@end cartouche + +Disables automatic drill size mapping. +@c ./../src/vendor.c 161 + +@cindex vendor map +@cindex vendor drill table +@findex DisableVendor() + +When drill mapping is enabled, new instances of pins and vias will +have their drill holes mapped to one of the allowed drill sizes +specified in the currently loaded vendor drill table. + + +@node DisperseElements Action +@subsection DisperseElements +@c key DisperseElements in hid +@cartouche +@format +DisperseElements(All|Selected)@end format +@end cartouche + +Disperses elements. +@c ./../src/action.c 2146 + +Normally this is used when starting a board, by selecting all elements +and then dispersing them. This scatters the elements around the board +so that you can pick individual ones, rather than have all the +elements at the same 0,0 coordinate and thus impossible to choose +from. + + +@node Display Action +@subsection Display +@c key Display in hid +@cartouche +@format +Display(NameOnPCB|Description|Value) +Display(Grid|Redraw) +Display(CycleClip|CycleCrosshair|Toggle45Degree|ToggleStartDirection) +Display(ToggleGrid|ToggleRubberBandMode|ToggleUniqueNames) +Display(ToggleMask|ToggleName|ToggleClearLine|ToggleFullPoly|ToggleSnapPin) +Display(ToggleThindraw|ToggleThindrawPoly|ToggleOrthoMove|ToggleLocalRef) +Display(ToggleCheckPlanes|ToggleShowDRC|ToggleAutoDRC) +Display(ToggleLiveRoute|LockNames|OnlyNames) +Display(Pinout|PinOrPadName)@end format +@end cartouche + +Several display-related actions. +@c ./../src/action.c 2262 + +@table @code + +@item NameOnPCB +@item Description +@item Value +Specify whether all elements show their name, description, or value. + +@item Redraw +Redraw the whole board. + +@item Toggle45Degree +When clear, lines can be drawn at any angle. When set, lines are +restricted to multiples of 45 degrees and requested lines may be +broken up according to the clip setting. + +@item CycleClip +Changes the way lines are restricted to 45 degree increments. The +various settings are: straight only, orthogonal then angled, and angled +then orthogonal. If AllDirections is set, this action disables it. + +@item CycleCrosshair +Changes crosshair drawing. Crosshair may accept form of 4-ray, +8-ray and 12-ray cross. + +@item ToggleRubberBandMode +If set, moving an object moves all the lines attached to it too. + +@item ToggleStartDirection +If set, each time you set a point in a line, the Clip toggles between +orth-angle and angle-ortho. + +@item ToggleUniqueNames +If set, you will not be permitted to change the name of an element to +match that of another element. + +@item ToggleSnapPin +If set, pin centers and pad end points are treated as additional grid +points that the cursor can snap to. + +@item ToggleLocalRef +If set, the mark is automatically set to the beginning of any move, so +you can see the relative distance you've moved. + +@item ToggleThindraw +If set, objects on the screen are drawn as outlines (lines are drawn +as center-lines). This lets you see line endpoints hidden under pins, +for example. + +@item ToggleThindrawPoly +If set, polygons on the screen are drawn as outlines. + +@item ToggleShowDRC +If set, pending objects (i.e. lines you're in the process of drawing) +will be drawn with an outline showing how far away from other copper +you need to be. + +@item ToggleLiveRoute +If set, the progress of the autorouter will be visible on the screen. + +@item ToggleAutoDRC +If set, you will not be permitted to make connections which violate +the current DRC and netlist settings. + +@item ToggleCheckPlanes +If set, lines and arcs aren't drawn, which usually leaves just the +polygons. If you also disable all but the layer you're interested in, +this allows you to check for isolated regions. + +@item ToggleOrthoMove +If set, the crosshair is only allowed to move orthogonally from its +previous position. I.e. you can move an element or line up, down, +left, or right, but not up+left or down+right. + +@item ToggleName +Selects whether the pinouts show the pin names or the pin numbers. + +@item ToggleLockNames +If set, text will ignore left mouse clicks and actions that work on +objects under the mouse. You can still select text with a lasso (left +mouse drag) and perform actions on the selection. + +@item ToggleOnlyNames +If set, only text will be sensitive for mouse clicks and actions that +work on objects under the mouse. You can still select other objects +with a lasso (left mouse drag) and perform actions on the selection. + +@item ToggleMask +Turns the solder mask on or off. + +@item ToggleClearLine +When set, the clear-line flag causes new lines and arcs to have their +``clear polygons'' flag set, so they won't be electrically connected +to any polygons they overlap. + +@item ToggleFullPoly +When set, the full-poly flag causes new polygons to have their +``full polygon'' flag set, so all parts of them will be displayed +instead of only the biggest one. + +@item ToggleGrid +Resets the origin of the current grid to be wherever the mouse pointer +is (not where the crosshair currently is). If you provide two numbers +after this, the origin is set to that coordinate. + +@item Grid +Toggles whether the grid is displayed or not. + +@item Pinout +Causes the pinout of the element indicated by the cursor to be +displayed, usually in a separate window. + +@item PinOrPadName +Toggles whether the names of pins, pads, or (yes) vias will be +displayed. If the cursor is over an element, all of its pins and pads +are affected. + +@end table + + +@node djopt Action +@subsection djopt +@c key djopt in hid +@cartouche +@format +djopt(debumpify|unjaggy|simple|vianudge|viatrim|orthopull) +djopt(auto) - all of the above +djopt(miter)@end format +@end cartouche + +Perform various optimizations on the current board. +@c ./../src/djopt.c 2853 + +The different types of optimizations change your board in order to +reduce the total trace length and via count. + +@table @code + +@item debumpify +Looks for U-shaped traces that can be shortened or eliminated. + +@item unjaggy +Looks for corners which could be flipped to eliminate one or more +corners (i.e. jaggy lines become simpler). + +@item simple +Removing uneeded vias, replacing two or more trace segments in a row +with a single segment. This is usually performed automatically after +other optimizations. + +@item vianudge +Looks for vias where all traces leave in the same direction. Tries to +move via in that direction to eliminate one of the traces (and thus a +corner). + +@item viatrim +Looks for traces that go from via to via, where moving that trace to a +different layer eliminates one or both vias. + +@item orthopull +Looks for chains of traces all going in one direction, with more +traces orthogonal on one side than on the other. Moves the chain in +that direction, causing a net reduction in trace length, possibly +eliminating traces and/or corners. + +@item splitlines +Looks for lines that pass through vias, pins, or pads, and splits them +into separate lines so they can be managed separately. + +@item auto +Performs the above options, repeating until no further optimizations +can be made. + +@item miter +Replaces 90 degree corners with a pair of 45 degree corners, to reduce +RF losses and trace length. + +@end table + + +@node DRC Action +@subsection DRC +@c key DRC in hid +@cartouche +@format +DRC()@end format +@end cartouche + +Invoke the DRC check. +@c ./../src/action.c 1755 + +Note that the design rule check uses the current board rule settings, +not the current style settings. + + +@node DumpLibrary Action +@subsection DumpLibrary +@c key DumpLibrary in hid +@cartouche +@format +DumpLibrary()@end format +@end cartouche + +Display the entire contents of the libraries. +@c ./../src/action.c 1791 + + + +@node elementlist Action +@subsection elementlist +@c key elementlist in hid +@cartouche +@format +ElementList(Start|Done|Need,,,)@end format +@end cartouche + +Adds the given element if it doesn't already exist. +@c ./../src/action.c 5983 + +@table @code + +@item Start +Indicates the start of an element list; call this before any Need +actions. + +@item Need +Searches the board for an element with a matching refdes. + +If found, the value and footprint are updated. + +If not found, a new element is created with the given footprint and value. + +@item Done +Compares the list of elements needed since the most recent +@code{start} with the list of elements actually on the board. Any +elements that weren't listed are selected, so that the user may delete +them. + +@end table + + +@node elementsetattr Action +@subsection elementsetattr +@c key elementsetattr in hid +@cartouche +@format +ElementSetAttr(refdes,name[,value])@end format +@end cartouche + +Sets or clears an element-specific attribute. +@c ./../src/action.c 6176 + +If a value is specified, the named attribute is added (if not already +present) or changed (if it is) to the given value. If the value is +not specified, the given attribute is removed if present. + + +@node EnableVendor Action +@subsection EnableVendor +@c key EnableVendor in hid +@cartouche +@format +EnableVendor()@end format +@end cartouche + +Enables automatic drill size mapping. +@c ./../src/vendor.c 146 + +@cindex vendor map +@cindex vendor drill table +@findex EnableVendor() + +When drill mapping is enabled, new instances of pins and vias will +have their drill holes mapped to one of the allowed drill sizes +specified in the currently loaded vendor drill table. To enable drill +mapping, a vendor resource file containing a drill table must be +loaded first. + + +@node execcommand Action +@subsection execcommand +@c key execcommand in hid +@cartouche +@format +ExecCommand(command)@end format +@end cartouche + +Runs a command. +@c ./../src/action.c 6234 + +Runs the given command, which is a system executable. + + +@node ExecuteFile Action +@subsection ExecuteFile +@c key ExecuteFile in hid +@cartouche +@format +ExecuteFile(filename)@end format +@end cartouche + +Run actions from the given file. +@c ./../src/action.c 5861 + +Lines starting with @code{#} are ignored. + + +@node Flip Action +@subsection Flip +@c key Flip in hid +@cartouche +@format +Flip(Object|Selected|SelectedElements)@end format +@end cartouche + +Flip an element to the opposite side of the board. +@c ./../src/action.c 1841 + +Note that the location of the element will be symmetric about the +cursor location; i.e. if the part you are pointing at will still be at +the same spot once the element is on the other side. When flipping +multiple elements, this retains their positions relative to each +other, not their absolute positions on the board. + + +@node FontEdit Action +@subsection FontEdit +@c key FontEdit in hid +@cartouche +@format +FontEdit()@end format +@end cartouche + +Convert the current font to a PCB for editing. +@c ./../src/fontmode.c 73 + + +@node FontSave Action +@subsection FontSave +@c key FontSave in hid +@cartouche +@format +FontSave()@end format +@end cartouche + +Convert the current PCB back to a font. +@c ./../src/fontmode.c 173 + + +@node FreeRotateBuffer Action +@subsection FreeRotateBuffer +@c key FreeRotateBuffer in hid +@cartouche +@format +FreeRotateBuffer([Angle])@end format +@end cartouche + +Rotates the current paste buffer contents by the specified angle. The +angle is given in degrees. If no angle is given, the user is prompted +for one. + +@c ./../src/buffer.c 1370 + +Rotates the contents of the pastebuffer by an arbitrary angle. If no +angle is given, the user is prompted for one. + + +@node GlobalPuller Action +@subsection GlobalPuller +@c key GlobalPuller in hid +@cartouche +@format +GlobalPuller()@end format +@end cartouche + +Pull all traces tight. +@c ./../src/puller.c 534 + + +@node h Action +@subsection h +@c key h in hid +@cartouche +@format +h@end format +@end cartouche + +Print a help message for commands. +@c ./../src/command.c 72 + +@colonaction + + +@node Import Action +@subsection Import +@c key Import in hid +@cartouche +@format +Import() +Import([gnetlist|make[,source,source,...]]) +Import(setnewpoint[,(mark|center|X,Y)]) +Import(setdisperse,D,units) +@end format +@end cartouche + +Import schematics. +@c ./../src/action.c 6464 + +Imports element and netlist data from the schematics (or some other +source). The first parameter, which is optional, is the mode. If not +specified, the @code{import::mode} attribute in the PCB is used. +@code{gnetlist} means gnetlist is used to obtain the information from +the schematics. @code{make} invokes @code{make}, assuming the user +has a @code{Makefile} in the current directory. The @code{Makefile} +will be invoked with the following variables set: + +@table @code + +@item PCB +The name of the .pcb file + +@item SRCLIST +A space-separated list of source files + +@item OUT +The name of the file in which to put the command script, which may +contain any @pcb{} actions. By default, this is a temporary file +selected by @pcb{}, but if you specify an @code{import::outfile} +attribute, that file name is used instead (and not automatically +deleted afterwards). + +@end table + +The target specified to be built is the first of these that apply: + +@itemize @bullet + +@item +The target specified by an @code{import::target} attribute. + +@item +The output file specified by an @code{import::outfile} attribute. + +@item +If nothing else is specified, the target is @code{pcb_import}. + +@end itemize + +If you specify an @code{import::makefile} attribute, then "-f " will be added to the command line. + +If you specify the mode, you may also specify the source files +(schematics). If you do not specify any, the list of schematics is +obtained by reading the @code{import::src@var{N}} attributes (like +@code{import::src0}, @code{import::src1}, etc). + +For compatibility with future extensions to the import file format, +the generated file @emph{must not} start with the two characters +@code{#%}. + +If a temporary file is needed the @code{TMPDIR} environment variable +is used to select its location. + +Note that the programs @code{gnetlist} and @code{make} may be +overridden by the user via the @code{make-program} and @code{gnetlist} +@code{pcb} settings (i.e. in @code{~/.pcb/settings} or on the command +line). + +If @pcb{} cannot determine which schematic(s) to import from, the GUI +is called to let user choose (see @code{ImportGUI()}). + +Note that Import() doesn't delete anything - after an Import, elements +which shouldn't be on the board are selected and may be removed once +it's determined that the deletion is appropriate. + +If @code{Import()} is called with @code{setnewpoint}, then the location +of new components can be specified. This is where parts show up when +they're added to the board. The default is the center of the board. + +@table @code + +@item Import(setnewpoint) + +Prompts the user to click on the board somewhere, uses that point. If +called by a hotkey, uses the current location of the crosshair. + +@item Import(setnewpoint,mark) + +Uses the location of the mark. If no mark is present, the point is +not changed. + +@item Import(setnewpoint,center) + +Resets the point to the center of the board. + +@item Import(setnewpoint,X,Y,units) + +Sets the point to the specific coordinates given. Example: +@code{Import(setnewpoint,50,25,mm)} + +@end table + +Note that the X and Y locations are stored in attributes named +@code{import::newX} and @code{import::newY} so you could change them +manually if you wished. + +Calling @code{Import(setdisperse,D,units)} sets how much the newly +placed elements are dispersed relative to the set point. For example, +@code{Import(setdisperse,10,mm)} will offset each part randomly up to +10mm away from the point. The default dispersion is 1/10th of the +smallest board dimension. Dispersion is saved in the +@code{import::disperse} attribute. + + +@node l Action +@subsection l +@c key l in hid +@cartouche +@format +l [name]@end format +@end cartouche + +Loads layout data. +@c ./../src/command.c 99 + +Loads a new datafile (layout) and, if confirmed, overwrites any +existing unsaved data. The filename and the searchpath +(@emph{filePath}) are passed to the command defined by +@emph{fileCommand}. If no filename is specified a file select box +will popup. + +@colonaction + + +@node le Action +@subsection le +@c key le in hid +@cartouche +@format +le [name]@end format +@end cartouche + +Loads an element into the current buffer. +@c ./../src/command.c 129 + +The filename and the searchpath (@emph{elementPath}) are passed to the +command defined by @emph{elementCommand}. If no filename is specified +a file select box will popup. + +@colonaction + + +@node LoadFootprint Action +@subsection LoadFootprint +@c key LoadFootprint in hid +@cartouche +@format +LoadFootprint(filename[,refdes,value])@end format +@end cartouche + +Loads a single footprint by name. +@c ./../src/buffer.c 809 + +Loads a single footprint by name, rather than by reference or through +the library. If a refdes and value are specified, those are inserted +into the footprint as well. The footprint remains in the paste buffer. + + +@node LoadFrom Action +@subsection LoadFrom +@c key LoadFrom in hid +@cartouche +@format +LoadFrom(Layout|LayoutToBuffer|ElementToBuffer|Netlist|Revert,filename)@end format +@end cartouche + +Load layout data from a file. +@c ./../src/action.c 5031 + +This action assumes you know what the filename is. The various GUIs +should have a similar @code{Load} action where the filename is +optional, and will provide their own file selection mechanism to let +you choose the file name. + +@table @code + +@item Layout +Loads an entire PCB layout, replacing the current one. + +@item LayoutToBuffer +Loads an entire PCB layout to the paste buffer. + +@item ElementToBuffer +Loads the given element file into the paste buffer. Element files +contain only a single @code{Element} definition, such as the +``newlib'' library uses. + +@item Netlist +Loads a new netlist, replacing any current netlist. + +@item Revert +Re-loads the current layout from its disk file, reverting any changes +you may have made. + +@end table + + +@node LoadVendorFrom Action +@subsection LoadVendorFrom +@c key LoadVendorFrom in hid +@cartouche +@format +LoadVendorFrom(filename)@end format +@end cartouche + +Loads the specified vendor resource file. +@c ./../src/vendor.c 201 + +@cindex vendor map +@cindex vendor drill table +@findex LoadVendorFrom() + +@table @var +@item filename +Name of the vendor resource file. If not specified, the user will +be prompted to enter one. +@end table + + +@node m Action +@subsection m +@c key m in hid +@cartouche +@format +m [name]@end format +@end cartouche + +Loads a layout into the current buffer. +@c ./../src/command.c 157 + +The filename and the searchpath (@emph{filePath}) are passed to the +command defined by @emph{fileCommand}. +If no filename is specified a file select box will popup. + +@colonaction + + +@node MarkCrosshair Action +@subsection MarkCrosshair +@c key MarkCrosshair in hid +@cartouche +@format +MarkCrosshair() +MarkCrosshair(Center)@end format +@end cartouche + +Set/Reset the Crosshair mark. +@c ./../src/action.c 3502 + +The ``mark'' is a small X-shaped target on the display which is +treated like a second origin (the normal origin is the upper let +corner of the board). The GUI will display a second set of +coordinates for this mark, which tells you how far you are from it. + +If no argument is given, the mark is toggled - disabled if it was +enabled, or enabled at the current cursor position of disabled. If +the @code{Center} argument is given, the mark is moved to the current +cursor location. + + +@node Message Action +@subsection Message +@c key Message in hid +@cartouche +@format +Message(message)@end format +@end cartouche + +Writes a message to the log window. +@c ./../src/action.c 1886 + +This action displays a message to the log window. This action is primarily +provided for use by other programs which may interface with PCB. If +multiple arguments are given, each one is sent to the log window +followed by a newline. + + +@node MinClearGap Action +@subsection MinClearGap +@c key MinClearGap in hid +@cartouche +@format +MinClearGap(delta) +MinClearGap(Selected, delta)@end format +@end cartouche + +Ensures that polygons are a minimum distance from objects. +@c ./../src/action.c 3827 + +Checks all specified objects, and increases the polygon clearance if +needed to ensure a minimum distance between their edges and the +polygon edges. + + +@node MinMaskGap Action +@subsection MinMaskGap +@c key MinMaskGap in hid +@cartouche +@format +MinMaskGap(delta) +MinMaskGap(Selected, delta)@end format +@end cartouche + +Ensures the mask is a minimum distance from pins and pads. +@c ./../src/action.c 3752 + +Checks all specified pins and/or pads, and increases the mask if +needed to ensure a minimum distance between the pin or pad edge and +the mask edge. + + +@node Mode Action +@subsection Mode +@c key Mode in hid +@cartouche +@format +Mode(Arc|Arrow|Copy|InsertPoint|Line|Lock|Move|None|PasteBuffer) +Mode(Polygon|Rectangle|Remove|Rotate|Text|Thermal|Via) +Mode(Notify|Release|Cancel|Stroke) +Mode(Save|Restore)@end format +@end cartouche + +Change or use the tool mode. +@c ./../src/action.c 2612 + +@table @code + +@item Arc +@itemx Arrow +@itemx Copy +@itemx InsertPoint +@itemx Line +@itemx Lock +@itemx Move +@itemx None +@itemx PasteBuffer +@itemx Polygon +@itemx Rectangle +@itemx Remove +@itemx Rotate +@itemx Text +@itemx Thermal +@itemx Via +Select the indicated tool. + +@item Notify +Called when you press the mouse button, or move the mouse. + +@item Release +Called when you release the mouse button. + +@item Cancel +Cancels any pending tool activity, allowing you to restart elsewhere. +For example, this allows you to start a new line rather than attach a +line to the previous line. + +@item Escape +Similar to Cancel but calling this action a second time will return +to the Arrow tool. + +@item Stroke +If your @code{pcb} was built with libstroke, this invokes the stroke +input method. If not, this will restart a drawing mode if you were +drawing, else it will select objects. + +@item Save +Remembers the current tool. + +@item Restore +Restores the tool to the last saved tool. + +@end table + + +@node MorphPolygon Action +@subsection MorphPolygon +@c key MorphPolygon in hid +@cartouche +@format +MorphPolygon(Object|Selected)@end format +@end cartouche + +Converts dead polygon islands into separate polygons. +@c ./../src/action.c 4087 + +If a polygon is divided into unconnected "islands", you can use +this command to convert the otherwise disappeared islands into +separate polygons. Be sure the cursor is over a portion of the +polygon that remains visible. Very small islands that may flake +off are automatically deleted. + + +@node MoveLayer Action +@subsection MoveLayer +@c key MoveLayer in hid +@cartouche +@format +MoveLayer(old,new)@end format +@end cartouche + +Moves/Creates/Deletes Layers. +@c ./../src/move.c 1091 + +Moves a layer, creates a new layer, or deletes a layer. + +@table @code + +@item old +The is the layer number to act upon. Allowed values are: +@table @code + +@item c +Currently selected layer. + +@item -1 +Create a new layer. + +@item number +An existing layer number. + +@end table + +@item new +Specifies where to move the layer to. Allowed values are: +@table @code +@item -1 +Deletes the layer. + +@item up +Moves the layer up. + +@item down +Moves the layer down. + +@item c +Creates a new layer. + +@end table + +@end table + + +@node MoveObject Action +@subsection MoveObject +@c key MoveObject in hid +@cartouche +@format +MoveObject(X,Y,dim)@end format +@end cartouche + +Moves the object under the crosshair. +@c ./../src/action.c 5567 + +The @code{X} and @code{Y} are treated like @code{delta} is for many +other objects. For each, if it's prefixed by @code{+} or @code{-}, +then that amount is relative. Otherwise, it's absolute. Units can be +@code{mil} or @code{mm}; if unspecified, units are PCB's internal +units, currently 1/100 mil. + + +@node MoveToCurrentLayer Action +@subsection MoveToCurrentLayer +@c key MoveToCurrentLayer in hid +@cartouche +@format +MoveToCurrentLayer(Object|SelectedObjects)@end format +@end cartouche + +Moves objects to the current layer. +@c ./../src/action.c 5609 + +Note that moving an element from a component layer to a solder layer, +or from solder to component, won't automatically flip it. Use the +@code{Flip()} action to do that. + + +@node Netlist Action +@subsection Netlist +@c key Netlist in hid +@cartouche +@format +Net(find|select|rats|norats|clear[,net[,pin]]) +Net(freeze|thaw|forcethaw) +Net(add,net,pin)@end format +@end cartouche + +Perform various actions on netlists. +@c ./../src/netlist.c 289 + +Each of these actions apply to a specified set of nets. @var{net} and +@var{pin} are patterns which match one or more nets or pins; these +patterns may be full names or regular expressions. If an exact match +is found, it is the only match; if no exact match is found, +@emph{then} the pattern is tried as a regular expression. + +If neither @var{net} nor @var{pin} are specified, all nets apply. If +@var{net} is specified but not @var{pin}, all nets matching @var{net} +apply. If both are specified, nets which match @var{net} and contain +a pin matching @var{pin} apply. + +@table @code + +@item find +Nets which apply are marked @emph{found} and are drawn in the +@code{connected-color} color. + +@item select +Nets which apply are selected. + +@item rats +Nets which apply are marked as available for the rats nest. + +@item norats +Nets which apply are marked as not available for the rats nest. + +@item clear +Clears the netlist. + +@item add +Add the given pin to the given netlist, creating either if needed. + +@item sort +Called after a list of add's, this sorts the netlist. + +@item freeze +@itemx thaw +@itemx forcethaw +Temporarily prevents changes to the netlist from being reflected in +the GUI. For example, if you need to make multiple changes, you +freeze the netlist, make the changes, then thaw it. Note that +freeze/thaw requests may nest, with the netlist being fully thawed +only when all pending freezes are thawed. You can bypass the nesting +by using forcethaw, which resets the freeze count and immediately +updates the GUI. + +@end table + + +@node New Action +@subsection New +@c key New in hid +@cartouche +@format +New([name])@end format +@end cartouche + +Starts a new layout. +@c ./../src/action.c 5093 + +If a name is not given, one is prompted for. + + +@node OptAutoOnly Action +@subsection OptAutoOnly +@c key OptAutoOnly in hid +@cartouche +@format +OptAutoOnly()@end format +@end cartouche + +Toggles the optimize-only-autorouted flag. +@c ./../src/djopt.c 129 + +The original purpose of the trace optimizer was to clean up the traces +created by the various autorouters that have been used with PCB. When +a board has a mix of autorouted and carefully hand-routed traces, you +don't normally want the optimizer to move your hand-routed traces. +But, sometimes you do. By default, the optimizer only optimizes +autorouted traces. This action toggles that setting, so that you can +optimize hand-routed traces also. + + +@node PasteBuffer Action +@subsection PasteBuffer +@c key PasteBuffer in hid +@cartouche +@format +PasteBuffer(AddSelected|Clear|1..MAX_BUFFER) +PasteBuffer(Rotate, 1..3) +PasteBuffer(Convert|Save|Restore|Mirror) +PasteBuffer(ToLayout, X, Y, units)@end format +@end cartouche + +Various operations on the paste buffer. +@c ./../src/action.c 5153 + +There are a number of paste buffers; the actual limit is a +compile-time constant @code{MAX_BUFFER} in @file{globalconst.h}. It +is currently @code{5}. One of these is the ``current'' paste buffer, +often referred to as ``the'' paste buffer. + +@table @code + +@item AddSelected +Copies the selected objects to the current paste buffer. + +@item Clear +Remove all objects from the current paste buffer. + +@item Convert +Convert the current paste buffer to an element. Vias are converted to +pins, lines are converted to pads. + +@item Restore +Convert any elements in the paste buffer back to vias and lines. + +@item Mirror +Flip all objects in the paste buffer vertically (up/down flip). To mirror +horizontally, combine this with rotations. + +@item Rotate +Rotates the current buffer. The number to pass is 1..3, where 1 means +90 degrees counter clockwise, 2 means 180 degrees, and 3 means 90 +degrees clockwise (270 CCW). + +@item Save +Saves any elements in the current buffer to the indicated file. + +@item ToLayout +Pastes any elements in the current buffer to the indicated X, Y +coordinates in the layout. The @code{X} and @code{Y} are treated like +@code{delta} is for many other objects. For each, if it's prefixed by +@code{+} or @code{-}, then that amount is relative to the last +location. Otherwise, it's absolute. Units can be +@code{mil} or @code{mm}; if unspecified, units are PCB's internal +units, currently 1/100 mil. + + +@item 1..MAX_BUFFER +Selects the given buffer to be the current paste buffer. + +@end table + + +@node Polygon Action +@subsection Polygon +@c key Polygon in hid +@cartouche +@format +Polygon(Close|PreviousPoint)@end format +@end cartouche + +Some polygon related stuff. +@c ./../src/action.c 5503 + +Polygons need a special action routine to make life easier. + +@table @code + +@item Close +Creates the final segment of the polygon. This may fail if clipping +to 45 degree lines is switched on, in which case a warning is issued. + +@item PreviousPoint +Resets the newly entered corner to the previous one. The Undo action +will call Polygon(PreviousPoint) when appropriate to do so. + +@end table + + +@node Puller Action +@subsection Puller +@c key Puller in hid +@cartouche +@format +Puller()@end format +@end cartouche + +Pull an arc-line junction tight. +@c ./../src/puller.c 411 + +The @code{Puller()} action is a special-purpose optimization. When +invoked while the crosshair is over the junction of an arc and a line, +it will adjust the arc's angle and the connecting line's endpoint such +that the line intersects the arc at a tangent. In the example below, +the left side is ``before'' with the black target marking where to put +the crosshair: + +@center @image{puller,,,Example of how puller works,png} + +The right side is ``after'' with the black target marking where the +arc-line intersection was moved to. + + +@node q Action +@subsection q +@c key q in hid +@cartouche +@format +q@end format +@end cartouche + +Quits the application after confirming. +@c ./../src/command.c 185 + +If you have unsaved changes, you will be prompted to confirm (or +save) before quitting. + +@colonaction + + +@node q! Action +@subsection q! +@c key q! in hid +@cartouche +@format +q!@end format +@end cartouche + +Quits the application without confirming. +@c ./../src/command.c 199 + +Note that this command neither saves your data nor prompts for +confirmation. + +@colonaction + + +@node Quit Action +@subsection Quit +@c key Quit in hid +@cartouche +@format +Quit()@end format +@end cartouche + +Quits the application after confirming. +@c ./../src/action.c 2071 + +If you have unsaved changes, you will be prompted to confirm (or +save) before quitting. + + +@node Redo Action +@subsection Redo +@c key Redo in hid +@cartouche +@format +Redo()@end format +@end cartouche + +Redo recent``undo''operations. +@c ./../src/action.c 5468 + +This routine allows you to recover from the last undo command. You +might want to do this if you thought that undo was going to revert +something other than what it actually did (in case you are confused +about which operations are un-doable), or if you have been backing up +through a long undo list and over-shoot your stopping point. Any +change that is made since the undo in question will trim the redo +list. For example if you add ten lines, then undo three of them you +could use redo to put them back, but if you move a line on the board +before performing the redo, you will lose the ability to "redo" the +three "undone" lines. + + +@node RemoveSelected Action +@subsection RemoveSelected +@c key RemoveSelected in hid +@cartouche +@format +RemoveSelected()@end format +@end cartouche + +Removes any selected objects. +@c ./../src/action.c 2832 + + +@node Renumber Action +@subsection Renumber +@c key Renumber in hid +@cartouche +@format +Renumber() +Renumber(filename)@end format +@end cartouche + +Renumber all elements. The changes will be recorded to filename +for use in backannotating these changes to the schematic. +@c ./../src/action.c 2848 + + +@node Report Action +@subsection Report +@c key Report in hid +@cartouche +@format +Report(Object|DrillReport|FoundPins|NetLength|AllNetLengths|[,name])@end format +@end cartouche + +Produce various report. +@c ./../src/report.c 942 + +@table @code + +@item Object +The object under the crosshair will be reported, describing various +aspects of the object. + +@item DrillReport +A report summarizing the number of drill sizes used, and how many of +each, will be produced. + +@item FoundPins +A report listing all pins and pads which are marked as ``found'' will +be produced. + +@item NetLength +The name and length of the net under the crosshair will be reported to +the message log. + +@item AllNetLengths +The name and length of the net under the crosshair will be reported to +the message log. An optional parameter specifies mm, mil, pcb, or in +units + +@end table + + +@node ReportDialog Action +@subsection ReportDialog +@c key ReportDialog in hid +@cartouche +@format +ReportDialog()@end format +@end cartouche + +Report on the object under the crosshair +@c ./../src/report.c 125 + +This is a shortcut for @code{Report(Object)}. + + +@node RipUp Action +@subsection RipUp +@c key RipUp in hid +@cartouche +@format +RipUp(All|Selected|Element)@end format +@end cartouche + +Ripup auto-routed tracks, or convert an element to parts. +@c ./../src/action.c 3199 + +@table @code + +@item All +Removes all lines and vias which were created by the autorouter. + +@item Selected +Removes all selected lines and vias which were created by the +autorouter. + +@item Element +Converts the element under the cursor to parts (vias and lines). Note +that this uses the highest numbered paste buffer. + +@end table + + +@node rn Action +@subsection rn +@c key rn in hid +@cartouche +@format +rn [name]@end format +@end cartouche + +Reads netlist. +@c ./../src/command.c 214 + +If no filename is given a file select box will pop up. The file is +read via the command defined by the @emph{RatCommand} resource. The +command must send its output to @emph{stdout}. + +Netlists are used for generating rat's nests (see @ref{Rats Nest}) and +for verifying the board layout (which is also accomplished by the +@emph{Ratsnest} command). + +@colonaction + + +@node RouteStyle Action +@subsection RouteStyle +@c key RouteStyle in hid +@cartouche +@format +RouteStyle(1|2|3|4)@end format +@end cartouche + +Copies the indicated routing style into the current sizes. +@c ./../src/action.c 5535 + + +@node s Action +@subsection s +@c key s in hid +@cartouche +@format +s [name]@end format +@end cartouche + +Saves layout data. +@c ./../src/command.c 244 + +Data and the filename are passed to the command defined by the +resource @emph{saveCommand}. It must read the layout data from +@emph{stdin}. If no filename is entered, either the last one is used +again or, if it is not available, a file select box will pop up. + +@colonaction + + +@node SaveSettings Action +@subsection SaveSettings +@c key SaveSettings in hid +@cartouche +@format +SaveSettings() +SaveSettings(local)@end format +@end cartouche + +Saves settings. +@c ./../src/action.c 5015 + +If you pass no arguments, the settings are stored in +@code{$HOME/.pcb/settings}. If you pass the word @code{local} they're +saved in @code{./pcb.settings}. + + +@node SaveTo Action +@subsection SaveTo +@c key SaveTo in hid +@cartouche +@format +SaveTo(Layout|LayoutAs,filename) +SaveTo(AllConnections|AllUnusedPins|ElementConnections,filename) +SaveTo(PasteBuffer,filename)@end format +@end cartouche + +Saves data to a file. +@c ./../src/action.c 4919 + +@table @code + +@item Layout +Saves the current layout. + +@item LayoutAs +Saves the current layout, and remembers the filename used. + +@item AllConnections +Save all connections to a file. + +@item AllUnusedPins +List all unused pins to a file. + +@item ElementConnections +Save connections to the element at the cursor to a file. + +@item PasteBuffer +Save the content of the active Buffer to a file. This is the graphical way to create a footprint. + +@end table + + +@node Select Action +@subsection Select +@c key Select in hid +@cartouche +@format +Select(Object|ToggleObject) +Select(All|Block|Connection) +Select(ElementByName|ObjectByName|PadByName|PinByName) +Select(ElementByName|ObjectByName|PadByName|PinByName, Name) +Select(TextByName|ViaByName|NetByName) +Select(TextByName|ViaByName|NetByName, Name) +Select(Convert)@end format +@end cartouche + +Toggles or sets the selection. +@c ./../src/action.c 4651 + +@table @code + +@item ElementByName +@item ObjectByName +@item PadByName +@item PinByName +@item TextByName +@item ViaByName +@item NetByName + +These all rely on having a regular expression parser built into +@code{pcb}. If the name is not specified then the user is prompted +for a pattern, and all objects that match the pattern and are of the +type specified are selected. + +@item Object +@item ToggleObject +Selects the object under the cursor. + +@item Block +Selects all objects in a rectangle indicated by the cursor. + +@item All +Selects all objects on the board. + +@item Connection +Selects all connections with the ``found'' flag set. + +@item Convert +Converts the selected objects to an element. This uses the highest +numbered paste buffer. + +@end table + + +@node SetFlag Action +@subsection SetFlag +@c key SetFlag in hid +@cartouche +@format +SetFlag(Object|Selected|SelectedObjects, flag) +SetFlag(SelectedLines|SelectedPins|SelectedVias, flag) +SetFlag(SelectedPads|SelectedTexts|SelectedNames, flag) +SetFlag(SelectedElements, flag) +flag = square | octagon | thermal | join@end format +@end cartouche + +Sets flags on objects. +@c ./../src/action.c 5716 + +Turns the given flag on, regardless of its previous setting. See +@code{ChangeFlag}. + +@example +SetFlag(SelectedPins,thermal) +@end example + + +@node SetOctagon Action +@subsection SetOctagon +@c key SetOctagon in hid +@cartouche +@format +SetOctagon(Object|ToggleObject|SelectedElements|Selected)@end format +@end cartouche + +Sets the octagon-flag of objects. +@c ./../src/action.c 4459 + +@pinshapes + + +@node SetSame Action +@subsection SetSame +@c key SetSame in hid +@cartouche +@format +SetSame()@end format +@end cartouche + +Sets current layer and sizes to match indicated item. +@c ./../src/action.c 5648 + +When invoked over any line, arc, polygon, or via, this changes the +current layer to be the layer that item is on, and changes the current +sizes (thickness, keepaway, drill, etc) according to that item. + + +@node SetSquare Action +@subsection SetSquare +@c key SetSquare in hid +@cartouche +@format +SetSquare(ToggleObject|SelectedElements|SelectedPins)@end format +@end cartouche + +sets the square-flag of objects. +@c ./../src/action.c 4301 + +Note that @code{Pins} means pins and pads. + +@pinshapes + + +@node SetThermal Action +@subsection SetThermal +@c key SetThermal in hid +@cartouche +@format +SetThermal(Object|SelectedPins|SelectedVias|Selected, Style)@end format +@end cartouche + +Set the thermal (on the current layer) of pins or vias to the given style. +Style = 0 means no thermal. +Style = 1 has diagonal fingers with sharp edges. +Style = 2 has horizontal and vertical fingers with sharp edges. +Style = 3 is a solid connection to the plane.Style = 4 has diagonal fingers with rounded edges. +Style = 5 has horizontal and vertical fingers with rounded edges. + +@c ./../src/action.c 1912 + +This changes how/whether pins or vias connect to any rectangle or polygon +on the current layer. The first argument can specify one object, or all +selected pins, or all selected vias, or all selected pins and vias. +The second argument specifies the style of connection. +There are 5 possibilities: +0 - no connection, +1 - 45 degree fingers with sharp edges, +2 - horizontal & vertical fingers with sharp edges, +3 - solid connection, +4 - 45 degree fingers with rounded corners, +5 - horizontal & vertical fingers with rounded corners. + +Pins and Vias may have thermals whether or not there is a polygon available +to connect with. However, they will have no effect without the polygon. + +@node SetValue Action +@subsection SetValue +@c key SetValue in hid +@cartouche +@format +SetValue(Grid|Line|LineSize|Text|TextScale|ViaDrillingHole|Via|ViaSize, delta)@end format +@end cartouche + +Change various board-wide values and sizes. +@c ./../src/action.c 1996 + +@table @code + +@item ViaDrillingHole +Changes the diameter of the drill for new vias. + +@item Grid +Sets the grid spacing. + +@item Line +@item LineSize +Changes the thickness of new lines. + +@item Via +@item ViaSize +Changes the diameter of new vias. + +@item Text +@item TextScale +Changes the size of new text. + +@end table + + +@node ToggleHideName Action +@subsection ToggleHideName +@c key ToggleHideName in hid +@cartouche +@format +ToggleHideName(Object|SelectedElements)@end format +@end cartouche + +Toggles the visibility of element names. +@c ./../src/action.c 4134 + +If names are hidden you won't see them on the screen and they will not +appear on the silk layer when you print the layout. + + +@node ToggleVendor Action +@subsection ToggleVendor +@c key ToggleVendor in hid +@cartouche +@format +ToggleVendor()@end format +@end cartouche + +Toggles the state of automatic drill size mapping. +@c ./../src/vendor.c 128 + +@cindex vendor map +@cindex vendor drill table +@findex ToggleVendor() + +When drill mapping is enabled, new instances of pins and vias will +have their drill holes mapped to one of the allowed drill sizes +specified in the currently loaded vendor drill table. To enable drill +mapping, a vendor resource file containing a drill table must be +loaded first. + + +@node Undo Action +@subsection Undo +@c key Undo in hid +@cartouche +@format +Undo() +Undo(ClearList)@end format +@end cartouche + +Undo recent changes. +@c ./../src/action.c 5304 + +The unlimited undo feature of @code{Pcb} allows you to recover from +most operations that materially affect you work. Calling +@code{Undo()} without any parameter recovers from the last (non-undo) +operation. @code{ClearList} is used to release the allocated +memory. @code{ClearList} is called whenever a new layout is started or +loaded. See also @code{Redo} and @code{Atomic}. + +Note that undo groups operations by serial number; changes with the +same serial number will be undone (or redone) as a group. See +@code{Atomic}. + + +@node UnloadVendor Action +@subsection UnloadVendor +@c key UnloadVendor in hid +@cartouche +@format +UnloadVendor()@end format +@end cartouche + +Unloads the current vendor drill mapping table. +@c ./../src/vendor.c 176 + +@cindex vendor map +@cindex vendor drill table +@findex UnloadVendor() + + +@node Unselect Action +@subsection Unselect +@c key Unselect in hid +@cartouche +@format +Unselect(All|Block|Connection) +Unselect(ElementByName|ObjectByName|PadByName|PinByName) +Unselect(ElementByName|ObjectByName|PadByName|PinByName, Name) +Unselect(TextByName|ViaByName) +Unselect(TextByName|ViaByName, Name) +@end format +@end cartouche + +Unselects the object at the pointer location or the specified objects. +@c ./../src/action.c 4803 + +@table @code + +@item All +Unselect all objects. + +@item Block +Unselect all objects in a rectangle given by the cursor. + +@item Connection +Unselect all connections with the ``found'' flag set. + +@item ElementByName +@item ObjectByName +@item PadByName +@item PinByName +@item TextByName +@item ViaByName + +These all rely on having a regular expression parser built into +@code{pcb}. If the name is not specified then the user is prompted +for a pattern, and all objects that match the pattern and are of the +type specified are unselected. + + +@end table + + +@node w Action +@subsection w +@c key w in hid +@cartouche +@format +w [name]@end format +@end cartouche + +Saves layout data. +@c ./../src/command.c 250 + +This commands has been added for the convenience of @code{vi} users +and has the same functionality as @code{s}. + +@colonaction + + +@node wq Action +@subsection wq +@c key wq in hid +@cartouche +@format +wq@end format +@end cartouche + +Saves the layout data and quits. +@c ./../src/command.c 291 + +This command has been added for the convenience of @code{vi} users and +has the same functionality as @code{s} combined with @code{q}. + +@colonaction + + +@node common actions +@section common actions +@c ./../src/hid/common/actions.c 425 + +@macro hidaction + +This is one of a number of actions which are part of the HID +interface. The core functions use these actions to tell the current +GUI when to change the presented information in response to changes +that the GUI may not know about. The user normally does not invoke +these directly. + +@end macro + +@menu +* LayersChanged Action:: Tells the GUI that the layers have changed. +* LibraryChanged Action:: Tells the GUI that the libraries have changed. +* NetlistChanged Action:: Tells the GUI that the netlist has changed. +* PCBChanged Action:: Tells the GUI that the whole PCB has changed. The optional``revert"parameter can be used as a hint to the GUI that the same design is beingreloaded, and that it might keep some viewport settings +* RouteStylesChanged Action:: Tells the GUI that the routing styles have changed. +@end menu +@node LayersChanged Action +@subsection LayersChanged +@c key LayersChanged in hid common +@cartouche +@format +LayersChanged()@end format +@end cartouche + +Tells the GUI that the layers have changed. +@c ./../src/hid/common/actions.c 446 + +This includes layer names, colors, stacking order, visibility, etc. + +@hidaction + + +@node LibraryChanged Action +@subsection LibraryChanged +@c key LibraryChanged in hid common +@cartouche +@format +LibraryChanged()@end format +@end cartouche + +Tells the GUI that the libraries have changed. +@c ./../src/hid/common/actions.c 451 + +@hidaction + + +@node NetlistChanged Action +@subsection NetlistChanged +@c key NetlistChanged in hid common +@cartouche +@format +NetlistChanged()@end format +@end cartouche + +Tells the GUI that the netlist has changed. +@c ./../src/hid/common/actions.c 441 + +@hidaction + + +@node PCBChanged Action +@subsection PCBChanged +@c key PCBChanged in hid common +@cartouche +@format +PCBChanged([revert])@end format +@end cartouche + +Tells the GUI that the whole PCB has changed. The optional``revert"parameter can be used as a hint to the GUI that the same design is beingreloaded, and that it might keep some viewport settings +@c ./../src/hid/common/actions.c 431 + +@hidaction + + +@node RouteStylesChanged Action +@subsection RouteStylesChanged +@c key RouteStylesChanged in hid common +@cartouche +@format +RouteStylesChanged()@end format +@end cartouche + +Tells the GUI that the routing styles have changed. +@c ./../src/hid/common/actions.c 436 + +@hidaction + + +@node gtk actions +@section gtk actions +@menu +* gtk About Action:: N_("Tell the user about this version of PCB."); +* gtk AdjustStyle Action:: Open the window which allows editing of the route styles. +* gtk Center Action:: N_("Moves the pointer to the center of the window."); +* gtk Cursor Action:: N_("Move the cursor."); +* gtk DoWindows Action:: N_("Open various GUI windows."); +* gtk EditLayerGroups Action:: Open the preferences window which allows editing of the layer groups. +* gtk GetXY Action:: N_("Get a coordinate."); +* gtk ImportGUI Action:: N_("Asks user which schematics to import into PCB. +"); +* gtk Pan Action:: N_("Start or stop panning (Mode = 1 to start, 0 to stop) +Optional thumb argument is ignored for now in gtk hid. +"); +* gtk Popup Action:: N_("Bring up the popup menu specified by @code{MenuName}. +If called by a mouse event then the mouse button number +must be specified as the optional second argument."); +* gtk Print Action:: N_("Print the layout."); +* gtk PrintCalibrate Action:: N_("Calibrate the printer."); +* gtk Save Action:: N_("Save layout and/or element data to a user-selected file."); +* gtk SelectLayer Action:: Select which layer is the current layer. +* gtk SetUnits Action:: N_("Set the default measurement units."); +* gtk SwapSides Action:: N_("Swaps the side of the board you're looking at."); +* gtk ToggleView Action:: Toggle the visibility of the specified layer or layer group. +* gtk Zoom Action:: N_("Various zoom factor changes."); +@end menu +@node gtk About Action +@subsection gtk About +@c key gtk About in hid gtk +@cartouche +@format +About()@end format +@end cartouche + +N_("Tell the user about this version of PCB."); +@c ./../src/hid/gtk/gtkhid-main.c 1059 + +This just pops up a dialog telling the user which version of +@code{pcb} they're running. + + +@node gtk AdjustStyle Action +@subsection gtk AdjustStyle +@c key gtk AdjustStyle in hid gtk +@cartouche +@format +AdjustStyle() +@end format +@end cartouche + +Open the window which allows editing of the route styles. +@c ./../src/hid/gtk/gui-top-window.c 2081 + +Opens the window which allows editing of the route styles. + + +@node gtk Center Action +@subsection gtk Center +@c key gtk Center in hid gtk +@cartouche +@format +Center() +@end format +@end cartouche + +N_("Moves the pointer to the center of the window."); +@c ./../src/hid/gtk/gtkhid-main.c 1470 + +Move the pointer to the center of the window, but only if it's +currently within the window already. + + +@node gtk Cursor Action +@subsection gtk Cursor +@c key gtk Cursor in hid gtk +@cartouche +@format +Cursor(Type,DeltaUp,DeltaRight,Units)@end format +@end cartouche + +N_("Move the cursor."); +@c ./../src/hid/gtk/gtkhid-main.c 1515 + +This action moves the mouse cursor. Unlike other actions which take +coordinates, this action's coordinates are always relative to the +user's view of the board. Thus, a positive @var{DeltaUp} may move the +cursor towards the board origin if the board is inverted. + +Type is one of @samp{Pan} or @samp{Warp}. @samp{Pan} causes the +viewport to move such that the crosshair is under the mouse cursor. +@samp{Warp} causes the mouse cursor to move to be above the crosshair. + +@var{Units} can be one of the following: + +@table @samp + +@item mil +@itemx mm +The cursor is moved by that amount, in board units. + +@item grid +The cursor is moved by that many grid points. + +@item view +The values are percentages of the viewport's view. Thus, a pan of +@samp{100} would scroll the viewport by exactly the width of the +current view. + +@item board +The values are percentages of the board size. Thus, a move of +@samp{50,50} moves you halfway across the board. + +@end table + + +@node gtk DoWindows Action +@subsection gtk DoWindows +@c key gtk DoWindows in hid gtk +@cartouche +@format +DoWindows(1|2|3|4|5|6) +DoWindows(Layout|Library|Log|Netlist|Preferences|DRC)@end format +@end cartouche + +N_("Open various GUI windows."); +@c ./../src/hid/gtk/gtkhid-main.c 1563 + +@table @code + +@item 1 +@itemx Layout +Open the layout window. Since the layout window is always shown +anyway, this has no effect. + +@item 2 +@itemx Library +Open the library window. + +@item 3 +@itemx Log +Open the log window. + +@item 4 +@itemx Netlist +Open the netlist window. + +@item 5 +@itemx Preferences +Open the preferences window. + +@item 6 +@itemx DRC +Open the DRC violations window. + +@end table + + +@node gtk EditLayerGroups Action +@subsection gtk EditLayerGroups +@c key gtk EditLayerGroups in hid gtk +@cartouche +@format +EditLayerGroups() +@end format +@end cartouche + +Open the preferences window which allows editing of the layer groups. +@c ./../src/hid/gtk/gui-top-window.c 2100 + +Opens the preferences window which is where the layer groups +are edited. This action is primarily provides to provide menu +resource compatibility with the lesstif HID. + + +@node gtk GetXY Action +@subsection gtk GetXY +@c key gtk GetXY in hid gtk +@cartouche +@format +GetXY()@end format +@end cartouche + +N_("Get a coordinate."); +@c ./../src/hid/gtk/gtkhid-main.c 1074 + +Prompts the user for a coordinate, if one is not already selected. + + +@node gtk ImportGUI Action +@subsection gtk ImportGUI +@c key gtk ImportGUI in hid gtk +@cartouche +@format +ImportGUI()@end format +@end cartouche + +N_("Asks user which schematics to import into PCB. +"); +@c ./../src/hid/gtk/gtkhid-main.c 1750 + +Asks user which schematics to import into PCB. + + +@node gtk Pan Action +@subsection gtk Pan +@c key gtk Pan in hid gtk +@cartouche +@format +Pan([thumb], Mode)@end format +@end cartouche + +N_("Start or stop panning (Mode = 1 to start, 0 to stop) +Optional thumb argument is ignored for now in gtk hid. +"); +@c ./../src/hid/gtk/gtkhid-main.c 1687 + +Start or stop panning. To start call with Mode = 1, to stop call with +Mode = 0. + + +@node gtk Popup Action +@subsection gtk Popup +@c key gtk Popup in hid gtk +@cartouche +@format +Popup(MenuName, [Button])@end format +@end cartouche + +N_("Bring up the popup menu specified by @code{MenuName}. +If called by a mouse event then the mouse button number +must be specified as the optional second argument."); +@c ./../src/hid/gtk/gtkhid-main.c 1719 + +This just pops up the specified menu. The menu must have been defined +as a named subresource of the Popups resource in the menu resource +file. + + +@node gtk Print Action +@subsection gtk Print +@c key gtk Print in hid gtk +@cartouche +@format +Print()@end format +@end cartouche + +N_("Print the layout."); +@c ./../src/hid/gtk/gtkhid-main.c 1350 + +This will find the default printing HID, prompt the user for its +options, and print the layout. + + +@node gtk PrintCalibrate Action +@subsection gtk PrintCalibrate +@c key gtk PrintCalibrate in hid gtk +@cartouche +@format +PrintCalibrate()@end format +@end cartouche + +N_("Calibrate the printer."); +@c ./../src/hid/gtk/gtkhid-main.c 1401 + +This will print a calibration page, which you would measure and type +the measurements in, so that future printouts will be more precise. + + +@node gtk Save Action +@subsection gtk Save +@c key gtk Save in hid gtk +@cartouche +@format +Save() +Save(Layout|LayoutAs) +Save(AllConnections|AllUnusedPins|ElementConnections) +Save(PasteBuffer)@end format +@end cartouche + +N_("Save layout and/or element data to a user-selected file."); +@c ./../src/hid/gtk/gtkhid-main.c 1230 + +This action is a GUI front-end to the core's @code{SaveTo} action +(@pxref{SaveTo Action}). If you happen to pass a filename, like +@code{SaveTo}, then @code{SaveTo} is called directly. Else, the +user is prompted for a filename to save, and then @code{SaveTo} is +called with that filename. + + +@node gtk SelectLayer Action +@subsection gtk SelectLayer +@c key gtk SelectLayer in hid gtk +@cartouche +@format +SelectLayer(1..MAXLAYER|Silk|Rats)@end format +@end cartouche + +Select which layer is the current layer. +@c ./../src/hid/gtk/gui-top-window.c 1851 + +The specified layer becomes the currently active layer. It is made +visible if it is not already visible + + +@node gtk SetUnits Action +@subsection gtk SetUnits +@c key gtk SetUnits in hid gtk +@cartouche +@format +SetUnits(mm|mil)@end format +@end cartouche + +N_("Set the default measurement units."); +@c ./../src/hid/gtk/gtkhid-main.c 1606 + +@table @code + +@item mil +Sets the display units to mils (1/1000 inch). + +@item mm +Sets the display units to millimeters. + +@end table + + +@node gtk SwapSides Action +@subsection gtk SwapSides +@c key gtk SwapSides in hid gtk +@cartouche +@format +SwapSides(|v|h|r)@end format +@end cartouche + +N_("Swaps the side of the board you're looking at."); +@c ./../src/hid/gtk/gtkhid-main.c 1295 + +This action changes the way you view the board. + +@table @code + +@item v +Flips the board over vertically (up/down). + +@item h +Flips the board over horizontally (left/right), like flipping pages in +a book. + +@item r +Rotates the board 180 degrees without changing sides. + +@end table + +If no argument is given, the board isn't moved but the opposite side +is shown. + +Normally, this action changes which pads and silk layer are drawn as +true silk, and which are drawn as the "invisible" layer. It also +determines which solder mask you see. + +As a special case, if the layer group for the side you're looking at +is visible and currently active, and the layer group for the opposite +is not visible (i.e. disabled), then this action will also swap which +layer group is visible and active, effectively swapping the ``working +side'' of the board. + + +@node gtk ToggleView Action +@subsection gtk ToggleView +@c key gtk ToggleView in hid gtk +@cartouche +@format +ToggleView(1..MAXLAYER) +ToggleView(layername) +ToggleView(Silk|Rats|Pins|Vias|Mask|BackSide)@end format +@end cartouche + +Toggle the visibility of the specified layer or layer group. +@c ./../src/hid/gtk/gui-top-window.c 1792 + +If you pass an integer, that layer is specified by index (the first +layer is @code{1}, etc). If you pass a layer name, that layer is +specified by name. When a layer is specified, the visibility of the +layer group containing that layer is toggled. + +If you pass a special layer name, the visibility of those components +(silk, rats, etc) is toggled. Note that if you have a layer named +the same as a special layer, the layer is chosen over the special layer. + + +@node gtk Zoom Action +@subsection gtk Zoom +@c key gtk Zoom in hid gtk +@cartouche +@format +Zoom() +Zoom(factor)@end format +@end cartouche + +N_("Various zoom factor changes."); +@c ./../src/hid/gtk/gtkhid-main.c 161 +Changes the zoom (magnification) of the view of the board. If no +arguments are passed, the view is scaled such that the board just fits +inside the visible window (i.e. ``view all''). Otherwise, +@var{factor} specifies a change in zoom factor. It may be prefixed by +@code{+}, @code{-}, or @code{=} to change how the zoom factor is +modified. The @var{factor} is a floating point number, such as +@code{1.5} or @code{0.75}. + +@table @code + +@item +@var{factor} +Values greater than 1.0 cause the board to be drawn smaller; more of +the board will be visible. Values between 0.0 and 1.0 cause the board +to be drawn bigger; less of the board will be visible. + +@item -@var{factor} +Values greater than 1.0 cause the board to be drawn bigger; less of +the board will be visible. Values between 0.0 and 1.0 cause the board +to be drawn smaller; more of the board will be visible. + +@item =@var{factor} + +The @var{factor} is an absolute zoom factor; the unit for this value +is "PCB units per screen pixel". Since PCB units are 0.01 mil, a +@var{factor} of 1000 means 10 mils (0.01 in) per pixel, or 100 DPI, +about the actual resolution of most screens - resulting in an "actual +size" board. Similarly, a @var{factor} of 100 gives you a 10x actual +size. + +@end table + +Note that zoom factors of zero are silently ignored. + + + + +@node lesstif actions +@section lesstif actions +@menu +* lesstif About Action:: Tell the user about this version of PCB. +* lesstif AdjustSizes Action:: Let the user change the board size, DRC parameters, etc +* lesstif AdjustStyle Action:: Displays the route style adjustment window. +* lesstif Benchmark Action:: Benchmark the GUI speed. +* lesstif Command Action:: Displays the command line input window. +* lesstif Cursor Action:: Move the cursor. +* lesstif Debug Action:: Debug action. +* lesstif DebugXY Action:: Debug action, with coordinates +* lesstif DoWindows Action:: Open various GUI windows. +* lesstif DumpKeys Action:: Dump Lesstif key bindings. +* lesstif EditLayerGroups Action:: Let the user change the layer groupings +* lesstif Export Action:: Export the layout. +* lesstif GetXY Action:: Get a coordinate. +* lesstif ImportGUI Action:: Lets the user choose the schematics to import from +* lesstif LibraryShow Action:: Displays the library window. +* lesstif Load Action:: Load layout data from a user-selected file. +* lesstif LoadVendor Action:: Loads a user-selected vendor resource file. +* lesstif NetlistShow Action:: Selects the given pinname or netname in the netlist window. +* lesstif Print Action:: Print the layout. +* lesstif PrintCalibrate Action:: Calibrate the printer. +* lesstif PromptFor Action:: Prompt for a response. +* lesstif Return Action:: Simulate a passing or failing action. +* lesstif Save Action:: Save layout data to a user-selected file. +* lesstif SelectLayer Action:: Select which layer is the current layer. +* lesstif SetUnits Action:: Set the default measurement units. +* lesstif SwapSides Action:: Swaps the side of the board you're looking at. +* lesstif ToggleView Action:: Toggle the visibility of the specified layer or layer group. +* lesstif Zoom Action:: Various zoom factor changes. +@end menu +@node lesstif About Action +@subsection lesstif About +@c key lesstif About in hid lesstif +@cartouche +@format +About()@end format +@end cartouche + +Tell the user about this version of PCB. +@c ./../src/hid/lesstif/dialogs.c 867 + +This just pops up a dialog telling the user which version of +@code{pcb} they're running. + + +@node lesstif AdjustSizes Action +@subsection lesstif AdjustSizes +@c key lesstif AdjustSizes in hid lesstif +@cartouche +@format +AdjustSizes()@end format +@end cartouche + +Let the user change the board size, DRC parameters, etc +@c ./../src/hid/lesstif/dialogs.c 1136 + +Displays a dialog box that lets the user change the board +size, DRC parameters, and text scale. + +The units are determined by the default display units. + + +@node lesstif AdjustStyle Action +@subsection lesstif AdjustStyle +@c key lesstif AdjustStyle in hid lesstif +@cartouche +@format +AdjustStyle()@end format +@end cartouche + +Displays the route style adjustment window. +@c ./../src/hid/lesstif/styles.c 344 + + +@node lesstif Benchmark Action +@subsection lesstif Benchmark +@c key lesstif Benchmark in hid lesstif +@cartouche +@format +Benchmark()@end format +@end cartouche + +Benchmark the GUI speed. +@c ./../src/hid/lesstif/main.c 659 + +This action is used to speed-test the Lesstif graphics subsystem. It +redraws the current screen as many times as possible in ten seconds. +It reports the amount of time needed to draw the screen once. + + +@node lesstif Command Action +@subsection lesstif Command +@c key lesstif Command in hid lesstif +@cartouche +@format +Command()@end format +@end cartouche + +Displays the command line input window. +@c ./../src/hid/lesstif/main.c 644 + +The command window allows the user to manually enter actions to be +executed. Action syntax can be done one of two ways: + +@table @code + +@item +Follow the action name by an open parenthesis, arguments separated by +commas, end with a close parenthesis. Example: @code{Abc(1,2,3)} + +@item +Separate the action name and arguments by spaces. Example: @code{Abc +1 2 3}. + +@end table + +The first option allows you to have arguments with spaces in them, +but the second is more ``natural'' to type for most people. + +Note that action names are not case sensitive, but arguments normally +are. However, most actions will check for ``keywords'' in a case +insensitive way. + +There are three ways to finish with the command window. If you press +the @code{Enter} key, the command is invoked, the window goes away, +and the next time you bring up the command window it's empty. If you +press the @code{Esc} key, the window goes away without invoking +anything, and the next time you bring up the command window it's +empty. If you change focus away from the command window (i.e. click +on some other window), the command window goes away but the next time +you bring it up it resumes entering the command you were entering +before. + + +@node lesstif Cursor Action +@subsection lesstif Cursor +@c key lesstif Cursor in hid lesstif +@cartouche +@format +Cursor(Type,DeltaUp,DeltaRight,Units)@end format +@end cartouche + +Move the cursor. +@c ./../src/hid/lesstif/main.c 716 + +This action moves the mouse cursor. Unlike other actions which take +coordinates, this action's coordinates are always relative to the +user's view of the board. Thus, a positive @var{DeltaUp} may move the +cursor towards the board origin if the board is inverted. + +Type is one of @samp{Pan} or @samp{Warp}. @samp{Pan} causes the +viewport to move such that the crosshair is under the mouse cursor. +@samp{Warp} causes the mouse cursor to move to be above the crosshair. + +@var{Units} can be one of the following: + +@table @samp + +@item mil +@itemx mm +The cursor is moved by that amount, in board units. + +@item grid +The cursor is moved by that many grid points. + +@item view +The values are percentages of the viewport's view. Thus, a pan of +@samp{100} would scroll the viewport by exactly the width of the +current view. + +@item board +The values are percentages of the board size. Thus, a move of +@samp{50,50} moves you halfway across the board. + +@end table + + +@node lesstif Debug Action +@subsection lesstif Debug +@c key lesstif Debug in hid lesstif +@cartouche +@format +Debug(...)@end format +@end cartouche + +Debug action. +@c ./../src/hid/lesstif/menu.c 66 + +This action exists to help debug scripts; it simply prints all its +arguments to stdout. + + +@node lesstif DebugXY Action +@subsection lesstif DebugXY +@c key lesstif DebugXY in hid lesstif +@cartouche +@format +DebugXY(...)@end format +@end cartouche + +Debug action, with coordinates +@c ./../src/hid/lesstif/menu.c 72 + +Like @code{Debug}, but requires a coordinate. If the user hasn't yet +indicated a location on the board, the user will be prompted to click +on one. + + +@node lesstif DoWindows Action +@subsection lesstif DoWindows +@c key lesstif DoWindows in hid lesstif +@cartouche +@format +DoWindows(1|2|3|4) +DoWindows(Layout|Library|Log|Netlist)@end format +@end cartouche + +Open various GUI windows. +@c ./../src/hid/lesstif/dialogs.c 831 + +@table @code + +@item 1 +@itemx Layout +Open the layout window. Since the layout window is always shown +anyway, this has no effect. + +@item 2 +@itemx Library +Open the library window. + +@item 3 +@itemx Log +Open the log window. + +@item 4 +@itemx Netlist +Open the netlist window. + +@end table + + +@node lesstif DumpKeys Action +@subsection lesstif DumpKeys +@c key lesstif DumpKeys in hid lesstif +@cartouche +@format +DumpKeys()@end format +@end cartouche + +Dump Lesstif key bindings. +@c ./../src/hid/lesstif/menu.c 101 + +Causes the list of key bindings (from @code{pcb-menu.res}) to be +dumped to stdout. This is most useful when invoked from the command +line like this: + +@example +pcb --action-string DumpKeys +@end example + + +@node lesstif EditLayerGroups Action +@subsection lesstif EditLayerGroups +@c key lesstif EditLayerGroups in hid lesstif +@cartouche +@format +EditLayerGroups()@end format +@end cartouche + +Let the user change the layer groupings +@c ./../src/hid/lesstif/dialogs.c 1448 + +Displays a dialog that lets the user view and change the layer +groupings. Each layer (row) can be a member of any one layer group +(column). Note the special layers @code{solder} and @code{component} +allow you to specify which groups represent the top and bottom of the +board. + +See @ref{ChangeName Action}. + + +@node lesstif Export Action +@subsection lesstif Export +@c key lesstif Export in hid lesstif +@cartouche +@format +Export()@end format +@end cartouche + +Export the layout. +@c ./../src/hid/lesstif/dialogs.c 957 + +Prompts the user for an exporter to use. Then, prompts the user for +that exporter's options, and exports the layout. + + +@node lesstif GetXY Action +@subsection lesstif GetXY +@c key lesstif GetXY in hid lesstif +@cartouche +@format +GetXY()@end format +@end cartouche + +Get a coordinate. +@c ./../src/hid/lesstif/menu.c 54 + +Prompts the user for a coordinate, if one is not already selected. + + +@node lesstif ImportGUI Action +@subsection lesstif ImportGUI +@c key lesstif ImportGUI in hid lesstif +@cartouche +@format +ImportGUI()@end format +@end cartouche + +Lets the user choose the schematics to import from +@c ./../src/hid/lesstif/dialogs.c 1882 + +Displays a dialog that lets the user select the schematic(s) to import +from, then saves that information in the layout's attributes for +future imports. + + +@node lesstif LibraryShow Action +@subsection lesstif LibraryShow +@c key lesstif LibraryShow in hid lesstif +@cartouche +@format +LibraryShow()@end format +@end cartouche + +Displays the library window. +@c ./../src/hid/lesstif/library.c 151 + + +@node lesstif Load Action +@subsection lesstif Load +@c key lesstif Load in hid lesstif +@cartouche +@format +Load() +Load(Layout|LayoutToBuffer|ElementToBuffer|Netlist|Revert)@end format +@end cartouche + +Load layout data from a user-selected file. +@c ./../src/hid/lesstif/dialogs.c 99 + +This action is a GUI front-end to the core's @code{LoadFrom} action +(@pxref{LoadFrom Action}). If you happen to pass a filename, like +@code{LoadFrom}, then @code{LoadFrom} is called directly. Else, the +user is prompted for a filename to load, and then @code{LoadFrom} is +called with that filename. + + +@node lesstif LoadVendor Action +@subsection lesstif LoadVendor +@c key lesstif LoadVendor in hid lesstif +@cartouche +@format +LoadVendor()@end format +@end cartouche + +Loads a user-selected vendor resource file. +@c ./../src/hid/lesstif/dialogs.c 152 + +The user is prompted for a file to load, and then +@code{LoadVendorFrom} is called (@pxref{LoadVendorFrom Action}) to +load that vendor file. + + +@node lesstif NetlistShow Action +@subsection lesstif NetlistShow +@c key lesstif NetlistShow in hid lesstif +@cartouche +@format +NetlistShow(pinname|netname)@end format +@end cartouche + +Selects the given pinname or netname in the netlist window. +@c ./../src/hid/lesstif/netlist.c 415 + + +@node lesstif Print Action +@subsection lesstif Print +@c key lesstif Print in hid lesstif +@cartouche +@format +Print()@end format +@end cartouche + +Print the layout. +@c ./../src/hid/lesstif/dialogs.c 894 + +This will find the default printing HID, prompt the user for its +options, and print the layout. + + +@node lesstif PrintCalibrate Action +@subsection lesstif PrintCalibrate +@c key lesstif PrintCalibrate in hid lesstif +@cartouche +@format +PrintCalibrate()@end format +@end cartouche + +Calibrate the printer. +@c ./../src/hid/lesstif/dialogs.c 937 + +This will print a calibration page, which you would measure and type +the measurements in, so that future printouts will be more precise. + + +@node lesstif PromptFor Action +@subsection lesstif PromptFor +@c key lesstif PromptFor in hid lesstif +@cartouche +@format +PromptFor([message[,default]])@end format +@end cartouche + +Prompt for a response. +@c ./../src/hid/lesstif/dialogs.c 560 + +This is mostly for testing the lesstif HID interface. The parameters +are passed to the @code{prompt_for()} HID function, causing the user +to be prompted for a response. The respose is simply printed to the +user's stdout. + + +@node lesstif Return Action +@subsection lesstif Return +@c key lesstif Return in hid lesstif +@cartouche +@format +Return(0|1)@end format +@end cartouche + +Simulate a passing or failing action. +@c ./../src/hid/lesstif/menu.c 89 + +This is for testing. If passed a 0, does nothing and succeeds. If +passed a 1, does nothing but pretends to fail. + + +@node lesstif Save Action +@subsection lesstif Save +@c key lesstif Save in hid lesstif +@cartouche +@format +Save() +Save(Layout|LayoutAs) +Save(AllConnections|AllUnusedPins|ElementConnections) +Save(PasteBuffer)@end format +@end cartouche + +Save layout data to a user-selected file. +@c ./../src/hid/lesstif/dialogs.c 197 + +This action is a GUI front-end to the core's @code{SaveTo} action +(@pxref{SaveTo Action}). If you happen to pass a filename, like +@code{SaveTo}, then @code{SaveTo} is called directly. Else, the +user is prompted for a filename to save, and then @code{SaveTo} is +called with that filename. + + +@node lesstif SelectLayer Action +@subsection lesstif SelectLayer +@c key lesstif SelectLayer in hid lesstif +@cartouche +@format +SelectLayer(1..MAXLAYER|Silk|Rats)@end format +@end cartouche + +Select which layer is the current layer. +@c ./../src/hid/lesstif/menu.c 387 + +The specified layer becomes the currently active layer. It is made +visible if it is not already visible + + +@node lesstif SetUnits Action +@subsection lesstif SetUnits +@c key lesstif SetUnits in hid lesstif +@cartouche +@format +SetUnits(mm|mil)@end format +@end cartouche + +Set the default measurement units. +@c ./../src/hid/lesstif/main.c 395 + +@table @code + +@item mil +Sets the display units to mils (1/1000 inch). + +@item mm +Sets the display units to millimeters. + +@end table + + +@node lesstif SwapSides Action +@subsection lesstif SwapSides +@c key lesstif SwapSides in hid lesstif +@cartouche +@format +SwapSides(|v|h|r)@end format +@end cartouche + +Swaps the side of the board you're looking at. +@c ./../src/hid/lesstif/main.c 494 + +This action changes the way you view the board. + +@table @code + +@item v +Flips the board over vertically (up/down). + +@item h +Flips the board over horizontally (left/right), like flipping pages in +a book. + +@item r +Rotates the board 180 degrees without changing sides. + +@end table + +If no argument is given, the board isn't moved but the opposite side +is shown. + +Normally, this action changes which pads and silk layer are drawn as +true silk, and which are drawn as the "invisible" layer. It also +determines which solder mask you see. + +As a special case, if the layer group for the side you're looking at +is visible and currently active, and the layer group for the opposite +is not visible (i.e. disabled), then this action will also swap which +layer group is visible and active, effectively swapping the ``working +side'' of the board. + + +@node lesstif ToggleView Action +@subsection lesstif ToggleView +@c key lesstif ToggleView in hid lesstif +@cartouche +@format +ToggleView(1..MAXLAYER) +ToggleView(layername) +ToggleView(Silk|Rats|Pins|Vias|Mask|BackSide)@end format +@end cartouche + +Toggle the visibility of the specified layer or layer group. +@c ./../src/hid/lesstif/menu.c 409 + +If you pass an integer, that layer is specified by index (the first +layer is @code{1}, etc). If you pass a layer name, that layer is +specified by name. When a layer is specified, the visibility of the +layer group containing that layer is toggled. + +If you pass a special layer name, the visibility of those components +(silk, rats, etc) is toggled. Note that if you have a layer named +the same as a special layer, the layer is chosen over the special layer. + + +@node lesstif Zoom Action +@subsection lesstif Zoom +@c key lesstif Zoom in hid lesstif +@cartouche +@format +Zoom() +Zoom(factor)@end format +@end cartouche + +Various zoom factor changes. +@c ./../src/hid/lesstif/main.c 419 + +Changes the zoom (magnification) of the view of the board. If no +arguments are passed, the view is scaled such that the board just fits +inside the visible window (i.e. ``view all''). Otherwise, +@var{factor} specifies a change in zoom factor. It may be prefixed by +@code{+}, @code{-}, or @code{=} to change how the zoom factor is +modified. The @var{factor} is a floating point number, such as +@code{1.5} or @code{0.75}. + +@table @code + +@item +@var{factor} +Values greater than 1.0 cause the board to be drawn smaller; more of +the board will be visible. Values between 0.0 and 1.0 cause the board +to be drawn bigger; less of the board will be visible. + +@item -@var{factor} +Values greater than 1.0 cause the board to be drawn bigger; less of +the board will be visible. Values between 0.0 and 1.0 cause the board +to be drawn smaller; more of the board will be visible. + +@item =@var{factor} + +The @var{factor} is an absolute zoom factor; the unit for this value +is "PCB units per screen pixel". Since PCB units are 0.01 mil, a +@var{factor} of 1000 means 10 mils (0.01 in) per pixel, or 100 DPI, +about the actual resolution of most screens - resulting in an "actual +size" board. Similarly, a @var{factor} of 100 gives you a 10x actual +size. + +@end table + +Note that zoom factors of zero are silently ignored. + + Index: trunk/doc-orig/ascii2texi.awk =================================================================== --- trunk/doc-orig/ascii2texi.awk (nonexistent) +++ trunk/doc-orig/ascii2texi.awk (revision 1037) @@ -0,0 +1,77 @@ +#!/usr/bin/awk -f +# +# $Id$ +# + +BEGIN { + first = 1; + col = 1; +} + +/^[ \t]*#/ { + # skip comment lines + next; +} + +/^[ \t]*$/ { + # skip blank + next; +} + +# we do this 'first' song and dance because variables set +# on the command line are not available in the BEGIN section +first == 1 { + first = 0; + printf("@c Generated file. Do not edit directly\n"); + printf("@c $" "Id" "$\n"); + printf("@multitable @columnfractions "); + for(i = 1 ; i <= 2*ncol ; i = i + 1) { + printf("%.3g ", 0.5 / ncol); + } + printf("\n"); + + printf("@item "); + for(i = 1 ; i <= ncol ; i = i + 1) { + if( i > 1 ) { printf("@tab "); } + printf("Drill @tab Diameter "); + } + printf("\n"); + + printf("@item "); + for(i = 1 ; i <= ncol ; i = i + 1) { + if( i > 1 ) { printf("@tab "); } + printf("Size @tab (inches) "); + } + printf("\n"); + + printf("\n"); +} + +{ + if( col == 1 ) { + printf("@item "); + } else { + printf("@tab "); + } + drl = $1; + dia = $2; + gsub(/_/, " ", drl); + printf("%s @tab %s ", drl, dia); + col = col + 1; + if( col > ncol ) { + col = 1; + printf("\n"); + } +} + +END { + while( (col > 1) && (col <= ncol ) ) { + printf("@tab @tab "); + col = col + 1; + } + + printf("@end multitable\n\n"); +} + + + Property changes on: trunk/doc-orig/ascii2texi.awk ___________________________________________________________________ Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: trunk/doc-orig/eps2png =================================================================== --- trunk/doc-orig/eps2png (nonexistent) +++ trunk/doc-orig/eps2png (revision 1037) @@ -0,0 +1,495 @@ +#!/usr/bin/perl + +my $RCS_Id = '$Id$ '; + +# Author : Johan Vromans +# Created On : Tue Sep 15 15:59:04 1992 +# Last Modified By: Johan Vromans +# Last Modified On: Sun Jun 24 17:07:29 2001 +# Update Count : 155 +# Status : Okay + +################ Common stuff ################ + +use strict; +use Getopt::Long 2.1; + +my $my_package = "Sciurix"; +my ($my_name, $my_version) = $RCS_Id =~ /: (.+).pl,v ([\d.]+)/; +$my_version .= '*' if length('$Locker$ ') > 12; + +use vars qw($VERSION); +( $VERSION ) = '$Revision$ ' =~ /\$Revision:\s+([^\s]+)/; + +################ Program parameters ################ + +### CONFIG +# Some GhostScript programs can produce GIF directly. +# If not, we need the PBM package for the conversion. +my $use_pbm = 1; # GhostScript can not produce GIF +### END CONFIG + +my $res = 82; # default resolution +my $scale = 1; # default scaling +my $mono = 0; # produce BW images if non-zero +my $format; # output format +my $gs_format; # GS output type +my $output; # output, defaults to STDOUT +my $antialias = 4; # antialiasing +my $width; # desired widht +my $height; # desired height + +my ($verbose,$trace,$test,$debug) = (0,0,0,0); +handle_options (); +unless ( defined $format ) { + if ( $0 =~ /2(gif|jpg|png)$/ ) { + set_out_type ($1); + } + else { + set_out_type ('png') unless defined $format; + } +} +print STDERR ("Producing $format ($gs_format) image.\n") if $verbose; + +$trace |= $test | $debug; +$verbose |= $trace; + +################ Presets ################ + +################ The Process ################ + +my $eps_file; +my $err = 0; + +foreach $eps_file ( @ARGV ) { + + unless ( open (EPS, $eps_file) ) { + print STDERR ("Cannot open $eps_file [$!], skipped\n"); + $err++; + next; + } + + my $line = ; + unless ( $line =~ /^%!PS-Adobe.*EPSF-/ ) { + print STDERR ("Not EPS file: $eps_file, skipped\n"); + $err++; + next; + } + + my $ps = ""; # PostScript input data + my $xscale; + my $yscale; + + while ( $line = ) { + + # Search for BoundingBox. + if ( $line =~ /^%%BoundingBox:\s*(\S+)\s+(\S+)\s+(\S+)\s+(\S+)/i ) { + + print STDERR ("$eps_file: x0=$1, y0=$2, w=", $3-$1, ", h=", $4-$2) + if $verbose; + + if ( defined $width ) { + $res = 72; + $xscale = $width / ($3 - $1); + if ( defined $height ) { + $yscale = $height / ($4 - $2); + } + else { + $yscale = $xscale; + $height = ($4 - $2) * $yscale; + } + } + elsif ( defined $height ) { + $res = 72; + $yscale = $height / ($4 - $2); + if ( defined $width ) { + $xscale = $width / ($3 - $1); + } + else { + $xscale = $yscale; + $width = ($3 - $1) * $xscale; + } + } + unless ( defined $xscale ) { + $xscale = $yscale = $scale; + # Calculate actual width. + $width = $3 - $1; + $height = $4 - $2; + # Normal PostScript resolution is 72. + $width *= $res/72 * $xscale; + $height *= $res/72 * $yscale; + # Round up. + $width = int ($width + 0.5) + 1; + $height = int ($height + 0.5) + 1; + } + print STDERR (", width=$width, height=$height\n") if $verbose; + + # Scale. + $ps .= "$xscale $yscale scale\n" + if $xscale != 1 || $yscale != 1; + + # Create PostScript code to translate coordinates. + $ps .= (0-$1) . " " . (0-$2) . " translate\n" + unless $1 == 0 && $2 == 0; + + # Include the image, show and quit. + $ps .= "($eps_file) run\n". + "showpage\n". + "quit\n"; + + last; + } + elsif ( $line =~ /^%%EndComments/i ) { + print STDERR ("No bounding box in $eps_file\n"); + $err++; + last; + } + } + close (EPS); + + my $out_file; # output file + my $pbm_file; # temporary file for PBM conversion + + # Note the temporary PBM file is created where the output file is + # located, since that will guarantee accessibility (and a valid + # filename). + if ( defined $output ) { + $out_file = $output; + $pbm_file = $output.".ppm"; + } + elsif ( $eps_file =~ /^(.+).epsf?$/i ) { + $out_file = "$1.$format"; + $pbm_file = $1.".ppm"; + } + else { + $out_file = $eps_file . ".$format"; + $pbm_file = $eps_file . ".ppm"; + } + print STDERR ("Creating $out_file\n") if $verbose; + + my $gs0 = "gs -q -dNOPAUSE -r$res -g${width}x$height"; + my $gs1 = "-"; + $gs0 .= " -dTextAlphaBits=$antialias -dGraphicsAlphaBits=$antialias" + if $antialias; + if ( $format eq 'png' ) { + mysystem ("$gs0 -sDEVICE=". ($mono ? "pngmono" : $gs_format). + " -sOutputFile=$out_file $gs1", $ps); + } + elsif ( $format eq 'jpg' ) { + mysystem ("$gs0 -sDEVICE=". ($mono ? "jpeggray" : $gs_format). + " -sOutputFile=$out_file $gs1", $ps); + } + elsif ( $format eq 'gif' ) { + if ( $use_pbm ) { + # Convert to PPM and use some of the PBM converters. + mysystem ("$gs0 -sDEVICE=". ($mono ? "pbm" : "ppm"). + " -sOutputFile=$pbm_file $gs1", $ps); + # mysystem ("pnmcrop $pbm_file | ppmtogif > $out_file"); + mysystem ("ppmtogif $pbm_file > $out_file"); + unlink ($pbm_file); + } + else { + # GhostScript has GIF drivers built-in. + mysystem ("$gs0 -sDEVICE=". ($mono ? "gifmono" : "gif8"). + " -sOutputFile=$out_file $gs1", $ps); + } + } + else { + print STDERR ("ASSERT ERROR: Unhandled output type: $format\n"); + exit (1); + } + + unless ( -s $out_file ) { + print STDERR ("Problem creating $out_file for $eps_file\n"); + $err++; + } + +} + +exit 1 if $err; + +################ Subroutines ################ + +sub mysystem { + my ($cmd, $data) = @_; + print STDERR ("+ $cmd\n") if $trace; + if ( $data ) { + if ( $trace ) { + my $dp = ">> " . $data; + $dp =~ s/\n(.)/\n>> $1/g; + print STDERR ("$dp"); + } + open (CMD, "|$cmd") or die ("cmd: $!\n"); + print CMD $data; + close CMD or die ("cmd close: $!\n"); + } + else { + system ($cmd); + } +} + +sub set_out_type { + my ($opt) = lc (shift (@_)); + if ( $opt =~ /^png(mono|gray|16|256|16m)?$/ ) { + $format = 'png'; + $gs_format = $format.(defined $1 ? $1 : '16m'); + } + elsif ( $opt =~ /^gif(mono)?$/ ) { + $format = 'gif'; + $gs_format = $format.(defined $1 ? $1 : ''); + } + elsif ( $opt =~ /^(jpg|jpeg)(gray)?$/ ) { + $format = 'jpg'; + $gs_format = 'jpeg'.(defined $2 ? $2 : ''); + } + else { + print STDERR ("ASSERT ERROR: Invalid value to set_out_type: $opt\n"); + exit (1); + } +} + +sub handle_options { + my ($help) = 0; # handled locally + my ($ident) = 0; # handled locally + + # Process options. + if ( @ARGV > 0 && $ARGV[0] =~ /^[-+]/ ) { + usage () + unless GetOptions ('ident' => \$ident, + 'verbose' => \$verbose, + 'antialias|aa=i' => \$antialias, + 'noantialias|noaa' => sub { $antialias = 0 }, + 'scale=f' => \$scale, + 'width=i' => \$width, + 'height=i' => \$height, + 'output=s' => \$output, + 'png' => \&set_out_type, + 'pngmono' => \&set_out_type, + 'pnggray' => \&set_out_type, + 'png16' => \&set_out_type, + 'png256' => \&set_out_type, + 'png16m' => \&set_out_type, + 'jpg' => \&set_out_type, + 'jpggray' => \&set_out_type, + 'jpeg' => \&set_out_type, + 'jpeggray' => \&set_out_type, + 'gif' => \&set_out_type, + 'gifmono' => \&set_out_type, + 'mono!' => \$mono, + 'resolution=i' => \$res, + 'pbm!' => \$use_pbm, + 'trace' => \$trace, + 'help' => \$help, + 'debug' => \$debug) + && !$help; + } + print STDERR ("This is $my_package [$my_name $my_version]\n") + if $ident; + die ("Only one file argument is allowed when -output is used\n") + if @ARGV > 1 && defined $output; + die ("At least one input file name must be specified\n") + unless @ARGV; + die ("Antialias value must be 0, 1, 2, 4, or 8\n") + unless "$antialias" =~ /^[01248]$/; +} + +sub usage { + print STDERR < (the default), it produces PNG images by +default. Likewise, C defaults to GIF images and C +defaults to JPG. Note that the normal installation procedure will +I install C. + +It uses GhostScript to produce the images. Since modern GhostScript +programs do not support GIF anymore, GIF images are produced via the +Portable PixMap converters (PBM-package). In this case, a temporary +file is created, named after the output file, with the extension +replaced by ".ppm". It is deleted upon completion. + +=head1 ARGUMENTS + +B always requires at least one argument: the name of the EPS +file to be converted. It is possible to specify more than one file +name. This will cause all named files to be converted into separate +files, e.g., "C" will be converted to "C" and +so on. + +=over 4 + +=item B<-png -pngmono -pnggray -png16 -png256 -png16m> + +Each of these options will instruct Ghostscript to use the +corresponding bitmap generator, and supply a C<.png> default +extension for output files. + +=item B<-jpg -jpggray -jpeg -jpeggray> + +Same, but with a C<.jpg> default extension for output files. + +=item B<-gif -gifmono> + +Same, but with a C<.gif> default extension for output files. + +Note: Since modern Ghostscript versions no longer support the GIF +format due to copyright restrictions, B will request +Ghostscript to produce a Portable Bitmap File (.ppm or .pbm) instead +and run the B converter to produce the actual GIF file. + +=item B<-mono> + +This option will select monochrome (BW or gray) output. It forces the +Ghostscript driver to C, C, C, or C. + +=item B<-nomono> + +Produces colour images. This is the default. + +=item B<-width> I + +The desired width of the output image. + +If B<-height> is not specified, the image will be scaled proportionally. + +=item B<-height> I + +The desired height of the output image. + +If B<-width> is not specified, the image will be scaled proportionally. + +=item B<-resolution> I + +Specifies the resolution for the output image. This is the width, in +pixels, of the bitmap image for an EPS image of one inch wide (72 +PostScript points). + +Note that for best results, use the B<-width> and B<-height> options +instead. + +Default value is 82, which causes the converted image to be of more +or less the same size as the EPS image. On my screen, that is. + +=item B<-scale> I + +Specify a scaling factor. This may be a fractional number. + +For a one-inch EPS image, the resultant bitmap image will be +I times I. + +Note that for best results, use the B<-width> and B<-height> options +instead. + +=item B<-antialias> I + +Sets the antialiasing depth. I must be 0 (no antialiasing), 1, 2, +4, or 8. Default value is 4. + +=item B<-noantialias> + +Sets the antialiasing depth to 0. + +=item B<-pbm> + +Forces GIF conversion through the PBM converters. + +=item B<-nopbm> + +Forces GIF conversion through Ghostscript. + +=item B<-output> I + +Stores the output in this file. Only one input file may be supplied if +this option is specified. + +=item B<-help> + +Prints a help message and exits. + +=item B<-ident> + +Prints the program version before doing anything else. + +=item B<-verbose> + +Provides more verbose information. + +=back + +=head1 AUTHOR + +Johan Vromans, . + +=head1 BUGS + +GhostScript and, if required, the PBM package, need to be installed and +accessible through the user's C. + +GhostScript is assumed to be capable of handling all the image types +listed above. + +The EPS should be well-behaving. + +=head1 COPYRIGHT AND DISCLAIMER + +This program is Copyright 1994,2001 by Johan Vromans. +This program is free software; you can redistribute it and/or +modify it under the terms of the Perl Artistic License or the +GNU General Public License as published by the Free Software +Foundation; either version 2 of the License, or (at your option) any +later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +If you do not have a copy of the GNU General Public License write to +the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, +MA 02139, USA. + +=cut Property changes on: trunk/doc-orig/eps2png ___________________________________________________________________ Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: trunk/doc-orig/extract-docs =================================================================== --- trunk/doc-orig/extract-docs (nonexistent) +++ trunk/doc-orig/extract-docs (revision 1037) @@ -0,0 +1,322 @@ +#!/usr/bin/perl +# -*- perl -*- +# +# $Id$ +# +################################################################# +# This script extracts special comments from the source. It assembles +# them in texinfo files that are included in the manual. +################################################################# +# +# The general format of what this script looks for is thusly: +# +# %start-doc category sort-key +# texi stuff goes here +# %end-doc +# +# The lines with the %start-doc and %end-doc are not included in the +# texi extraction; only the lines between them. The category is used +# to determine the file that's created; a category of "foo" causes a +# file "foo.texi" to be created. The sort-keys are case insensitive. +# The text extracted is sorte according to the key and put into the +# file according to the category. Each unique sort-key causes a @node +# to be created, unless that sort-key's text already has a @node in +# it. +# If the sort-key contains space characters, it should be enclosed by +# quotation marks ("). Leading digits in the sort key optionally followed +# by space are removed after sort but before creation of nodes. This +# allows to manipulate the order of nodes in the manual. +# +# Note that we synthesize a special @syntax command, which should be +# used for all things syntax. We change those to whatever the current +# desired style is for syntaxes (currently, a cartouche box of +# non-wrapped but variable-pitch font). +# +# For extracting actions, this script expects a very specific syntax +# to be used. It looks like this, with one or more lines +# (continuations are like this example): +# +# static const char some_string_help[] = +# "some text\n" +# "some text"; +# +# Repeat for some_string_syntax[], then follow those with the usual +# %start-doc. Note that the %start-doc for actions must use the +# category "actions" and the sort key must match the action name. +# +# Within start-doc/end-doc pairs, you can use two special @-lines +# to control the generated node names and document structure. +# +# @nodetype section +# You can specify section, subsection, unnumberedsubsec, etc. Each +# unique sort key within each category is assigned one of these. +# @nodename pattern +# A sprintf-like pattern to use to modify the sort-key to make a +# node name. Since node names must be unique and have various +# restrictions as to what characters you can use in them, this +# allows you to use a pattern for various categories which will help +# keep node names unique without requiring lots of repetetive typing +# in the source files. + +$docdir = shift; +$docdir = "." unless $docdir; +$srcdir = "$docdir/../src"; +$docdir = "."; + +my $debug = 0; + +open(FIND, "find $srcdir -type f -name '*.[chly]' -print | sort |"); +while () { + s/[\r\n]+$//; + &scan_file($_); +} +close (FIND); + +sub dsort { + my ($a, $b) = @_; + $a =~ tr/A-Z/a-z/; + $b =~ tr/A-Z/a-z/; + return $a cmp $b; +} + +for $cat (sort keys %text) { + print "$cat\n"; + @k = sort {&dsort($a,$b)} keys %{$text{$cat}}; + $new = ''; + $new .= "\@c key $cat\n"; + if ($cat eq "actions") { + &dump_00_keys($cat, "\0\$"); + $new .= "\n\@menu\n"; + for $hid (sort keys %{$hids{$cat}}) { + if ($hid =~ /../) { + $new .= "* ${hid} actions::\n"; + } else { + $new .= "* core actions::\n"; + } + } + $new .= "\@end menu\n\n"; + for $hid (sort keys %{$hids{$cat}}) { + if ($hid =~ /../) { + $new .= "\@node $hid actions\n"; + $new .= "\@section $hid actions\n"; + &dump_00_keys($cat, "\0$hid\$"); + } else { + $new .= "\@node core actions\n"; + $new .= "\@section Core actions\n"; + } + $new .= "\@menu\n"; + for $key (@k) { + next unless $key =~ /\0$hid$/; + next if $key =~ /^00/; + $k2 = $title{$cat}{$key}; + if ($hid =~ /\S/ && $hid !~ /common/) { + $k2 = "$hid $k2"; + } + $new .= "* ${k2} Action:: $desc{$key}\n"; + } + $new .= "\@end menu\n"; + for $key (@k) { + next unless $key =~ /\0$hid$/; + next if $key =~ /^00/; + $k2 = $title{$cat}{$key}; + if ($hid =~ /\S/ && $hid !~ /common/) { + $k2 = "$hid $k2"; + } + if ($key !~ /^00/) { + $new .= "\@node $k2 Action\n"; + $new .= "\@subsection $k2\n"; + } + $new .= "\@c key $k2 in hid $hid\n"; + if ($synt{$key}) { + $new .= "\@cartouche\n\@format\n"; + $new .= $synt{$key}; + $new .= "\@end format\n\@end cartouche\n\n"; + } + if ($desc{$key}) { + $new .= $desc{$key} . "\n"; + } + $new .= $text{$cat}{$key}; + if (! $desc{$key} && ! $text{$cat}{$key} ) { + $new .= "No documentation yet.\n"; + } + $new .= "\n"; + } + } + } else { + $nodetype = "section"; + &dump_00_keys($cat, ""); + $new .= "\@menu\n"; + $nodename = "%s"; + for $key (@k) { + if ($nodename{$cat}{$key}) { + $nodename = $nodename{$cat}{$key}; + } + next if $key =~ /^00/; + $k2 = $title{$cat}{$key}; + # strip leading digits from the key string + $k2 =~ s/\A\d+\s*//g; + $k2 = sprintf($nodename, $k2); + if ($text{$cat}{$key} !~ /\@node/) { + $new .="* ${k2}::\n"; + } + } + $new .= "\@end menu\n"; + $nodename = "%s"; + for $key (@k) { + if ($nodetype{$cat}{$key}) { + $nodetype = $nodetype{$cat}{$key}; + } + if ($nodename{$cat}{$key}) { + $nodename = $nodename{$cat}{$key}; + } + next if $key =~ /^00/; + $k2 = $title{$cat}{$key}; + # strip leading digits from the key string + $k2 =~ s/\A\d+\s*//g; + $k2n = sprintf($nodename, $k2); + $new .= "\@c $cat $k2\n"; + if ($text{$cat}{$key} !~ /\@node/) { + $new .= "\@node $k2n\n"; + $new .= "\@$nodetype $k2\n"; + } + $new .= $text{$cat}{$key}; + } + } + $^A = ""; + $line = join(' ', @k); + formline(" ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ~~\n", $line); + print $^A; + + $old = ''; + if ( -f "$docdir/$cat.texi") { + open(CAT, "$docdir/$cat.texi"); + $old = join('', ); + close CAT; + } + if ($old ne $new) { + open(CAT, ">$docdir/$cat.texi"); + print CAT $new; + close CAT; + } +} + +sub dump_00_keys { + my($cat, $regex) = @_; + for $k (@k) { + next unless $k =~ /00.*$regex/; + $new .= $text{$cat}{$k}; + } +} + +sub scan_file { + my ($name) = @_; + print "DEBUG: sub_scan($name)\n" if ($debug); + + # if the source file was in $(srcdir)/hid// then + # pick out the name of the hid and put it into $srcdir. + if ($name =~ m@hid/([^/]+)/@) { + $hid = "$1"; + } else { + $hid = ""; + } + $lineno = 0; + + # skip processing of lex/yacc output files + if ($name =~ /\.[ch]$/) { + $new = $name; + $new =~ s/\.[ch]$/\.y/; + return if -f $new; + $new =~ s/\.y$/\.l/; + return if -f $new; + } + + open(F, $name); + while () { + $lineno ++; + if (/^static\s+const\s+char\s+.*_(help|syntax)\[\]\s*=(.*)/) { + $tag = $1; + $last = 0; + $pending{$tag} = ''; + + # note that the help/syntax string may start on the same line + # as the "static const char"... bit so we pick out that part and + # process it first. + $_ = $2; + LOOP: { + do { + # eat trailing whitespace, new-lines, and carriage returns + s/[\r\n\s]+$//; + + # we're done if we found the terminating ";" + $last = 1 if /;$/; + + # otherwise we need to eat leading whitespace and the leading quote + s/^[\s]*\"//; #" + + # convert \n to a newline + s/\\n/\n/g; + + # eat trailing quotes + s/\";?$//; #" + s/\\\"/\"/g; #" + s/ "/``/g; + s/" /''/g; + $pending{$tag} .= $_; + last if $last; + } while (); + } + # spit out a warning in case we have a malformed help + if ($pending{$tag} =~ /%(start|end)-doc/) { + print "WARNING: $name line $lineno has a $1 string that includes a %start-doc or %end-doc\n"; + print " tag:\n$pending{$tag}\n\n"; + } + next; + } + + if (/%start-doc\s+(\S+)\s+([^"^\s]+|".*?")(\s+(.*))?/) { + # pattern to look for: + # start-doc -> "%start-doc" + # \s+ -> one ore more whitespace + # (\S+) -> string with no whitespace, goes to $1 + # \s+ -> one ore more whitespace + # ([^"^\s]+|".*?") -> a space-less string, or a string delimited by ", goes to $2 + # (\s+(.*))? -> zero or more space separated strings + + $cat = $1; + $key = $2; + # strip leading and trailing quotation marks from the key string + $key =~ s/\A"//g; + $key =~ s/"\Z//g; + $title = $4; + if ($title) { + $title{$cat}{"$key\0$hid"} = $title; + } else { + $title{$cat}{"$key\0$hid"} = $key; + } + $text{$cat}{"$key\0$hid"} .= "\@c $name $lineno\n"; + $hids{$cat}{$hid} = 1; + if ($cat =~ /^(.*_)?actions/) { + $desc{"$key\0$hid"} = $pending{'help'}; + $synt{"$key\0$hid"} = $pending{'syntax'}; + %pending = (); + } + while () { + next if /^\*\/$/; + next if /^\/\*$/; + last if /%end-doc/; + s/\@syntax/\@cartouche\n\@format/g; + s/\@end syntax/\@end format\n\@end cartouche/g; + if (/^\@nodetype\s*(\S+)/) { + $nodetype{$cat}{"$key\0$hid"} = $1; + next; + } + if (/^\@nodename\s*(.+)/) { + $nodename{$cat}{"$key\0$hid"} = $1; + next; + } + $text{$cat}{"$key\0$hid"} .= $_; + } + } + } + close (F); +} Property changes on: trunk/doc-orig/extract-docs ___________________________________________________________________ Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: trunk/doc-orig/fractional_size.tab =================================================================== --- trunk/doc-orig/fractional_size.tab (nonexistent) +++ trunk/doc-orig/fractional_size.tab (revision 1037) @@ -0,0 +1,68 @@ +# $Id$ +# + +1/64 .0156 +1/32 .0313 +3/64 .0469 +1/16 .0625 +5/64 .0781 +3/32 .0938 +7/64 .1094 +1/8 .1250 +9/64 .1406 +5/32 .1562 +11/64 .1719 +3/16 .1875 +13/64 .2031 +7/32 .2188 +15/64 .2344 +1/4 .2500 +17/64 .2656 +9/32 .2812 +19/64 .2969 +5/16 .3125 +21/64 .3281 +11/32 .3438 +23/64 .3594 +3/8 .3750 +25/64 .3906 +13/32 .4062 +27/64 .4219 +7/16 .4375 +29/64 .4531 +15/32 .4688 +31/64 .4844 +1/2 .5000 +33/64 .5156 +17/32 .5313 +35/64 .5469 +9/16 .5625 +37/64 .5781 +19/32 .5938 +39/64 .6094 +5/8 .6250 +41/64 .6406 +21/32 .6562 +43/64 .6719 +11/16 .6875 +45/64 .7031 +23/32 .7188 +47/64 .7344 +3/4 .7500 +49/64 .7656 +25/32 .7812 +51/64 .7969 +13/16 .8125 +53/64 .8281 +27/32 .8438 +55/64 .8594 +7/8 .8750 +57/64 .8906 +29/32 .9062 +59/64 .9219 +15/16 .9375 +61/64 .9531 +31/32 .9688 +63/64 .9844 +1 1.0000 + Index: trunk/doc-orig/fractional_size.texi =================================================================== --- trunk/doc-orig/fractional_size.texi (nonexistent) +++ trunk/doc-orig/fractional_size.texi (revision 1037) @@ -0,0 +1,29 @@ +@c Generated file. Do not edit directly +@c $Id$ +@multitable @columnfractions 0.167 0.167 0.167 0.167 0.167 0.167 +@item Drill @tab Diameter @tab Drill @tab Diameter @tab Drill @tab Diameter +@item Size @tab (inches) @tab Size @tab (inches) @tab Size @tab (inches) + +@item 1/64 @tab .0156 @tab 1/32 @tab .0313 @tab 3/64 @tab .0469 +@item 1/16 @tab .0625 @tab 5/64 @tab .0781 @tab 3/32 @tab .0938 +@item 7/64 @tab .1094 @tab 1/8 @tab .1250 @tab 9/64 @tab .1406 +@item 5/32 @tab .1562 @tab 11/64 @tab .1719 @tab 3/16 @tab .1875 +@item 13/64 @tab .2031 @tab 7/32 @tab .2188 @tab 15/64 @tab .2344 +@item 1/4 @tab .2500 @tab 17/64 @tab .2656 @tab 9/32 @tab .2812 +@item 19/64 @tab .2969 @tab 5/16 @tab .3125 @tab 21/64 @tab .3281 +@item 11/32 @tab .3438 @tab 23/64 @tab .3594 @tab 3/8 @tab .3750 +@item 25/64 @tab .3906 @tab 13/32 @tab .4062 @tab 27/64 @tab .4219 +@item 7/16 @tab .4375 @tab 29/64 @tab .4531 @tab 15/32 @tab .4688 +@item 31/64 @tab .4844 @tab 1/2 @tab .5000 @tab 33/64 @tab .5156 +@item 17/32 @tab .5313 @tab 35/64 @tab .5469 @tab 9/16 @tab .5625 +@item 37/64 @tab .5781 @tab 19/32 @tab .5938 @tab 39/64 @tab .6094 +@item 5/8 @tab .6250 @tab 41/64 @tab .6406 @tab 21/32 @tab .6562 +@item 43/64 @tab .6719 @tab 11/16 @tab .6875 @tab 45/64 @tab .7031 +@item 23/32 @tab .7188 @tab 47/64 @tab .7344 @tab 3/4 @tab .7500 +@item 49/64 @tab .7656 @tab 25/32 @tab .7812 @tab 51/64 @tab .7969 +@item 13/16 @tab .8125 @tab 53/64 @tab .8281 @tab 27/32 @tab .8438 +@item 55/64 @tab .8594 @tab 7/8 @tab .8750 @tab 57/64 @tab .8906 +@item 29/32 @tab .9062 @tab 59/64 @tab .9219 @tab 15/16 @tab .9375 +@item 61/64 @tab .9531 @tab 31/32 @tab .9688 @tab 63/64 @tab .9844 +@item 1 @tab 1.0000 @tab @tab @tab @tab @end multitable + Index: trunk/doc-orig/gcode.pcb =================================================================== --- trunk/doc-orig/gcode.pcb (nonexistent) +++ trunk/doc-orig/gcode.pcb (revision 1037) @@ -0,0 +1,1000 @@ +# release: pcb 20091103 +# date: Tue Feb 9 17:50:10 2010 +# user: amc (amc,/home/alberto,S-1-5-21-3544562028-792812758-4257637587-9314) +# host: ni28979b.office.amsiag.com + +# To read pcb files, the pcb version (or the cvs source date) must be >= the file version +FileVersion[20070407] + +PCB["" 280000 160000] + +Grid[1000.000000 0 0 0] +Cursor[0 0 0.000000] +PolyArea[200000000.000000] +Thermal[0.500000] +DRC[1000 1000 1000 1000 1500 1000] +Flags("showdrc,nameonpcb,swapstartdir,clearnew,snappin") +Groups("1,c:2,s:3:4:5:6:7:8") +Styles["Signal,4000,8000,3000,2000:Power,2500,6000,3500,1000:Fat,4000,6000,3500,1000:Skinny,600,2402,1181,600"] + +Symbol(' ' 18) +( +) +Symbol('!' 12) +( + SymbolLine(0 45 0 50 8) + SymbolLine(0 10 0 35 8) +) +Symbol('"' 12) +( + SymbolLine(0 10 0 20 8) + SymbolLine(10 10 10 20 8) +) +Symbol('#' 12) +( + SymbolLine(0 35 20 35 8) + SymbolLine(0 25 20 25 8) + SymbolLine(15 20 15 40 8) + SymbolLine(5 20 5 40 8) +) +Symbol('$' 12) +( + SymbolLine(15 15 20 20 8) + SymbolLine(5 15 15 15 8) + SymbolLine(0 20 5 15 8) + SymbolLine(0 20 0 25 8) + SymbolLine(0 25 5 30 8) + SymbolLine(5 30 15 30 8) + SymbolLine(15 30 20 35 8) + SymbolLine(20 35 20 40 8) + SymbolLine(15 45 20 40 8) + SymbolLine(5 45 15 45 8) + SymbolLine(0 40 5 45 8) + SymbolLine(10 10 10 50 8) +) +Symbol('%' 12) +( + SymbolLine(0 15 0 20 8) + SymbolLine(0 15 5 10 8) + SymbolLine(5 10 10 10 8) + SymbolLine(10 10 15 15 8) + SymbolLine(15 15 15 20 8) + SymbolLine(10 25 15 20 8) + SymbolLine(5 25 10 25 8) + SymbolLine(0 20 5 25 8) + SymbolLine(0 50 40 10 8) + SymbolLine(35 50 40 45 8) + SymbolLine(40 40 40 45 8) + SymbolLine(35 35 40 40 8) + SymbolLine(30 35 35 35 8) + SymbolLine(25 40 30 35 8) + SymbolLine(25 40 25 45 8) + SymbolLine(25 45 30 50 8) + SymbolLine(30 50 35 50 8) +) +Symbol('&' 12) +( + SymbolLine(0 45 5 50 8) + SymbolLine(0 15 0 25 8) + SymbolLine(0 15 5 10 8) + SymbolLine(0 35 15 20 8) + SymbolLine(5 50 10 50 8) + SymbolLine(10 50 20 40 8) + SymbolLine(0 25 25 50 8) + SymbolLine(5 10 10 10 8) + SymbolLine(10 10 15 15 8) + SymbolLine(15 15 15 20 8) + SymbolLine(0 35 0 45 8) +) +Symbol(''' 12) +( + SymbolLine(0 20 10 10 8) +) +Symbol('(' 12) +( + SymbolLine(0 45 5 50 8) + SymbolLine(0 15 5 10 8) + SymbolLine(0 15 0 45 8) +) +Symbol(')' 12) +( + SymbolLine(0 10 5 15 8) + SymbolLine(5 15 5 45 8) + SymbolLine(0 50 5 45 8) +) +Symbol('*' 12) +( + SymbolLine(0 20 20 40 8) + SymbolLine(0 40 20 20 8) + SymbolLine(0 30 20 30 8) + SymbolLine(10 20 10 40 8) +) +Symbol('+' 12) +( + SymbolLine(0 30 20 30 8) + SymbolLine(10 20 10 40 8) +) +Symbol(',' 12) +( + SymbolLine(0 60 10 50 8) +) +Symbol('-' 12) +( + SymbolLine(0 30 20 30 8) +) +Symbol('.' 12) +( + SymbolLine(0 50 5 50 8) +) +Symbol('/' 12) +( + SymbolLine(0 45 30 15 8) +) +Symbol('0' 12) +( + SymbolLine(0 45 5 50 8) + SymbolLine(0 15 0 45 8) + SymbolLine(0 15 5 10 8) + SymbolLine(5 10 15 10 8) + SymbolLine(15 10 20 15 8) + SymbolLine(20 15 20 45 8) + SymbolLine(15 50 20 45 8) + SymbolLine(5 50 15 50 8) + SymbolLine(0 40 20 20 8) +) +Symbol('1' 12) +( + SymbolLine(5 50 15 50 8) + SymbolLine(10 10 10 50 8) + SymbolLine(0 20 10 10 8) +) +Symbol('2' 12) +( + SymbolLine(0 15 5 10 8) + SymbolLine(5 10 20 10 8) + SymbolLine(20 10 25 15 8) + SymbolLine(25 15 25 25 8) + SymbolLine(0 50 25 25 8) + SymbolLine(0 50 25 50 8) +) +Symbol('3' 12) +( + SymbolLine(0 15 5 10 8) + SymbolLine(5 10 15 10 8) + SymbolLine(15 10 20 15 8) + SymbolLine(20 15 20 45 8) + SymbolLine(15 50 20 45 8) + SymbolLine(5 50 15 50 8) + SymbolLine(0 45 5 50 8) + SymbolLine(5 30 20 30 8) +) +Symbol('4' 12) +( + SymbolLine(0 30 20 10 8) + SymbolLine(0 30 25 30 8) + SymbolLine(20 10 20 50 8) +) +Symbol('5' 12) +( + SymbolLine(0 10 20 10 8) + SymbolLine(0 10 0 30 8) + SymbolLine(0 30 5 25 8) + SymbolLine(5 25 15 25 8) + SymbolLine(15 25 20 30 8) + SymbolLine(20 30 20 45 8) + SymbolLine(15 50 20 45 8) + SymbolLine(5 50 15 50 8) + SymbolLine(0 45 5 50 8) +) +Symbol('6' 12) +( + SymbolLine(15 10 20 15 8) + SymbolLine(5 10 15 10 8) + SymbolLine(0 15 5 10 8) + SymbolLine(0 15 0 45 8) + SymbolLine(0 45 5 50 8) + SymbolLine(15 30 20 35 8) + SymbolLine(0 30 15 30 8) + SymbolLine(5 50 15 50 8) + SymbolLine(15 50 20 45 8) + SymbolLine(20 35 20 45 8) +) +Symbol('7' 12) +( + SymbolLine(0 50 25 25 8) + SymbolLine(25 10 25 25 8) + SymbolLine(0 10 25 10 8) +) +Symbol('8' 12) +( + SymbolLine(0 45 5 50 8) + SymbolLine(0 35 0 45 8) + SymbolLine(0 35 5 30 8) + SymbolLine(5 30 15 30 8) + SymbolLine(15 30 20 35 8) + SymbolLine(20 35 20 45 8) + SymbolLine(15 50 20 45 8) + SymbolLine(5 50 15 50 8) + SymbolLine(0 25 5 30 8) + SymbolLine(0 15 0 25 8) + SymbolLine(0 15 5 10 8) + SymbolLine(5 10 15 10 8) + SymbolLine(15 10 20 15 8) + SymbolLine(20 15 20 25 8) + SymbolLine(15 30 20 25 8) +) +Symbol('9' 12) +( + SymbolLine(0 50 20 30 8) + SymbolLine(20 15 20 30 8) + SymbolLine(15 10 20 15 8) + SymbolLine(5 10 15 10 8) + SymbolLine(0 15 5 10 8) + SymbolLine(0 15 0 25 8) + SymbolLine(0 25 5 30 8) + SymbolLine(5 30 20 30 8) +) +Symbol(':' 12) +( + SymbolLine(0 25 5 25 8) + SymbolLine(0 35 5 35 8) +) +Symbol(';' 12) +( + SymbolLine(0 50 10 40 8) + SymbolLine(10 25 10 30 8) +) +Symbol('<' 12) +( + SymbolLine(0 30 10 20 8) + SymbolLine(0 30 10 40 8) +) +Symbol('=' 12) +( + SymbolLine(0 25 20 25 8) + SymbolLine(0 35 20 35 8) +) +Symbol('>' 12) +( + SymbolLine(0 20 10 30 8) + SymbolLine(0 40 10 30 8) +) +Symbol('?' 12) +( + SymbolLine(10 30 10 35 8) + SymbolLine(10 45 10 50 8) + SymbolLine(0 15 0 20 8) + SymbolLine(0 15 5 10 8) + SymbolLine(5 10 15 10 8) + SymbolLine(15 10 20 15 8) + SymbolLine(20 15 20 20 8) + SymbolLine(10 30 20 20 8) +) +Symbol('@' 12) +( + SymbolLine(0 10 0 40 8) + SymbolLine(0 40 10 50 8) + SymbolLine(10 50 40 50 8) + SymbolLine(50 35 50 10 8) + SymbolLine(50 10 40 0 8) + SymbolLine(40 0 10 0 8) + SymbolLine(10 0 0 10 8) + SymbolLine(15 20 15 30 8) + SymbolLine(15 30 20 35 8) + SymbolLine(20 35 30 35 8) + SymbolLine(30 35 35 30 8) + SymbolLine(35 30 40 35 8) + SymbolLine(35 30 35 15 8) + SymbolLine(35 20 30 15 8) + SymbolLine(20 15 30 15 8) + SymbolLine(20 15 15 20 8) + SymbolLine(40 35 50 35 8) +) +Symbol('A' 12) +( + SymbolLine(0 15 0 50 8) + SymbolLine(0 15 5 10 8) + SymbolLine(5 10 20 10 8) + SymbolLine(20 10 25 15 8) + SymbolLine(25 15 25 50 8) + SymbolLine(0 30 25 30 8) +) +Symbol('B' 12) +( + SymbolLine(0 50 20 50 8) + SymbolLine(20 50 25 45 8) + SymbolLine(25 35 25 45 8) + SymbolLine(20 30 25 35 8) + SymbolLine(5 30 20 30 8) + SymbolLine(5 10 5 50 8) + SymbolLine(0 10 20 10 8) + SymbolLine(20 10 25 15 8) + SymbolLine(25 15 25 25 8) + SymbolLine(20 30 25 25 8) +) +Symbol('C' 12) +( + SymbolLine(5 50 20 50 8) + SymbolLine(0 45 5 50 8) + SymbolLine(0 15 0 45 8) + SymbolLine(0 15 5 10 8) + SymbolLine(5 10 20 10 8) +) +Symbol('D' 12) +( + SymbolLine(5 10 5 50 8) + SymbolLine(20 10 25 15 8) + SymbolLine(25 15 25 45 8) + SymbolLine(20 50 25 45 8) + SymbolLine(0 50 20 50 8) + SymbolLine(0 10 20 10 8) +) +Symbol('E' 12) +( + SymbolLine(0 30 15 30 8) + SymbolLine(0 50 20 50 8) + SymbolLine(0 10 0 50 8) + SymbolLine(0 10 20 10 8) +) +Symbol('F' 12) +( + SymbolLine(0 10 0 50 8) + SymbolLine(0 10 20 10 8) + SymbolLine(0 30 15 30 8) +) +Symbol('G' 12) +( + SymbolLine(20 10 25 15 8) + SymbolLine(5 10 20 10 8) + SymbolLine(0 15 5 10 8) + SymbolLine(0 15 0 45 8) + SymbolLine(0 45 5 50 8) + SymbolLine(5 50 20 50 8) + SymbolLine(20 50 25 45 8) + SymbolLine(25 35 25 45 8) + SymbolLine(20 30 25 35 8) + SymbolLine(10 30 20 30 8) +) +Symbol('H' 12) +( + SymbolLine(0 10 0 50 8) + SymbolLine(25 10 25 50 8) + SymbolLine(0 30 25 30 8) +) +Symbol('I' 12) +( + SymbolLine(0 10 10 10 8) + SymbolLine(5 10 5 50 8) + SymbolLine(0 50 10 50 8) +) +Symbol('J' 12) +( + SymbolLine(0 10 15 10 8) + SymbolLine(15 10 15 45 8) + SymbolLine(10 50 15 45 8) + SymbolLine(5 50 10 50 8) + SymbolLine(0 45 5 50 8) +) +Symbol('K' 12) +( + SymbolLine(0 10 0 50 8) + SymbolLine(0 30 20 10 8) + SymbolLine(0 30 20 50 8) +) +Symbol('L' 12) +( + SymbolLine(0 10 0 50 8) + SymbolLine(0 50 20 50 8) +) +Symbol('M' 12) +( + SymbolLine(0 10 0 50 8) + SymbolLine(0 10 15 25 8) + SymbolLine(15 25 30 10 8) + SymbolLine(30 10 30 50 8) +) +Symbol('N' 12) +( + SymbolLine(0 10 0 50 8) + SymbolLine(0 10 0 15 8) + SymbolLine(0 15 25 40 8) + SymbolLine(25 10 25 50 8) +) +Symbol('O' 12) +( + SymbolLine(0 15 0 45 8) + SymbolLine(0 15 5 10 8) + SymbolLine(5 10 15 10 8) + SymbolLine(15 10 20 15 8) + SymbolLine(20 15 20 45 8) + SymbolLine(15 50 20 45 8) + SymbolLine(5 50 15 50 8) + SymbolLine(0 45 5 50 8) +) +Symbol('P' 12) +( + SymbolLine(5 10 5 50 8) + SymbolLine(0 10 20 10 8) + SymbolLine(20 10 25 15 8) + SymbolLine(25 15 25 25 8) + SymbolLine(20 30 25 25 8) + SymbolLine(5 30 20 30 8) +) +Symbol('Q' 12) +( + SymbolLine(0 15 0 45 8) + SymbolLine(0 15 5 10 8) + SymbolLine(5 10 15 10 8) + SymbolLine(15 10 20 15 8) + SymbolLine(20 15 20 45 8) + SymbolLine(15 50 20 45 8) + SymbolLine(5 50 15 50 8) + SymbolLine(0 45 5 50 8) + SymbolLine(10 40 20 50 8) +) +Symbol('R' 12) +( + SymbolLine(0 10 20 10 8) + SymbolLine(20 10 25 15 8) + SymbolLine(25 15 25 25 8) + SymbolLine(20 30 25 25 8) + SymbolLine(5 30 20 30 8) + SymbolLine(5 10 5 50 8) + SymbolLine(5 30 25 50 8) +) +Symbol('S' 12) +( + SymbolLine(20 10 25 15 8) + SymbolLine(5 10 20 10 8) + SymbolLine(0 15 5 10 8) + SymbolLine(0 15 0 25 8) + SymbolLine(0 25 5 30 8) + SymbolLine(5 30 20 30 8) + SymbolLine(20 30 25 35 8) + SymbolLine(25 35 25 45 8) + SymbolLine(20 50 25 45 8) + SymbolLine(5 50 20 50 8) + SymbolLine(0 45 5 50 8) +) +Symbol('T' 12) +( + SymbolLine(0 10 20 10 8) + SymbolLine(10 10 10 50 8) +) +Symbol('U' 12) +( + SymbolLine(0 10 0 45 8) + SymbolLine(0 45 5 50 8) + SymbolLine(5 50 15 50 8) + SymbolLine(15 50 20 45 8) + SymbolLine(20 10 20 45 8) +) +Symbol('V' 12) +( + SymbolLine(0 10 0 40 8) + SymbolLine(0 40 10 50 8) + SymbolLine(10 50 20 40 8) + SymbolLine(20 10 20 40 8) +) +Symbol('W' 12) +( + SymbolLine(0 10 0 50 8) + SymbolLine(0 50 15 35 8) + SymbolLine(15 35 30 50 8) + SymbolLine(30 10 30 50 8) +) +Symbol('X' 12) +( + SymbolLine(0 10 0 15 8) + SymbolLine(0 15 25 40 8) + SymbolLine(25 40 25 50 8) + SymbolLine(0 40 0 50 8) + SymbolLine(0 40 25 15 8) + SymbolLine(25 10 25 15 8) +) +Symbol('Y' 12) +( + SymbolLine(0 10 0 15 8) + SymbolLine(0 15 10 25 8) + SymbolLine(10 25 20 15 8) + SymbolLine(20 10 20 15 8) + SymbolLine(10 25 10 50 8) +) +Symbol('Z' 12) +( + SymbolLine(0 10 25 10 8) + SymbolLine(25 10 25 15 8) + SymbolLine(0 40 25 15 8) + SymbolLine(0 40 0 50 8) + SymbolLine(0 50 25 50 8) +) +Symbol('[' 12) +( + SymbolLine(0 10 5 10 8) + SymbolLine(0 10 0 50 8) + SymbolLine(0 50 5 50 8) +) +Symbol('\' 12) +( + SymbolLine(0 15 30 45 8) +) +Symbol(']' 12) +( + SymbolLine(0 10 5 10 8) + SymbolLine(5 10 5 50 8) + SymbolLine(0 50 5 50 8) +) +Symbol('^' 12) +( + SymbolLine(0 15 5 10 8) + SymbolLine(5 10 10 15 8) +) +Symbol('_' 12) +( + SymbolLine(0 50 20 50 8) +) +Symbol('a' 12) +( + SymbolLine(15 30 20 35 8) + SymbolLine(5 30 15 30 8) + SymbolLine(0 35 5 30 8) + SymbolLine(0 35 0 45 8) + SymbolLine(0 45 5 50 8) + SymbolLine(20 30 20 45 8) + SymbolLine(20 45 25 50 8) + SymbolLine(5 50 15 50 8) + SymbolLine(15 50 20 45 8) +) +Symbol('b' 12) +( + SymbolLine(0 10 0 50 8) + SymbolLine(0 45 5 50 8) + SymbolLine(5 50 15 50 8) + SymbolLine(15 50 20 45 8) + SymbolLine(20 35 20 45 8) + SymbolLine(15 30 20 35 8) + SymbolLine(5 30 15 30 8) + SymbolLine(0 35 5 30 8) +) +Symbol('c' 12) +( + SymbolLine(5 30 20 30 8) + SymbolLine(0 35 5 30 8) + SymbolLine(0 35 0 45 8) + SymbolLine(0 45 5 50 8) + SymbolLine(5 50 20 50 8) +) +Symbol('d' 12) +( + SymbolLine(20 10 20 50 8) + SymbolLine(15 50 20 45 8) + SymbolLine(5 50 15 50 8) + SymbolLine(0 45 5 50 8) + SymbolLine(0 35 0 45 8) + SymbolLine(0 35 5 30 8) + SymbolLine(5 30 15 30 8) + SymbolLine(15 30 20 35 8) +) +Symbol('e' 12) +( + SymbolLine(5 50 20 50 8) + SymbolLine(0 45 5 50 8) + SymbolLine(0 35 0 45 8) + SymbolLine(0 35 5 30 8) + SymbolLine(5 30 15 30 8) + SymbolLine(15 30 20 35 8) + SymbolLine(0 40 20 40 8) + SymbolLine(20 40 20 35 8) +) +Symbol('f' 10) +( + SymbolLine(5 15 5 50 8) + SymbolLine(5 15 10 10 8) + SymbolLine(10 10 15 10 8) + SymbolLine(0 30 10 30 8) +) +Symbol('g' 12) +( + SymbolLine(15 30 20 35 8) + SymbolLine(5 30 15 30 8) + SymbolLine(0 35 5 30 8) + SymbolLine(0 35 0 45 8) + SymbolLine(0 45 5 50 8) + SymbolLine(5 50 15 50 8) + SymbolLine(15 50 20 45 8) + SymbolLine(0 60 5 65 8) + SymbolLine(5 65 15 65 8) + SymbolLine(15 65 20 60 8) + SymbolLine(20 30 20 60 8) +) +Symbol('h' 12) +( + SymbolLine(0 10 0 50 8) + SymbolLine(0 35 5 30 8) + SymbolLine(5 30 15 30 8) + SymbolLine(15 30 20 35 8) + SymbolLine(20 35 20 50 8) +) +Symbol('i' 10) +( + SymbolLine(0 20 0 25 8) + SymbolLine(0 35 0 50 8) +) +Symbol('j' 10) +( + SymbolLine(5 20 5 25 8) + SymbolLine(5 35 5 60 8) + SymbolLine(0 65 5 60 8) +) +Symbol('k' 12) +( + SymbolLine(0 10 0 50 8) + SymbolLine(0 35 15 50 8) + SymbolLine(0 35 10 25 8) +) +Symbol('l' 10) +( + SymbolLine(0 10 0 45 8) + SymbolLine(0 45 5 50 8) +) +Symbol('m' 12) +( + SymbolLine(5 35 5 50 8) + SymbolLine(5 35 10 30 8) + SymbolLine(10 30 15 30 8) + SymbolLine(15 30 20 35 8) + SymbolLine(20 35 20 50 8) + SymbolLine(20 35 25 30 8) + SymbolLine(25 30 30 30 8) + SymbolLine(30 30 35 35 8) + SymbolLine(35 35 35 50 8) + SymbolLine(0 30 5 35 8) +) +Symbol('n' 12) +( + SymbolLine(5 35 5 50 8) + SymbolLine(5 35 10 30 8) + SymbolLine(10 30 15 30 8) + SymbolLine(15 30 20 35 8) + SymbolLine(20 35 20 50 8) + SymbolLine(0 30 5 35 8) +) +Symbol('o' 12) +( + SymbolLine(0 35 0 45 8) + SymbolLine(0 35 5 30 8) + SymbolLine(5 30 15 30 8) + SymbolLine(15 30 20 35 8) + SymbolLine(20 35 20 45 8) + SymbolLine(15 50 20 45 8) + SymbolLine(5 50 15 50 8) + SymbolLine(0 45 5 50 8) +) +Symbol('p' 12) +( + SymbolLine(5 35 5 65 8) + SymbolLine(0 30 5 35 8) + SymbolLine(5 35 10 30 8) + SymbolLine(10 30 20 30 8) + SymbolLine(20 30 25 35 8) + SymbolLine(25 35 25 45 8) + SymbolLine(20 50 25 45 8) + SymbolLine(10 50 20 50 8) + SymbolLine(5 45 10 50 8) +) +Symbol('q' 12) +( + SymbolLine(20 35 20 65 8) + SymbolLine(15 30 20 35 8) + SymbolLine(5 30 15 30 8) + SymbolLine(0 35 5 30 8) + SymbolLine(0 35 0 45 8) + SymbolLine(0 45 5 50 8) + SymbolLine(5 50 15 50 8) + SymbolLine(15 50 20 45 8) +) +Symbol('r' 12) +( + SymbolLine(5 35 5 50 8) + SymbolLine(5 35 10 30 8) + SymbolLine(10 30 20 30 8) + SymbolLine(0 30 5 35 8) +) +Symbol('s' 12) +( + SymbolLine(5 50 20 50 8) + SymbolLine(20 50 25 45 8) + SymbolLine(20 40 25 45 8) + SymbolLine(5 40 20 40 8) + SymbolLine(0 35 5 40 8) + SymbolLine(0 35 5 30 8) + SymbolLine(5 30 20 30 8) + SymbolLine(20 30 25 35 8) + SymbolLine(0 45 5 50 8) +) +Symbol('t' 10) +( + SymbolLine(5 10 5 45 8) + SymbolLine(5 45 10 50 8) + SymbolLine(0 25 10 25 8) +) +Symbol('u' 12) +( + SymbolLine(0 30 0 45 8) + SymbolLine(0 45 5 50 8) + SymbolLine(5 50 15 50 8) + SymbolLine(15 50 20 45 8) + SymbolLine(20 30 20 45 8) +) +Symbol('v' 12) +( + SymbolLine(0 30 0 40 8) + SymbolLine(0 40 10 50 8) + SymbolLine(10 50 20 40 8) + SymbolLine(20 30 20 40 8) +) +Symbol('w' 12) +( + SymbolLine(0 30 0 45 8) + SymbolLine(0 45 5 50 8) + SymbolLine(5 50 10 50 8) + SymbolLine(10 50 15 45 8) + SymbolLine(15 30 15 45 8) + SymbolLine(15 45 20 50 8) + SymbolLine(20 50 25 50 8) + SymbolLine(25 50 30 45 8) + SymbolLine(30 30 30 45 8) +) +Symbol('x' 12) +( + SymbolLine(0 30 20 50 8) + SymbolLine(0 50 20 30 8) +) +Symbol('y' 12) +( + SymbolLine(0 30 0 45 8) + SymbolLine(0 45 5 50 8) + SymbolLine(20 30 20 60 8) + SymbolLine(15 65 20 60 8) + SymbolLine(5 65 15 65 8) + SymbolLine(0 60 5 65 8) + SymbolLine(5 50 15 50 8) + SymbolLine(15 50 20 45 8) +) +Symbol('z' 12) +( + SymbolLine(0 30 20 30 8) + SymbolLine(0 50 20 30 8) + SymbolLine(0 50 20 50 8) +) +Symbol('{' 12) +( + SymbolLine(5 15 10 10 8) + SymbolLine(5 15 5 25 8) + SymbolLine(0 30 5 25 8) + SymbolLine(0 30 5 35 8) + SymbolLine(5 35 5 45 8) + SymbolLine(5 45 10 50 8) +) +Symbol('|' 12) +( + SymbolLine(0 10 0 50 8) +) +Symbol('}' 12) +( + SymbolLine(0 10 5 15 8) + SymbolLine(5 15 5 25 8) + SymbolLine(5 25 10 30 8) + SymbolLine(5 35 10 30 8) + SymbolLine(5 35 5 45 8) + SymbolLine(0 50 5 45 8) +) +Symbol('~' 12) +( + SymbolLine(0 35 5 30 8) + SymbolLine(5 30 10 30 8) + SymbolLine(10 30 15 35 8) + SymbolLine(15 35 20 35 8) + SymbolLine(20 35 25 30 8) +) +Via[48000 28000 8000 4000 0 3000 "" ""] +Via[63000 86000 8000 4000 0 3000 "" ""] + +Element["" "DIP18" "U5" "16F84" 116500 28500 17000 5000 3 100 ""] +( + Pin[0 0 8000 3000 5600 2800 "1" "1" "square"] + Pin[0 10000 8000 3000 5600 2800 "2" "2" ""] + Pin[0 20000 8000 3000 5600 2800 "3" "3" ""] + Pin[0 30000 8000 3000 5600 2800 "4" "4" ""] + Pin[0 40000 8000 3000 5600 2800 "5" "5" ""] + Pin[0 50000 8000 3000 5600 2800 "6" "6" ""] + Pin[0 60000 8000 3000 5600 2800 "7" "7" ""] + Pin[0 70000 8000 3000 5600 2800 "8" "8" ""] + Pin[0 80000 8000 3000 5600 2800 "9" "9" ""] + Pin[30000 80000 8000 3000 5600 2800 "10" "10" ""] + Pin[30000 70000 8000 3000 5600 2800 "11" "11" ""] + Pin[30000 60000 8000 3000 5600 2800 "12" "12" ""] + Pin[30000 50000 8000 3000 5600 2800 "13" "13" ""] + Pin[30000 40000 8000 3000 5600 2800 "14" "14" ""] + Pin[30000 30000 8000 3000 5600 2800 "15" "15" ""] + Pin[30000 20000 8000 3000 5600 2800 "16" "16" ""] + Pin[30000 10000 8000 3000 5600 2800 "17" "17" ""] + Pin[30000 0 8000 3000 5600 2800 "18" "18" ""] + ElementLine [20000 -5000 35000 -5000 1000] + ElementLine [-5000 -5000 10000 -5000 1000] + ElementLine [35000 85000 35000 -5000 1000] + ElementLine [-5000 85000 35000 85000 1000] + ElementLine [-5000 -5000 -5000 85000 1000] + ElementArc [15000 -5000 5000 5000 0 180 1000] + + ) + +Element["" "TO220" "U6" "unknown" 179500 45000 23000 -15000 0 100 ""] +( + Pin[0 -10000 8000 3000 8600 5000 "1" "1" "square,edge2"] + Pin[0 0 8000 3000 8600 5000 "2" "2" "edge2"] + Pin[0 10000 8000 3000 8600 5000 "3" "3" "edge2"] + Pin[67000 0 17500 3000 15100 13000 "4" "4" "edge2"] + ElementLine [0 -10000 18000 -10000 3000] + ElementLine [0 0 18000 0 3000] + ElementLine [0 10000 18000 10000 3000] + ElementLine [18000 -20000 18000 20000 2000] + ElementLine [18000 20000 55500 20000 2000] + ElementLine [55500 -20000 55500 20000 2000] + ElementLine [18000 -20000 55500 -20000 2000] + ElementLine [55500 -20000 55500 20000 2000] + ElementLine [55500 20000 68000 20000 2000] + ElementLine [68000 18500 68000 20000 2000] + ElementLine [68000 18500 75000 18500 2000] + ElementLine [75000 18500 75000 20000 2000] + ElementLine [75000 20000 79000 20000 2000] + ElementLine [79000 -20000 79000 20000 2000] + ElementLine [75000 -20000 79000 -20000 2000] + ElementLine [75000 -20000 75000 -18500 2000] + ElementLine [68000 -18500 75000 -18500 2000] + ElementLine [68000 -20000 68000 -18500 2000] + ElementLine [55500 -20000 68000 -20000 2000] + + ) + +Element["" "RCY300" "C11" "unknown" 205500 94500 2500 10000 3 100 ""] +( + Pin[0 0 8000 3000 5600 5000 "1" "1" ""] + Pin[0 30000 8000 3000 5600 5000 "2" "2" "square"] + ElementArc [0 15000 30000 30000 270 360 1000] + + ) + +Element["" "ALF400" "Z5" "unknown" 129000 142500 -33800 900 0 100 ""] +( + Pin[0 0 8000 3000 4600 2000 "2" "2" "square,edge2"] + Pin[-40000 0 8000 3000 4600 2000 "1" "1" "edge2"] + ElementLine [-13300 0 0 0 1000] + ElementLine [-40000 0 -26700 0 1000] + ElementLine [-13300 0 -26700 6600 1000] + ElementLine [-26700 -6600 -26700 6600 1000] + ElementLine [-26700 -6600 -13300 0 1000] + ElementLine [-13300 -6600 -13300 6600 1000] + + ) + +Element["" "ACY400" "R21" "unknown" 82500 28000 -5300 32000 3 100 ""] +( + Pin[0 0 8000 3000 5100 3000 "1" "1" "square"] + Pin[0 40000 8000 3000 5100 3000 "2" "2" ""] + ElementLine [0 0 0 10000 1000] + ElementLine [0 30000 0 40000 1000] + ElementLine [3300 10000 3300 30000 1000] + ElementLine [-3300 30000 3300 30000 1000] + ElementLine [-3300 10000 -3300 30000 1000] + ElementLine [-3300 10000 3300 10000 1000] + + ) + +Element["" "AXIAL_LAY-200" "C13" "100n" 87000 110000 -6000 -11400 0 100 ""] +( + Pin[5000 0 8000 3000 8600 3000 "1" "1" "edge2"] + Pin[-15000 0 8000 3000 8600 3000 "2" "2" "edge2"] + ElementLine [0 -1600 0 1600 1000] + ElementLine [-10000 -1600 0 -1600 1000] + ElementLine [-10000 -1600 -10000 1600 1000] + ElementLine [-10000 1600 0 1600 1000] + ElementLine [-15000 0 -10000 0 1000] + ElementLine [0 0 5000 0 1000] + + ) +Layer(1 "component") +( +) +Layer(2 "solder") +( + Line[48000 28000 48000 30000 4000 4000 "clearline"] + Line[48000 30000 69000 51000 4000 4000 "clearline"] + Line[69000 51000 96000 51000 4000 4000 "clearline"] + Line[96000 51000 98000 53000 4000 4000 "clearline"] + Line[98000 53000 98000 60000 4000 4000 "clearline"] + Line[98000 60000 106000 68000 4000 4000 "clearline"] + Line[106000 68000 116000 68000 4000 4000 "clearline"] + Line[116000 68000 116500 68500 4000 4000 "clearline"] + Line[82500 68000 82500 99500 4000 4000 "clearline"] + Line[82500 99500 72000 110000 4000 4000 "clearline"] + Line[92000 110000 93000 110000 4000 4000 "clearline"] + Line[93000 110000 101000 102000 4000 4000 "clearline"] + Line[101000 102000 101000 81000 4000 4000 "clearline"] + Line[101000 81000 103000 79000 4000 4000 "clearline"] + Line[103000 79000 116000 79000 4000 4000 "clearline"] + Line[116000 79000 116500 78500 4000 4000 "clearline"] + Line[116500 48500 129500 48500 4000 4000 "clearline"] + Line[129500 48500 133000 52000 4000 4000 "clearline"] + Line[133000 52000 133000 64000 4000 4000 "clearline"] + Line[133000 64000 137000 68000 4000 4000 "clearline"] + Line[137000 68000 146000 68000 4000 4000 "clearline"] + Line[146000 68000 146500 68500 4000 4000 "clearline"] + Line[146500 88500 137500 88500 4000 4000 "clearline"] + Line[137500 88500 129000 97000 4000 4000 "clearline"] + Line[129000 97000 118000 97000 4000 4000 "clearline"] + Line[118000 97000 116500 98500 4000 4000 "clearline"] + Line[129000 142500 131500 142500 4000 4000 "clearline"] + Line[131500 142500 161000 113000 4000 4000 "clearline"] + Line[161000 113000 161000 63000 4000 4000 "clearline"] + Line[161000 63000 158000 60000 4000 4000 "clearline"] + Line[158000 60000 148000 60000 4000 4000 "clearline"] + Line[148000 60000 146500 58500 4000 4000 "clearline"] + Line[205500 94500 205500 44500 4000 4000 "clearline"] + Line[205500 44500 197000 36000 4000 4000 "clearline"] + Line[197000 36000 180500 36000 4000 4000 "clearline"] + Line[180500 36000 179500 35000 4000 4000 "clearline"] + Line[82500 28000 96500 14000 4000 4000 "clearline"] + Line[96500 14000 128000 14000 4000 4000 "clearline"] + Line[128000 14000 133000 19000 4000 4000 "clearline"] + Line[133000 19000 133000 35000 4000 4000 "clearline"] + Line[133000 35000 136500 38500 4000 4000 "clearline"] + Line[136500 38500 146500 38500 4000 4000 "clearline"] + Line[146500 28500 148000 27000 4000 4000 "clearline"] + Line[148000 27000 166000 27000 4000 4000 "clearline"] + Line[166000 27000 166000 42000 4000 4000 "clearline"] + Line[166000 42000 169000 45000 4000 4000 "clearline"] + Line[169000 45000 179500 45000 4000 4000 "clearline"] + Line[179500 55000 179500 98500 4000 4000 "clearline"] + Line[179500 98500 205500 124500 4000 4000 "clearline"] + Line[89000 142500 107500 124000 4000 4000 "clearline"] + Line[107500 124000 127000 124000 4000 4000 "clearline"] + Line[127000 124000 127000 110000 4000 4000 "clearline"] + Line[127000 110000 138500 98500 4000 4000 "clearline"] + Line[138500 98500 146500 98500 4000 4000 "clearline"] + Line[146500 78500 132500 78500 4000 4000 "clearline"] + Line[132500 78500 132000 78000 4000 4000 "clearline"] + Line[132000 78000 121500 88500 4000 4000 "clearline"] + Line[121500 88500 116500 88500 4000 4000 "clearline"] + Line[63000 86000 63000 72000 4000 4000 "clearline"] + Line[63000 72000 67000 68000 4000 4000 "clearline"] + Line[67000 68000 82500 68000 4000 4000 "clearline"] + Polygon("clearpoly") + ( + [257000 147000] [169000 147000] [169000 10000] [257000 10000] + ) +) +Layer(3 "GND") +( +) +Layer(4 "power") +( +) +Layer(5 "signal1") +( +) +Layer(6 "signal2") +( +) +Layer(7 "signal3") +( +) +Layer(8 "signal4") +( +) +Layer(9 "silk") +( +) +Layer(10 "silk") +( +) Index: trunk/doc-orig/gcode.pdf =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: trunk/doc-orig/gcode.pdf =================================================================== --- trunk/doc-orig/gcode.pdf (nonexistent) +++ trunk/doc-orig/gcode.pdf (revision 1037) Property changes on: trunk/doc-orig/gcode.pdf ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: trunk/doc-orig/gcode.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: trunk/doc-orig/gcode.png =================================================================== --- trunk/doc-orig/gcode.png (nonexistent) +++ trunk/doc-orig/gcode.png (revision 1037) Property changes on: trunk/doc-orig/gcode.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: trunk/doc-orig/gcode_control_img.eps =================================================================== --- trunk/doc-orig/gcode_control_img.eps (nonexistent) +++ trunk/doc-orig/gcode_control_img.eps (revision 1037) @@ -0,0 +1,711 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: GIMP PostScript file plugin V 1,17 by Peter Kirchgessner +%%Title: gcode_control_img.eps +%%CreationDate: Mon May 30 02:37:26 2011 +%%DocumentData: Clean7Bit +%%LanguageLevel: 2 +%%Pages: 1 +%%BoundingBox: 0 0 404 231 +%%EndComments +%%BeginProlog +% Use own dictionary to avoid conflicts +10 dict begin +%%EndProlog +%%Page: 1 1 +% Translate for offset +0 0 translate +% Translate to begin of first scanline +0 230.40000000000001 translate +403.20000000000005 -230.40000000000001 scale +% Image geometry +1680 960 1 +% Transformation matrix +[ 1680 0 0 960 0 0 ] +currentfile /ASCII85Decode filter /RunLengthDecode filter +%%BeginData: 51668 ASCII Bytes +image +JcDqRJcDqRJcDqRJcDqRJcDqRJcDqRJcDqRJcDqRJcDqRJcDqRJcDqRJcDqRJcDqRJcDqRJcDqR +JcDqRJcDqRJcDqRJcDqRJcDqRJcDqRJcDqRJcDqRJcDqRJcDqRJcDqRJcDqRJcDqRJcDqRJcDqR +JcDqRJcDqRJcDqRJcDqRJcDqRJcDqRJcDqRJcDqRJcDqRJcDqRJcDqRJcDqRJcDqRJcDqRJcDqR +JcDqRJcDqRJcDqRJcDqRJcDqRJcDqRJcDqRJcDqRJcDqRJcDqRJcDqRJcDqRJcDqRJcDqRJcDqR +nG`K=^]4@!KE(H@!._ib!'c,9nG`K=^]4@!KE(H@!._ib!'c,9nG`K=^]4@!KE(H@!._ib!'c,9 +nG`K=^]4@!KE(H@!._ib!'c,9nG`K=^]4@!KE(H@!._ib!'c,9nG`K=^]4@!jSo5LklA9onG`K= +^]4@!jSo4qkl:]J])V:"!._ib!'fQEkPtSn])V:"!._ib!'fTF!<20^!!g+8nG`K=^]4@!jo5>Y +kPtSb])V:"!._ib!'fTF!;PaX!!0\2nG`K=^]4@!jo5>Mk5`*nnG`K=^]4@!jo5>=k5YL3]DqC# +!._ib!'fTF!5Rat!'e*qnG`K=^]4@!jo5=2k5YK(]DqC#!._ib!'fTFjo>Al]DqC#!._ib!'fWG +!<2*\!!g.9nG`K=^]4@!k5PGZjo>A`]DqC#!._ib!'fWG!;P[V!!0_3nG`K=^]4@!k5PGNjT)pm +nG`K=^]4@!k5PG>jT#:1]`7L$!._ib!'fWG!5R[r!'e-rnG`K=^]4@!k5PF3jT#9&]`7L$!._ib +!'fWGj8]/j]`7L$!._ib!'fZH!<2$Z!!g1:nG`K=^]4@!kPkP[j8]/^]`7L$!._ib!'fZH!;PUT +!!0b4nG`K=^]4@!kPkPOirHalnG`K=^]4@!kPkP?irB(/^&RU%!._ib!'fZH!5RUp!'e0snG`K= +^]4@!kPkO4irB'$^&RU%!._ib!'fZHiW&rh^&RU%!._ib!'f]I!<1sX!!g4;nG`K=^]4@!kl1Y\ +iW&r\^&RU%!._ib!'f]I!;QKm!"\Dqr;Zfu^&RU%!._ib!'f]I!:]pe!$CP,!.b"J^&RU%!._ib +!'f]I!9!eU!'ffL!5SO5!.V`_nG`K=^]4@!kl1Xur;ZhIli-tCr;Zg^^Am^&!._ib!'f]I!.b"J +lMgkRr;Zg>^Am^&!._ib!'f]Ir;ZfulMgkZr;Zg.^Am^&!._ib!'f`J!<2os!!DNd!;ucq!!g7< +nG`K=^]4@!l2Lb]r;Zg&lMgk`r;Zg"^Am^&!._ib!'f`J!;QKm!"\>or;Zfu^Am^&!._ib!'f`J +!;QKm!$CJ*!.b"J^Am^&!._ib!'f`J!:]pe!'f`J!5SO5!.Vc`nG`K=^]4@!l2LbQr;ZhIl2LbA +r;Zg^^]3g'!._ib!'f`J!9!eUkl1YPr;Zg>^]3g'!._ib!'f`J!9!hV!!2<`!;QKm!"ZjEnG`K= +^]4@!l2LbArVup#kl1Y\r;Zg&^]3g'!._ib!'f`J!9!hV!!h`f!<2os!!C"9nG`K=^]4@!l2LbA +rVup/kPtJ\!!0k7nG`K=^]4@!l2LbArVup?kPkO4r;aV4nG`K=^]4@!l2LbArVup_kPkOtr;ZhI +_#Np(!._ib!'f`J!9!hV!.X23!9!eU!'e:!nG`K=^]4@!l2LbArW)*\!:]pe!$B#VnG`K=^]4@! +l2LbArW)*\!;QKm!"ZmFnG`K=^]4@!l2LbArW)*\!;ucq!!g=>nG`K=^]4@!l2LbArW)*\!<2os +!!C%:nG`K=^]4@!l2LbArW)'[r;Zfu_#Np(!._ib!'f`J!9!hVjo5=2r;aY5nG`K=^]4@!l2LbA +rW)'[!5SO5!.VibnG`K=^]4@!l2LbArW)'[!9!eU!'e="nG`K=^]4@!l2LbArW)'[!:]pe!$B&W +nG`K=^]4@!l2LbArW)'[!;QKm!"ZpGnG`K=^]4@!l2LbArW)'[!;ucq!!g@?nG`K=^]4@!l2LbA +rW)'[!<2os!!C(;nG`K=^]4@!l2LbArW)$Zr;Zfu_>j$)!._ib!'f`J!9!hVjSo41r;a\6nG`K= +^]4@!l2LbArW)$Z!5SO5!.VlcnG`K=^]4@!l2LbArW)$Z!9!eU!'e@#nG`K=^]4@!l2LbArW)$Z +!:]pe!$B)XnG`K=^]4@!l2LbArW)$Z!;QKm!"ZsHnG`K=^]4@!l2LbArW)$Z!;ucq!!gC@nG`K= +^]4@!l2LbArW)$Z!<2os!!C+^L+ +mf*9;r;Zg"i;`i!!!9%rrD!V!;c]q_#"-#s7u]q&+9GtJGfHJ"5s4Krr@Sc!!*?( +mf3=ir;QcTrW)fp!5SI3n,EBPmr;QcTrW)fp!5SI3n,EC_ +qZ$U,n,ECcqZ$VGiW&EI!._lc!>"tn!!%NIrrD!V!;c]q_#"-#rrDuo!!!PurrDuo!!%N-s7$$g +JAD3d&,>Pm!.XtI!9!hVqYpQ2qZ-*b!;u]o!"\Pu!;u]o!.Wu-nG`K=_#OKHq!J+^5Q1T^i;N`Q +rrBk3!:Tpfr;-Ho&+BMur;-HoJ)UFsrr@Sc!!*W*mJm5OrVllUrW)fp!5SI3n,ECcqZ$U,n,EC_ +qZ$U\iW&EI!._lc!>"tn!!#7^rrD!V!;c]q_#"-#rrDuo!!!PurrDik!!#7Bs7$$gJAD3d&,>Pm +!'gG^!9!hVqYpQ2qZ-*b!;u]o!"\Pu!;QEk!'fHBnG`K=_#OKHq!J+^+8u3>i;N`QrrBk3!:Tpf +r;-Ho&+BMuq"k$k5N2Y3rr@Sc!!*W*mJm5/rVllUrW)fp!5SI3n,ECcqZ$U,n,EC_qZ$U\iW&EI +!._lc!>"tn!!",>rrD!V!;c]q_#"-#rrDuo!!!PurrDik!!#7Bs7$$gJAD3d&,>Pm!$D1>!9!hV +qYpQ2qZ-*b!;u]o!"\Pu!;QEk!'fHBnG`K=_#OKHq!J+^+8u3>i;N`QrrBk3!:Tpfr;-Ho&+BMu +q"k$k5N2Y3rr@Sc!!*W*mJm5/rVllUrW)fp!5SI3n,ECcqZ$U,n,EC_qZ$U\iW&EI!._lc!>"tn +!!",>rrD!V!;c]q_#"-#rrDuo!!!PurrDuo!!%N-s7$$gJAD3d&,>Pm!$D1>!9!hVqYpQ2qZ-*b +!;u]o!"\Pu!;u]o!.Wu-nG`K=_#OKHq!J+^+8u3>i;N`QrrBk3!:Tpfr;-Ho&+BMur;-HoJ)UFs +rr@Sc!!*W*mJm5OrVllUrW)fp!5SI3n,ECcqZ$U,n,ECcqZ$VGiW&EI!.`8n!!2us!<2rt!>"u) +!!#7ZrrE&q!!#7^rrD!V!;c]q_#"-#rrDuo!!!PurrE&q!9!nHrr@Sn!!!,ts8E!!&,?,(!'g;Z +!<2iq!'gG^!9!hVqYpQ2qZ-*b!;u]o!"\Pu!<2iqi;`EquHZp!9!hVqYpQ2qZ-*b +!;u]o!"\Mt!.b"J!!D0ZnG`K=bQ%VbqZ$d%huE`fq#16n5PY6YJG]EFrrD!V!;c]q_#"-#rrDuo +!!!Ptrr@TJ!!!8^s7$$gJBRun+8Z$A"5j.Z&,?,(!'g8Y!5SO5!!3#t!9!hVqYpQ2qZ-*b!;u]o +!"\Mtqu?^-i;`!!NJ_!!!Q)rVup_mJd1ErW(%>!5SO5 +!.Wl*nG`K=f)Pf#pAb!i"U!Z_!"\l(!!#7NrrD!V!6G0?JGfK(s7$$gJCaeos8)d""5j.Z&,?,( +!'flN!9!hVaT)2=!!1pUnG`K=fDkmPp&Fmh"U!Z_!"\l(!!#7NrrD!V!6P6@rqufs"5X"Hrr@T% +!!39&r:'aj"5j.Z&,?,(!'flN!9!hVao;A=r;Zg&h>d!E!.`]%!XJbpnGi^phuE`fq#16n5OJIN +i;N_urrDim!!!Pcs7$$gJCji'&-'H8!!NJ_!!!Q)rVup_mJd1ErW((?!:]pe!$C%snG`K=fDksp +s+'V>"U!Z_!"\l(!!#7WrrMToqYpQRrW)]m!<@W"rrD!U!!#7>s7$$gJCji&5QC3Q"U!Z_!"\l( +!!#7Ws8N'!J,B6G_#=?/rrVZi#M&hS_#465J)1.orr@T%!!.TKn,NUohuE`fq#16n5PP0[qu?^= +qu6YHrW)`n!l+d:ec,W"r;bXQnG`K=fDksPr9s[i"5j.Z&,?,(!'g5X"7Q9j#Q+Q"!;QTn!!%N" +s8;ot!Sm_Err@TH!<<'!^u>=q!WVra!!NJ_!!!Q)rVup_p\t?2!!!&trrE&s!;ZWpr;HZr+4pMm +rqufs"5NqGrr@TI!!=>Cs8M!X!X&Jln,NUohuE`fq#16n5PP0XJGoQHrrDuq!;ZWpq#16n&(gg] +r;?Tq#Mf@Krr@TJ!!!-"rrDQK!!3E*i:$^M"5j.Z&,?,(!'g5Xr;ZhIrVllmr;cZn!:]sf!!h-U +!;QKm!"[lbnG`K=r;Zg.rVllqirB,ks1n+("U!Z_!"\l(!!#7YrrE&s!!#7^rrDQe!;ZWpi;N]V +"5!PQnGN=e+5Hncrr@TJ!!%NHs5O(\+9-l\!!NJ_!!!Q)rVup_q#:?lr;Zg>rVllUr;cZn!5SR6 +!!1^O!9!eU!'f9=nG`K=rVup!qu6ZSj8]3Fs6fpk"5j.Z&,?,(!'g8Y!;QKm!"]&.!5SR6!!2oq +!.b"JfDbidr;ZhIh#HmD!.b%K!!iE$!;PUT!It+;!!NJ_!!!Q)rVup_q#:?`r;Zg&rVlkJrVup! +q>^?m!.WZ$!.b"Jg]-dC!.b%K#9X!G^]FK8ro=%[s8;_s7l$_"U!Z_!"\l(!!#7YrrBk,!!!,t +rrDup!!"+orrE&s!!!,Us7$$gJGoQKrr@TK!<<'!^ubUu"97lZ!!NJ_!!!Q)rVup_q#:?0oDejr +qYpQnqu?^=g&D'Mr;Zg&g]-dC"b6RQ!WW)r!!48Bi8t"@#QN`N!!NJ_!!!Q)rVup_q#:>EoDek% +qYpQjqu?^-g&D'Ir;Zg.g]-dC"b6RQ#QN`\!!39&puVPX&-'H6!!NJ_!!!Q)rVup_q#:>EoDek5 +qYpQjqu?^-g&D'Ar;Zg>g]-dC"b6RQ&-%1X!!3,tjo>H)s+'P<"U!Z_!"\l(!!#7Ys763j5PkB[ +nGE7d#MK+Wi;EWU5MQ5-rrdiP!$D4;!!,=`jo>EHs6]jj"5j.Z&,?,(!'g8Yo)Jc?qYpQbqu?^% +g&D&fr;ZhIg]-dC"FpIPJ,K0D!?_@(!!.TKmJmCmhuE`fq#16n5PbUHooDejnq>UHQqu?^!gA_0Pr;Zg"gAg[B +"FpISs+'qG!WVZQ!!39&nEp8["5j.Z&,?,(!'g;Z!<2Tj!!i?"!9!bT!!CsT!;ucq!!h6XnG`T@ +!!iQ"!!.TEkPtYhs5<;F"U!Z_!"\l(!!#7ZrrDuh!!!Q*rrBk4!!!&RrrDim!!!P`s7$$jJ,g,X +q#CF;r9++^&-'H5!!NJ_!!!Q)rVup_q>UHmoDek5q>UH1qu?]tgA_0Br;Zg>gAg[B"+U@nq"Xmj +&,tbm![%GmmJmCmhuE`fq#16n5Pb;!<`Ac!!.TK +r;Zg"q#C3k"U!Z_!"\l(!!#7ZrrDuh!;QQo_#+04!S[PRJGfK$s7$$jJ,k)7q#CHss+'>6!WW)r +!!!9!s8)d""5j.Z&,?,(!'g;Z!;uKi!!2lp!5SL4!!1gRr;Zfug&LRA"+UCOJG9*Fs1mn"!Wi>r +r;Zg.q#C3k"U!Z_!"\l(!!#7ZrrDui!!!,rrrBk4!!!&SrrE&s!!!,Ss7$$iJ-#]E!!.T-l2Ukf +s7#se!$D"9qZ$d%huE`fq#16n5Pb"tj +!!,=ar;ZfunG`XL!!!Q)rVup_q>UHoo`+uAq#:?Pqu?^!g]%8hr;ZhIg&LRA!e:gNpAb4!r9=7_ +J,]BH!!D`j"Mb!;&,?,(!'g;Z!<2Wkp\t6Oqu?^!g]%8(r;bLMnG`Q?&)d0^!<`8b!!3,tr;Zm( +s5<_R!!iB#"FpIP&,?,(!'g8Yp&G'np\t6_qu?^%g].3P!!1aPnG`Q?+5lkn!<`>e!!33$q#(0o +&-'HA!!!,ts8E!!&,?,(!'g8Yp&G'pp\t6_qu?^%h#@BRr;Zg"f`1I@!e;B.pAb3prp'Oc"97lh +!!48BJG9*EJ,]HKrUBdd!>"u)!!#7Yrr@TD!!!8urrDil!!!PbrrDuq!!!8Vs7$$iJ3UjD!!*-# +lMptks5=Hr;ZkJrqHHs!WW&us8Mrs!C-AY!!#7YrrBk/!!#7XrrDup!!"+rrrDQe!!"+ns7$$h +J:I4l!IoXd!!48BJGfHKs8;Wl"UG(C!$D7>!!,=ZrVup_q#:?0pAjpe!;u`p!$C"r!9!eU!'f-9 +nG`N>J+WdBIt6kc!C-V_!!33$q"Ogl&,uV0#Q+N$q#16n5PY6Yi;EWU"7cBkrql`r5MZ8=_#465 +J(XejrrIZLo`,"W_!D%%J,]BH!X&Jlp](F=qu?]tqu6ZkrVup_q#:?`r;Zg&nGiCd!.Wf(!.b"J +fDk@?!J(1B!!,="li7(dr;?Ts#QN`W!!,=RrVuqJr;QcdrVup_q#:?hr;Zg.nG`K=r;bUPr;Zfu +fDk@?!J11A!!+2"m/R1is7lNm!Y>=Hp](=Zi;N]V5Q(N]i;N]V5PY6Yr;?Tq+7T:1_#=<6!Sm\T +rqufs"5!SBrrI]Ko`,"7i9^LG#QO;l!!48BJG9*FJ&)$`!$D.=!5SR6!'g8Y!<2os!'fuQ!9!hV +!!D$V!;ucq!!h-UnG`N?r:L$j+5lMd!XJb`r;Zj_s7ZKos+((K!"]#-!.b%K!'g5Xr;ZhInG`LX +rVup'h#@BLr;Zg.fDk@?!J1%=!!*Vgm/R1us1nR5!It+D!!*-#r;Zg&r;Z]q!'g5X!.b%Kn,EC_ +rVup/h#@BDr;Zg>fDk@?!JC1?!!*W"m/R20s+(%J!WW)m!!*-"r;Zg"rVllsr;Zg^p\t?2!!!&g +rrDur!!"+rrrD!U!!#78s7$$hKD>*>!>"\e!!+2Ar;Zm"s7l?h!<`8u!!!&urrDuq!!#7Xrr_`j +!!hrlrVuqJh#@Air;ZhIfDk@?!JBn7!!*>om/R/Orqufu"97lc!!*2squH]q!;QKm!'g5X"8i-! ++7B.1^]4Dirr@TJ!7q2>rrIcAo`,!tnEg2V5Q(H[!XJb`p](="nFHV[J+ipB!!%N:rrVZi#M]:W +!!!&Ns7$$hKCJO6!=/,]!!,=Zr;Zm0s1nC0!=/,c!!%NBrrMTom/I(dJ)(&(rqufs"4mMArrIo5 +o`,!pq!A%^J+3C:!?_@9!!*Vgo)Q9"!;ucq!!h*TnG`NEi:R'N"8M6`!Is&+!!,=`pAb4)i:?rX +rrDim!!!P\s7$$hLZ%h*!<`,a!!.Sbr;ZkJr:^0l&&@f;!!0S/!:]pe!$BelnG`NEi:R'N"8M6` +!WTt6!!3,ppAb4)_"7U,"1S:1i;EWU5M#l(rrIo5o`,!pq!A%^s+((K!Wi>jpAb49JFigA#Ij^5 +_#465J(FYhrrIo5o`,!pq!A%^s+((K!X&J\pAb49JFigA&%DQ=JGfJus7$$hLVWQ_!'^#OMHk +!.Wi)!<2os!!CdOnG`NM_"@[.!W;?c![KQr;Zg& +ec5.=!KY%h!!*,umJm7gs8;ou5Q:?V!'g&Tp&>-l!!",/rrTt9!T!bUq#(0m&(U^LrrJ1ro`,!n +r9aOc!WW)u!It%@!!#7U!!!&mrr_`j!!hrlrVuqJhZ!TFr;Zg>ec5.=!KY%h!!*,umJm7gs8;ou +s7l9f!'g)U!!Doo"2Fm:!Up$gr;HZr+5["ti;EWU5Lof'rrJ1ro`,!nr9aOc!WW-!!Wi>jp&G(W +oDejrp&>#BrW)Ee!;QNn!"[rd!5SO5!.WQ!nG`NM_"@[.!W;?c!#BquHQm!<2Tj!"\#f!.b"Je,Sq;!JfV+!!*2smJm7gs8E!!#Q45p!>!!>!!",6rr@TI +!;ZWpr:Bsh&)dKd!!!&Ks7$$hLZ%h*!<`,b!!*-#rVus(r:L$j&)d-]!'g/VqZ$VGqYpQjoDejr +iVroWr;Zg"e,Sq;!JB>'!!*2kmJm7gs8E!!#Q45p!=.QV!!%NAs8)crJ,90FnFQ\\#N>[_r;?Tq +#Li_BrrIcAo`,!tnEp8W!WW-!!=/Pq!!*>opAb0op&>$kqZ$U\qYpQRoDejniVroQr;Zg.e,Sq; +!JBn7!!*>omJm7gs8E!!#Q45p!<_ic!!!8srrE&q!!#7[rrBk,!!!,[rrDQe!!"+is7$$hKCJO6 +!=/,^!!*-#rVus(r:L$j"8Mcon,ECeqZ$U\qYpPGoDejniVro9r;Zg^e,Sq;!JC1?!!*W"mJm7g +s8E!!#Q45p!Ie<[A5Ci/%!$iqZ$U$VrqcZq5Q(N]q!nCb"8DfqpuqbY"4@/$kqZ$U\r;Qcdnc/Xlp\t6_kl:\gdJr_9!e:g>pAb3rr9XIb +!WW-!!=/Po!!!Q/rrBk4!!#7VrrE&q!!#7]rrD!J!!!,qrrD!A!!!PWs7$$iJ.LT4!!*3"m/R.f +s8E!!#Q4/n!"])/!5SL4!'g,UqZ$VGr;Qc4nc/Xpp\t6/kl:]*dJr_9!e:OFpAb4!q!A%^!WW-! +!=/Po!!",?rrD!T!!#7Us8)crJ,Kf!!*-#rVus(r:Bsi5N)M@!C-)P!!#7UrrDuq!!",=rrD!U!;c]q_#=<6!VcToJE[%65LBH" +rr[cO+7T(+!=/Vj!!*-#rVus(r:BsiJ&)$`!?_+8!!#7UrrE&s!!#7]rrD!V!!!&rrrD!V!!!,q +s6'F_J'e5brr[cO&,>r#!>#+p!!*-#rVus(r:Bsis+((K!>#,,!!#7Ts8;otJ,K:li7%es8E!! +#Q45p!<`,p!!*&t!!#7Trr`0!!$D+_#=<65O&1Ji;N`BrrDin!!!P@s7$$gJGoNM5Q?95!<<)a!!*-#rVus(r:L$j +++X7h!>",f!!#7JrrD!V!:0Xbq#16n+1hLArr@TK!!aVGn,NFns8M9`!_rVup_o)J^i!.XnG +!9!hVq#:Eb!!i8u!;QNn!'e'pnG`K=r;Zg.rVllqkl:_bs8E!!#Q45p!'g>\!=.Q^!!#7Trr`0! +!$D+\!=/,n!!#7T +rr_`j!!iE$!9!hVq#C\!=/,n +!!#7Ts8;otJ,K-!WW-!!=/Pq!!#7\!!*>orVup_ +o`"pjr;Zg^r;QcTrW)co!9!hV!!E#r!;QNn!'e'pnG`K=hZ*ZXs8E!!#Q45p!$D(UGFr;cWm!;QNn!'e'pnG`K=hZ*ZXs8E!!#Q45p!?Zji!!*VgrVup_o`"p\ +r;Zg&r;QcTrW)coqu?_Hq>UHirVup_])V:"!.`r,!UHirVup_])V:"!.`r,!UHirVup_])V:"!.`r,!UHirVup_])V:"!.`r,!!!D!!+1WrVup_o`"oAquHZp +!9!hVqYpQjqu?^-q>UHirVup_])V:"!.`r,!UHirVup_])V:"!.`r,!UHirVup_])V:"!.`r,!$VrqcZq5Q1T^i;N`Q +rrD!T!!!,srrDin!!#6ps7$$gJDU>-!WW-!!=/Pq!!*2squ?`sr;Zg^p&>$kqZ$U\rVllUrW)fp +!9!bT!!E&s!;QNn!'e'pnG`K=hZ*ZXs8E!!#Q45p!UHirVup_])V:"!.`r,!!9!hVqYpQ2 +qu?]tq>UHirVup_])V:"!.`r,!i;N`QrrBk4 +!!!&qrrDin!!#6ps7$$gJDU>-!WW-!!=/Pp!!.S"rVus0q#(0m5PtH\i:R'M+8u3>i;N`QrrBk4 +!!!&qrrDin!!#6ps7$$gJDU>-!WW-!!=/Pp!!,="rVus@nGN=e5PtH\_"@[-+8u3>i;N`QrrBk4 +!!!&qrrDin!!#6ps7$$gJDU>-!WW-!!=/Pp!!,=BrVus`i;EWU5PtH\JFrmB+8u3>i;N`QrrBk4 +!!!&qrrDin!!#6ps7$$gJDU>-!WW-!!=/Pp!!+22rVutK_#4655PtKQ!!",>rrD!V!;c]q_#+04 +!Vu`qq#16n5J$marr@T,!!*-#rVus(r:Bsi+7T70!Iqo`!!#7]rrE&j!!",>rrD!V!;c]q_#+04 +!Vu`qq#16n5J$marr@T,!!*-#rVus(r:Bsi+7T70!Iqo`!!#7]rrDuh!!",>rrD!V!;c]q_#+04 +!Vu`qq#16n5J$marr@T,!!*-#rVus(r:Bsi+7T70!Iqo`!!#7]rrDid!!",>rrD!V!;c]q_#+04 +!Vu`qq#16n5J$marr@T,!!*-#rVus(r:Bsi+7T70!Iqo`!!#7]rrDQ\!!#7^rrD!V!;c]qi;-!WW-!!=/Pp!!+22rVutK_#4655Q1T^q""L`rrD!V!;c]qq"t*l&,Q;+q#(0m +5J$marr@T,!!*-#rVus(r:Bsi+7T70!Iqo`!!#7^rrDQ\!!!&trrD!V!;c]qr;6Np+8Z!;nGN=e +J%G[Lrr@T,!!*-#rVus(r:Bsi+7T70!Iqo`!!#7^rrD!L!!!&trrD!V!;c]qr;6Np+8Z!;i;EWU +J%G[Lrr@T,!!*-#rVus(r:Bsi+7T70!Iqo`!!#7^rrBk,!!!-!rrD!V!;c]qrql`r5PkB[_#48D +s7$$gJDU>-!WW-!!=/Pp!!+22rVutK_#4655Q1T^JFigA#Q4T%i;N`Ps82isJ,90FJGfJYs7$$g +JDU>-!WW-!!=/Pp!!+22rVutK_#4655Q1WR!!!Q-rrD!V!;ZWpJGfKDs8;ot!P/7"rr@T,!!*-# +rVus(r:Bsi+7T70!Iqo`!!#7_rrE&i!!",=rrD!V!;ZWp_#=<6!W)frrqufs"1eI$rr@T,!!*-# +rVus(r:Bsi+7T70!Iqo`!!#7_rrDug!!#7]rrD!V!;ZWpi;N]V"8`#tr;?Tq#J'm(rr@T,!!*-# +rVus(r:Bsi+7T70!Iqo`!!#7_rrDic!!%NHrrD!V!;ZWpnGWCf#Q"H#q#(0m&%V`0rr@T,!!*-# +rVus(r:Bsi+7T70!Iqo`!!#7_rrDic!;lcri;N`PrrDin!!!Q+rrDQe!!"+Os7$$gJDU>-!WW-! +!=/Pp!!+22rVutK_#4655Q:Z_nFQ\\!W2lsi;N`PrrDur!!",;rrD!U!!#6os7$$gJDU>-!WW-! +!=/Pp!!+22rVutK_#4655Q:Z_nFQ\\#Q+N$i;N`Os8DuuJ,90F_#465J%>UKrr@T,!!*-#rVus( +r:Bsi+7T70!Iqo`!!#7_rrD!U!;lcuqu?^=qu6ZSrW)`n!l+d:q>UGFr;aA-nG`K=hZ*ZXs8E!! +#Q42o!?^h1!!.Sbr;Zg^rr2uVrVup!qZ$Qq!.XnG!9!hVq#:Eb!!i?"r;Zfu\Gu'u!.`r,!nG`K=hZ*ZXs8E!!#Q42o!?^h1!!.Sb +r;Zg^rr2uVrVup?nc&U)rW)Bd!:]pe!$A`NnG`K=hZ*ZXs8E!!#Q42o!?^h1!!.Sbr;Zg^rr2uV +rVup_nc&T>rW)Bd!9!eU!'e!nnG`K=hZ*ZXs8E!!#Q42o!?^h1!!.Sbr;Zg^rr2uVrVuqJnc/Of +mf*:&r;ZhIp\t9`#K6Z3rr@T,!!*-#rVus(r:Bsi+7T70!Iqo`!!#7_rrD!V!:g'hrquibrr@TJ +!;?Hm!!%Mfs7$$gJDU>-!WW-!!=/Pp!!+22rVutK_#4655Q:Z_i;N`HrrDuq!:Kmc!!!&orr`0! +!$B2[nG`K=hZ*ZXs8E!!#Q42o!?^h1!!.Sbr;Zg^rr2uVrW)co!Up?krrDim!;HKo!.XnG!<2os +!!Duq"7Q9j#K?`4rr@T,!!*-#rVus(r:Bsi+7T70!Iqo`!!#7_rrD!V!;ZZp!!%NHrrDQe!;QQq +n,N^jrrDuq!!!8urr^%:!!1(=nG`K=hZ*ZXs8E!!#Q42o!?^h1!!.Sbr;Zg^rr2uVrW)fp"8i-! ++8l-=i;EZNrrTt9!W2lsq#(0m&,6)(JGoPfs7$$gJDU>-!WW-!!=/Pp!!+22rVutK_#4655Q:Z_ +i;N`Qrr_`j!!iH%!5SR6!!2lprVuqJr;Qcdr;Zg>p](0l!.W#gnG`K=hZ*ZXs8E!!#Q42o!?^h1 +!!.Sbr;Zg^rr2uVrW)fp"2Fm:!W;rtJGoNK!Vu`qr;HZr+8l-=i;EWU5PY6Yrqufs5K<`mrr@T, +!!*-#rVus(r:Bsi+7T70!Iqo`!!#7_rrD!V!;c]qJGoQHs8;ot"8Vrsq#16n&,cG-_#465J,'$D +r;?Tq+3+?Mrr@T,!!*-#rVus(r:Bsi+7T70!Iqo`!!#7_rrD!V!;c`o!!%NJrrE&s!!!,srrDQf +!!!9%rr@TJ!;HKnq#(0m&'"Y=rr@T,!!*-#rVus(r:Bsi+7T70!Iqo`!!#7_rrD!V!;lcrrqufs +5Q:Z_r;?Tq#PnB"i;N]V"8r2t!!!&orrDQe!!!8Ds7$$gJDU>-!WW-!!=/Pp!!+22rVutK_#465 +5Q:Z_i;N`RrrDuq!!",?rrDim!!!Q*rrBk6!!!&urrE&s!!!,qrrD!U!!!,@s7$$gJDU>-!WW-! +!=/Pp!!+22rVutK_#4655Q:Z_i;N`RrrDid!!",:rr@TA!!!8urrBk+!!%Mqs7$$gJDU>-!WW-! +!=/Pp!!+22rVutK_#4655Q:Z_i;N`RrrDQ\!!#7Zs763j&,6)(_".O++41&Wrr@T,!!*-#rVus( +r:Bsi+7T70!Iqo`!!#7_rrD!V!;lcri:I!LJ,90Frpp*i+8>d8JF`a@#LNM?rr@T,!!*-#rVus( +r:Bsi+7T70!Iqo`!!#7_rrD!V!;lcr_"7X&rrDug!!#7Xrr@T@!!!,Js7$$gJDU>-!WW-!!=/Pp +!!+22rVutK_#4655Q:Z_i;N`RrrBk-!!!&qrrDug!!%NCs7--i!RUl9rr@T,!!*-#rVus(r:Bsi ++7T70!Iqo`!!#7_rrD!V!;lcrJFrmB"8Vrsq""LZs7$*9s7$$gJDU>-!WW-!!=/Pp!!+22rVutK +_#4655Q:Z_i;N`Rrr@TB!!!9"rrDid!!!&orrE&g!!%Mrs7$$gJDU>-!WW-!!=/Pp!!+22rVutK +_#4655Q:Z_i;N`Rs7?9k&,H5*nFQ\\"8Dfqrp]sg5LKN#rr@T,!!*-#rVus(r:Bsi+7T70!Iqo` +!!#7_rrD!V!;lfg!!",:rrDQ\!!!8urrE&g!!"+gs7$$gJDU>-!WW-!!=/Pp!!+22rVutK_#465 +5Q:Z_i;N`SrrE&j!!#7ZrrD!L!!!Q(rrE&g!!!PWs7$$gJDU>-!WW-!!=/Pp!!+22rVutK_#465 +5Q:Z_i;N`SrrE&j!!%NErrD!L!!",8rrDue!!!8Os7$$gJDU>-!WW-!!=/Pp!!+22rVutK_#465 +5Q:Z_i;N`SrrE&j!;QQoi:I!L5PP0Xr:'ae"4@/-!WW-!!=/Pp!!+22rVutK_#4655Q:Z_i;N`S +rrDuj!!!&orrBk-!!%NBrrE&f!!!&Js7$$gJDU>-!WW-!!=/Pp!!+22rVutK_#4655Q:Z_i;N`S +rrDuj!!!,qrrBk-!;6?lrpKj8s7$$gJDU>-!WW-!!=/Pp!!+22rVutK_#4655Q:Z_i;N`SrrE&l +!!!8urrD!N!!!&mrrE&e!!%Mts7$$gJDU>-!WW-!!=/Pp!!+22rVutK_#4655Q:Z_i;N`SrrE&l +!!!Q(rrD!N!!!,ns6fpf5L]Z%rr@T,!!*-#rVus(r:Bsi+7T70!Iqo`!!#7_rrD!V!;uisrq6d8i:[-N#PA&b!!"+is7$$gJDU>-!WW-!!=/Pp!!+22rVutK_#4655Q:Z_i;N`SrrE&l!!#7X +rrD!N!!!Q%rr@T=!!!PYs7$$gJDU>-!WW-!!=/Pp!!+22rVutK_#4655Q:Z_i;N`Rs7QEmJ+rsC +nFch^+8#R5JFEO=#Li_Brr@T,!!*-#rVus(r:Bsi+7T70!Iqo`!!#7_rrD!V!;lfj!!!&nrrDQ^ +!!%N@rrBk(!!!,Ms7$$gJDU>-!WW-!!=/Pp!!+22rVutK_#4655Q:Z_i;N`Rrr@TE!!!8trrDig +!!!&krrBk(!!!&Ks7$$gJDU>-!WW-!!=/Pp!!+22rVutK_#4655Q:Z_i;N`Rrr@TI!:g'hq"t*l +&+9Gti;EWU"8VrsJGfJss7$$gJDU>-!WW-!!=/Pp!!+22rVutK_#4655Q:Z_i;N`RrrBk5!!!&i +rrDup!!",/rrDQe!!!9"rrBk5!!%Mus7$$gJDU>-!WW-!!=/Pp!!+22rVutK_#4655Q:Z_i;N`R +rrBk5!!!&irrDup!!",/rrDim!!!Q*rrD!U!!#75s7$$gJDU>-!WW-!!=/Pp!!+22rVutK_#465 +5Q:Z_i;N`RrrD!U!!!,krrE&r!!#7OrrDuq!!",:rrDQe!!#75s7$$gJDU>-!WW-!!=/Pp!!+22 +rVutK_#4655Q:Z_i;N`RrrDQe!!!8ns82isJ+!=:rqufs5Pb[rr@T,!!*-#rVus( +r:Bsi+7T70!Iqo`!!#7_rrD!V!;lcrq#(0m&+KT!JGfK7s8;otJ,0*Er;?Tq+4U>[rr@T,!!*-# +rVus(r:Bsi+7T70!Iqo`!!#7_rrD!V!;lcrr;?Tq+7T:1_#=<6!UTgdJGoQDrrE&s!!!PZs7$$g +JDU>-!WW-!!=/Pp!!+22rVutK_#4655Q:Z_i;N`RrrE&s!!#7QrrD!V!!!,frr^%:!!2ior;Zg. +eGo%^Hp!.XG:!q60pli.(&!!!&orrDur!!!PZs7$$gJDU>-!WW-!!=/Pp!!+22rVutK_#4655Q:Z_ +i;N`PrrMTom/I(dJ*[+:^]4?8p\t6mrVup/eGo%-!WW-!!=/Pp!!+22rVutK_#4655Q:Z_i;N`!rr^%: +!!2io!<2rt!"[TZnG`K=hZ*ZXs8E!!#Q42o!?^h1!!.Sbr;Zg^rr2uVrW(+@"2Fm:!VcTorr)lt +&(LXKrr@T,!!*-#rVus(r:Bsi+7T70!Iqo`!!#7_rrD!V!6Y-!WW-!!=/Pp +!!+22rVutK_#4655Q:Z_i;N`!rr^%:!!2io!<2rt!"[TZnG`K=hZ*ZXs8E!!#Q42o!?^h1!!.Sb +r;Zg^rr2uVrW(+@"2Fm:!VcTorr)lt&(LXKrr@T,!!*-#rVus(r:Bsi+7T70!Iqo`!!#7_rrD!V +!;ZWqn-A=[!<@W8rr^%:!!2io!<2rt!"[TZnG`K=hZ*ZXs8E!!#Q42o!?^h1!!.Sbr;Zg^rr2uV +rW)corr<%Kmf*@X!!hii"2Fm:!VcTorr)lt&(LXKrr@T,!!*-#rVus(r:Bsi+7T70!Iqo`!!#7_ +rrD!V!;c]tqu?^=mf*@(!!2Ec"2Fm:!VcTorr)lt&(LXKrr@T,!!*-#rVus(r:Bsi+7T70!Iqo` +!!#7_rrD!V!;c]tn,NFnmf37d!.XA8"2Fm:!VcTorr)lt&(LXKrr@T,!!*-#rVus(r:Bsi+7T70 +!Iqo`!!#7_rrD!V!;c]t^]4?8n,ECcrVup?m/I1'!!!&orrE&t!!!PZs7$$gJDU>-!WW-!!=/Pp +!!+22rVutK_#4655Q:Z_i;N`Qrr@TK!:Tpfq#16n&+';u^]4?8p\t6mrVup/eGo%nG`L(rVup!m/I1'!!!&o +rrE&t!!!PZs7$$gJDU>-!WW-!!=/Pp!!+22rVutK_#4655Q:Z_i;N`RrrDim!!!Q+rrMU2q>UGF +r;c3a"2Fm:!VcTorr)lt&(LXKrr@T,!!*-#rVus(r:Bsi+7T70!Iqo`!!#7_rrD!V!;lcrnGN=e +#Q"H$^^']8qu?_HmJd:(!!!&orrE&t!!!PZs7$$gJDU>-!WW-!!=/Pp!!+22rVutK_#4655Q:Z_ +i;N`RrrD!U!!!,trrE*#qYpQpqu?^]mJd:(!!!&orrE&t!!!PZs7$$gJDU>-!WW-!!=/Pp!!+22 +rVutK_#4655Q:Z_i;N`RrrBk+!;c]qr;6Np+79(1^]4?8p\t6mrVup/eGo%- +!WW-!!=/Pp!!+22rVutK_#4655Q:Z_i;N`Rrr@T@!!#7\rrDil!!!Psrr^%:!!2io!<2rt!"[TZ +nG`K=hZ*ZXs8E!!#Q42o!?^h1!!.Sbr;Zg^rr2uVrW)iq!.aY@!$D+-0!!!&orrE&t!!!PZs7$$gJDU>-!WW-!!=/Pp!!+22rVutK_#4655Q:Z_i;N`SrrE&h!!!,u +rrD!L!!!,orr^%:!!2io!<2rt!"[TZnG`K=hZ*ZXs8E!!#Q42o!?^h1!!.Sbr;Zg^rr2uVrW)lr +!<2Nh!!2us!9!JL!!2cm"2Fm:!VcTorr)lt&(LXKrr@T,!!*-#rVus(r:Bsi+7T70!Iqo`!!#7_ +rrD!V!;uisrp^!crrD!K!;6?o^]4?8p\t6mrVup/eGo%-!WW-!!=/Pp!!+22 +rVutK_#4655Q:Z_i;N`SrrDue!!#7]rrBk+!!#7Wrr^%:!!2io!<2rt!"[TZnG`K=hZ*ZXs8E!! +#Q42o!?^h1!!.Sbr;Zg^rr2uVrW)lr!;u?e!$D.=!5S1+!$Cq7"2Fm:!VcTorr)lt&(LXKrr@T, +!!*-#rVus(r:Bsi+7T70!Iqo`!!#7_rrD!V!;uisr:'ae&,cG-_".O+&,-#*^]4?8p\t6mrVup/ +eGo%-!WW-!!=/Pp!!+22rVutK_#4655Q:Z_i;N`SrrDue!!!-!rrBk+!!!,p +rr^%:!!2io!<2rt!"[TZnG`K=hZ*ZXs8E!!#Q42o!?^h1!!.Sbr;Zg^rr2uVrW)lr!;u?e!!3#t +!5S1+!!2fn"2Fm:!VcTorr)lt&(LXKrr@T,!!*-#rVus(r:Bsi+7T70!Iqo`!!#7_rrD!V!;uis +r9s^arrBk*!;?Ep^]4?8p\t6mrVup/eGo%p\t?2!!!&orrE&t!!!PZs7$$gJDU>-!WW-!!=/Pp!!+22rVutK_#465 +5Q:Z_i;N`SrrDud!!#7^rrBk*!!#7Xrr^%:!!2io!<2rt!"[TZnG`K=hZ*ZXs8E!!#Q42o!?^h1 +!!.Sbr;Zg^rr2uVrW)lr!<2Hf!$D1>!9!DJ!$Ct8"2Fm:!VcTorr)lt&(LXKrr@T,!!*-#rVus( +r:Bsi+7T70!Iqo`!!#7_rrD!V!;uisrpTmf&,lM.i:6jJ&,6)+^]4?8p\t6mrVup/eGo%-!WW-!!=/Pp!!+22rVutK_#4655Q:Z_i;N`SrrE&f!!!-"rrD!J!!!,qrr^%:!!2io +!<2rt!"[TZnG`K=hZ*ZXs8E!!#Q42o!?^h1!!.Sbr;Zg^rr2uVrW)iqn,NFhrVllenc/Xlp\t?2 +!!!&orrE&t!!!PZs7$$gJDU>-!WW-!!=/Pp!!+22rVutK_#4655Q:Z_i;N`Rs6fsdrrDQZ!!!&o +rr^%:!!2io!<2rt!"[TZnG`K=hZ*ZXs8E!!#Q42o!?^h1!!.Sbr;Zg^rr2uVrW)iq!.aP=!.Y"J +!;Q*b!!2io"2Fm:!VcTorr)lt&(LXKrr@T,!!*-#rVus(r:Bsi+7T70!Iqo`!!#7_rrD!V!;lcr +JFEO=5Q:Z_q!e@Yrr^%:!!2io!<2rt!"[TZnG`K=hZ*ZXs8E!!#Q42o!?^h1!!.Sbr;Zg^rr2uV +rW)iq!5S((!$D4?!;u?ep\t?2!!!&orrE&t!!!PZs7$$gJDU>-!WW-!!=/Pp!!+22rVutK_#465 +5Q:Z_i;N`RrrBk(!!!Q/rrDue!;HKq^]4?8p\t6mrVup/eGo%^Bn!!3&u!.aV?p\t?2 +!!!&orrE&t!!!PZs7$$gJDU>-!WW-!!=/Pp!!+22rVutK_#4655Q:Z_i;N`RrrDuq!!",:rr@TJ +!<)ot_#=<6!W)frJGoQCrr^%:!!2io!<2rt!"[TZnG`K=hZ*ZXs8E!!#Q42o!?^h1!!.Sbr;Zg^ +rr2uVrW)iq!<2os!'g;Z!5SO5!.Y"J!9!hV!!E)t!5SR6p\t?2!!!&orrE&t!!!PZs7$$gJDU>- +!WW-!!=/Pp!!+22rVutK_#4655Q:Z_i;N`Qs8;otJ,0*Ei;EWU5Q:Z_nGWCf#Q"H#i;N`Nrr^%: +!!2io!<2rt!"[TZnG`K=hZ*ZXs8E!!#Q42o!?^h1!!.Sbr;Zg^rr2uVrW)fp!.b%Kq#:?`r;Zg> +rr2unrVup/qYpQRrW)]m"2Fm:!VcTorr)lt&(LXKrr@T,!!*-#rVus(r:Bsi+7T70!Iqo`!!#7_ +rrD!V!;c]t^]4?8q#:?hr;Zg.rr2urrVup?qYpQRrW)]m"2Fm:!VcTorr)lt&(LXKrr@T,!!*-# +rVus(r:Bsi+7T70!Iqo`!!#7_rrD!V!;c]tn,NFnq#:?lr;Zg&rVuis!.XkF!9!hVp\t?2!!!&o +rrE&t!!!PZs7$$gJDU>-!WW-!!=/Pp!!+22rVutK_#4655Q:Z_i;N`Qrr`0!!$D"9!<2os!!E3" +!l+d:q>UHQrW)]m"2Fm:!VcTor;HZr#LreCrr@T,!!*-#rVus(r:Bsi+7T70!Iqo`!!#7_rrD!V +!;ZZp!!%NCs8;ot!WE$"n,N^hrrD!V!;HKq^]4?8p\t6grVup#eGo%UKb#PS/tJGfKGrrE+Lq>UHQrW)]m"2Fm:!VcTonGWCf!S%/=rr@T, +!!*-#rVus(r:Bsi+7T70!Iqo`!!#7_rrD!V!:9^c_#465J+N[?i;N`Nrr^%:!!2io!9!eUeGo%< +!.`r,!-!WW-!!=/Pp!!+22rVutK_#4655Q:Z_i;N`Bs8;ot +!V?-!WW-!!=/Pp!!+22rVutK +_#4655Q:Z_i;N`Ps8N'!J+imB_#46:J,fQ- +!WW-!!=/Pp!!+22rVutK_#4655Q:Z_i;N`Qrr`0!!$Cq7!9!eU"[E%e^]4E2rrD!V!;HKq^]4?8 +q#:?hqu?^!ec5.=!.`r,!rr@T,!!*-#rVus(r:Bsi+7T70!Iqo`!!#7_rrD!V!;c`o!!%NCrrE&s!!39&nGWCf#Q"H# +i;N`Nrr^%:!!2lp!:]md!!1XMnG`K=hZ*ZXs8E!!#Q42o!?^h1!!.Sbr;Zg^rr2uVrW)iq!<2os +!'g2Wr;Zm"s5-!WW-!!=/Pp!!+22rVutK_#4655Q:Z_i;N`RrrDQe!!!8trrD!U!!#7]!!%NG +rrD!V!;HKq^]4?8q#:?PqZ,1HnG`K=hZ*ZXs8E!!#Q42o!?^h1!!.Sbr;Zg^rr2uVrW)iq!9!eU +!!Drp!:]pe!$;%-!WW-!!=/Pp!!+22rVutK_#4655Q:Z_i;N`Rrr@TE!!!,urrE&m!!!Q,rrD!V!;HKq^]4?8 +q#:?PqZ,1HnG`K=hZ*ZXs8E!!#Q42o!?^h1!!.Sbr;Zg^rr2uVrW)iq!.ahE!!2rrpAb1(qu6ZS +rW)]m"2Fm:!VlZpi;3N)s7$$gJDU>-!WW-!!=/Pp!!+22rVutK_#4655Q:Z_i;N`Rs7QHhrr@TE +!!!9$rrD!V!;HKq^]4?8q#:?`qu?]tec5.=!.`r,!-!WW-!!=/Pp!!+22rVutK +_#4655Q:Z_i;N`SrrE&l!!#7\rrD!P!!!,urrD!V!;HKq^]4?8q#:?`qu?]tec5.=!.`r,!rr@T,!!*-#rVus(r:Bsi+7T70!Iqo`!!#7_rrD!V!;uisrq6-!WW-!!=/Pp!!+22rVutK_#4655Q:Z_ +i;N`SrrDuj!!!,urrE&n!!!&srrD!V!;HKq^]4?8q#:?lqu?^%ec5.=!.`r,!- +!WW-!!=/Pp!!+22rVutK_#4655Q:Z_i;N`SrrDui!;c]qJGB0F!W2lsi;N`Nrr^%:!!2lp!<2lr +!"[W[nG`K=hZ*ZXs8E!!#Q42o!?^h1!!.Sbr;Zg^rr2uVrW)lr!;uKi!.XnG!5SC1!!2us!9!hV +p\t?2!!!&prrE&r!!!P[s7$$gJDU>-!WW-!!=/Pp!!+22rVutK_#4655Q:Z_i;N`SrrDui!!#7\ +rrD!Q!!!&srrD!V!;HKq^]4?8p](-k!$BbknG`K=hZ*ZXs8E!!#Q42o!?^h1!!.Sbr;Zg^rr2uV +rW)lr!;uKi!$D+-!WW-!!=/Pp!!+22 +rVutK_#4655Q:Z_i;N`SrrDui!!!Q,rrDii!!!&srrD!V!;HKq^]4?8p\t6/r;ZhIec5.=!.`r, +!-!WW-!!=/Pp!!+22rVutK_#4655Q:Z_i;N`SrrDui!!!,urrE&o!!!&srrD!V +!;HKq^]4?8p\t6_rVup!eGo%-!WW-!!=/Pp!!+22rVutK_#4655Q:Z_ +i;N`SrrE&j!;c]qJGK6G"8i)ui;N`Nrr^%:!!2io!;ufr!!h$RnG`K=hZ*ZXs8E!!#Q42o!?^h1 +!!.Sbr;Zg^rr2uVrW)lr!<2Tj!.XnG!5SF2!!E,u!9!hVp\t?2!!!&orrE&t!!!PZs7$$gJDU>- +!WW-!!=/Pp!!+22rVutK_#4655Q:Z_i;N`SrrE&j!!#7\rrD!R!!!,urrD!V!;HKq^]4?8pAY5F +!!#75s7$$gJDU>-!WW-!!=/Pp!!+22rVutK_#4655Q:Z_i;N`Rs7?9k+8c'rr@T,!!*-#rVus(r:Bsi+7T70!Iqo`!!#7_rrD!V!;lcr +JFrmB#Q+N$r;$Bn&,ZA,i;N`Nrr^%:!!2cm!J!D`s7$$gJDU>-!WW-!!=/Pp!!+22rVutK_#465 +5Q:Z_i;N`Rrr@TB!!!,urrE&p!!!Q,rrD!V!;HKq^]4?8`W,H-!.`r,!rr2unr;Zg.q>UH1rVup!qYpQRrW)]m"2Fm:!QG*.rr@T,!!+2"r;Zj_i:R'N+7T70!Iqo` +!!#7_rrD!V!;lcrrqufs5Q:Z_r;?Tq#PnB"i;N]V"8`#ti;N`Nrr^%:!!1(=nG`K=hZ*[A_#466 ++7Sq'!?^h1!!.Sbr;Zg^rr2uVrW)fpr;ZhIrr2utr;Zg"q>UHarVup'qYpQRrW)]m"2Fm:!QG*. +rr@T,!!,<7r;Zj/nFZb^+7T70!Iqo`!!#7_rrD!V!;c]qJGoQHs8;ot!Vu`qq#16n&,Q;+i;N`N +rr^%:!!1(=nG`K=hZ*Y+qu?a&q"4Uf+7T70!Iqo`!!#7_rrD!V!;c]t^]4?8r;QbIr;cZn!;ufr +!$D(;!9!hVp\t?2!!!&=s7$$gJDU>,J,B9I#Pdrl!?^h1!!.Sbr;Zg^rr2uVrW)fp"7Q9j#Q4T% +_#465J,0-D!!%NFrrD!V!;HKq^]4?8`W,H-!.`r,!<2lr!<`8m!!+22rVutK_#4655Q:Z_i;N`Q +rr`0!!$D.=!9!eU!'g;Z!l+d:q>UHQrW)]m"2Fm:!QG*.rr@T,!!*#r!!*3"o`,"7nGWCgJ&)!_ +!'gJ_!9!hVq>^Hp!.XqH!:]pe!$D%:!q60pq>UHQrW)]m"2Fm:!QG*.rr@T,!!)rp!!*,uo`,"7 +nGWCgJ&)!_!'gJ_!9!hVq>UKb#Q+N$q#(0m&,?/*!.XhE!9!hVp\t?2!!!&=s7$$gJDU>,r;6Nq +!W;Tj!?^h1!!.Sbr;Zg^rr2uVrW)Kg!;ucq!!hrl!9!hVp\t?2!!!&=s7$$gJD^D.!VlNl!<2Wk +!?^h1!!.Sbr;Zg^rr2uVrW)Kg!<2os!!DZh!9!hVp\t?2!!!&=s7$$gJD^D.!VlNl!<2Wk!?^h1 +!!.Sbr;Zg^rr2uVrW)Hfr;Zfumf*:FrW)]m"2Fm:!QG*.rr@T-!!*,qqZ$Wqo`,"7nGWCgJ&)!_ +!'gJ_!9!hVnG`K=r;c9c!9!hVp\t?2!!!&=s7$$gJD^D.!VlNl!<2Wk!?^h1!!.Sbr;Zg^rr2uV +rW)Hf!5SO5!.XJ;!9!hVp\t?2!!!&=s7$$gJD^D.!V#sd!.OS@!?^h1!!.Sbr;Zg^rr2uVrW)Hf +!9!eU!'frP!9!hVp\t?2!!!&=s7$$gJD^D."7Z0f!.OS@!?^h1!!.Sbr;Zg^rr2uVrW)Hf!:]pe +!$C\0!9!hVp\t?2!!!&=s7$$gJD^D."7Z0f!.XYA!?^h1!!.Sbr;Zg^rr2uVrW)co!Up?jrrDim +!!!Q*rrE+Lq>UHQrW)]m"2Fm:!QG*.rr@T-!!*2kqZ$VGo`,"7nGWCgJ&)!_!'gJ_!9!hVq>^Hp +!.XnG!;ucq!!iB#!q60pq>UHQrW)]m"2Fm:!QG*.rr@T-!!*2kqZ$VGo`,"7nGWCgJ&)!_!'gJ_ +!9!hVqYpZq!!",,r;6Nq!W;Tj!?^h1!!.Sbr;Zg^rr2uVrW)iq!9!eU!!E)tnc/YSqu6ZSrW)]m"2Fm: +!QG*.rr@T,!!)rp!!*,uo`,"7nGWCgJ&)!_!'gJ_!9!hVqu6Z3q#CC*rr2tKo)Jb4qu6ZSrW)]m +"2Fm:!QG*.rr@T,!!*#r!!*3"o`,"7nGWCgJ&)!_!'gJ_!9!hVqu6Z3q#CBsrr2u6o)Jb4qu6ZS +rW)]m"2Fm:!QG*.rr@T,!!%KG!!*2so`,"7nGWCgJ&)!_!'gJ_!9!hVqu6YHp]1,J,B9I#Pdrl!?^h1!!.Sbr;Zg^rr2uVrW)iq!.ahE"+U@NnFHV[ +&,ZA,i;N`Nrr^%:!!1(=nG`K=hZ*X@qu?a&nFZb^+7T70!Iqo`!!#7_rrD!V!;lfj!!>Ics7l0c +!!iE$!9!hVp\t?2!!!&=s7$$gJDU>-5Ci\4!>"\m!!,=RrVutK_#4655Q:Z_i;N`Rs7ZKq+92B= +o)Jaqqu6ZSrW)]m"2Fm:!QG*.rr@T,!!+1Wr;Zj?i:R'NJ+3F;!Iqo`!!#7_rrD!V!;uisrq?Bp +&-)\/o)Jamqu6ZSrW)]m"2Fm:!QG*.rr@T,!!+2"r;Zj__"@[.s7$!f!Iqo`!!#7_rrD!V!;uis +rq?Bm#QFbp!!!,urrD!V!;HKq^]4?8`W,H-!.`r,!>"\u!!.Sbp&G-ps7$!f!Iqo`!!#7_rrD!V +!;uisrq?Bm"9/<#JFigA"8i)ui;N`Nrr^%:!!1(=nG`K=hZ*Z^q#(0ns+'eC!X&JlrVutK_#465 +5Q:Z_i;N`SrrE&m!!!'!rrBk,!!!,urrD!V!;HKq^]4?8`W,H-!.`r,!<`9!!!*-#o`,$us5d`Z +^]4?Vr:L$j5QCZ^!Is&+!!#7_rrD!V!;uisr:U*m+92B=oDejlqu6ZSrW)]m"2Fm:!QG*.rr@T+ +!!RlA!!%NDo`,#BrquftJ)L8*!'gJ_!9!hVr;Qcpp&G1*s8W)j!!!&srrD!V!;HKq^]4?8`W,H- +!.`o+"X!XB!WV*N!!3,tr;ZkJ_#4655Q:Z_i;N`SrrDuj!!!9's7?9k!W2lsi;N`Nrr^%:!!1(= +nG`K=h>d]is1f`V_"Ia0!WVrn!!.Sbr;Zg^rr2uVrW)lr!;uNj!!E6#!.a_B!!2us!9!hVp\t6/ +rW'q;nG`K=h>dN\rVlkJp&G-rs7#se!Iqo`!!#7_rrD!V!;uisr:U*j!WN*!_"@[-!W2lsi;N`N +rrBk6!!%Mgs7$$gJDL8+!WN*!rq-6m#QN`\!!3,8r;Zg^rr2uVrW)lr!;uKirr2ufo`+smqu6ZS +rW)]m!5SR6!'eL'nG`K=h#RHS!;uKi!Y>=Hr;ZluJGfHJ5Q:Z_i;N`SrrE&k!!@`Ns8;Ni!!E,u +!9!hVp\t6/rVup?`rGQ.!.`l*"$chci:R'O+9-lj!!33$JGfHJ5Q:Z_i;N`SrrE&k!!#7YrrD!T +!!!,urrD!V!;HKn_#=<6&'"Y=rr@T*!!p!C-V_!!33$q"t*l5Q:Z_i;N`RrrD!U!!p!It+I!!39&q"t*l5Q:Z_i;N`RrrDQe!!Er;c]o!9!hV!.XbC +r;Zfua8bZ/!.`Aq!Wi>rr;Zm0s1nO4!'gJ_!9!hVqu6Zor;ZpAs8W)s!!!,rrrBk6!!!&rrrD!V +!!#7Xrr@TJ!6>-/rr@Sq!!39&nGN=g+9-lh!!#7_rrD!V!;lcrrqufs5Q:]]!!!&prrD!V!!!,t +rrD!V!!",8rrBk5!!%Mis7$$gJBn2s#QN`\!!,=aqZ$U\rr2uVrW)fpr;ZhIrr2tKr;cWm!:]sf +!!iB#!9!hV!"\i(!9!eU!'eR)nG`K=cN""Ws1nR5!It+G!!#7_rrD!V!;c]qJGoQIrrBk5!!%NE +rrDin!!!Q+rrD!V!!!8urrDQe!!"+^s7$$gJBn2s+9-li!!3,tqZ$U\rr2uVrW)fp"2Fm:!WE#u +i;EWU5PbrrDim!!!Q)rrTt9!Vu`qi;EZMrrE&s!!!,Bs7$$gJBn2rs8;fq!XJb`qZ$U\rr2uV +rW)corr<%KrVllqr;Zg&q#:Eb!!i?"!:]pe!.XbCr;ZfuaT(c0!.`Dr!Wi>rr;Zm0s1nL3!'gJ_ +!9!hVq>UKb#Q4T%rqufs"8Dfr!.XhE!:]pe!'g5X!.b"JaT(c0!.`Dr!X&Jlr;Zm@s+'tH!'gJ_ +!9!hVnc/Of!!2Ke!;QKm!$Ct8!5SO5!.W,jnG`K=ci=+Ps5^L[rr2uVrW)Kg!5SO5!.XG:!;ucq!!i8u +!:]pe!$B>_nG`K=ci=+hs+(%J!WW)o!!#7_rrD!V!:g'hi;EWU5OSOOrqufs"8Dfqq#(0m&'=k@ +rr@Sr!!,=ar;Zm"s7lEj!'gJ_!9!hVnc&UYr;Zg>mJm+b!!2io!;ucq!!gXGnG`K=ci=)rrqufu +"97le!!#7_rrD!V!:g'hq#(0m&+0AsJGfKBrrE&s!!!,Cs7$$gJC"8ss8;fq!XJb`q>^L[rr2uV +rW)Kg!;ucq!!hok!5SO5!.XbCr;ZfuaoCl1!.`Gs!Wi>rr;Zm0s1nI2!'gJ_!9!hVq>UKb#Q+N$ +rqufs"8Mls!.XeD!9!eU!'g5X!.b"JaoCl1!.`Gs!X&Jlr;Zm@s+'qG!'gJ_!9!hVq>^Hp!.XnG +r;Zfuq>UNc!!i=Hr;ZkJrqQNo5Q:Z_i;N`Qrr_`j +!!iE$!5SO5!.XkFrVuqJq>UHmr;Zg&p\t6_r;Zg>b5^u2!.`Gs![%Gmr;Zlur:pUHm +q>^L[qYpQbqZ$U\c2[;5!.`Jt![%Gmr;Zlur:g6l5Q:Z_i;N`RrrBk5!!!&srrD!U!!#7^rrDup +!!",:rrE&p!!!Q+rrDik!!!PSs7$$gJC4Du5QCZ^!Wi>rp](:Yrr2uVrW)iq!5SO5!!2us!:]pe +!$D1>!;u`p!$D"9q>^KtqYpQnqZ$Tuc2[;5!.`Jt!It+I!!39&nFut`5Q:Z_i;N`Rrr@TI!;lcr +q#(0m&,lM.q"t*l&,?/)JGT^9kc2[;5!.`Mu!Wi>rr;Zm0s1nC0!'gJ_!9!hVqu?Nn +!.XqH!<2os!!E3"!:]md!!i[!5SI3!'ed/nG`K=df9FSs5rr2uVqu?^!p]('i!!E)t!;u]o +!!COHnG`K=df9Durqufu"97lb!!#7_rrD!V!;uisr;-Ho+8c'^!!#7_rrD!V!;uisr;-Ho+8c'g?k!9!_ScN!D6!.`Q!!XJb@r;ZkJrq6pnG`K=e,TO\s+(%J!WW)k!!#7_rrD!V!;uis +r;-Ho+8Z!;i;EWX5QCc!qu?]tp\t6mq>^MFqYpQjqZ$VGciIcs1nO4!!2fnq>^MFqYpQnqZ$VGciCs1nO4!!2fn!.aqH!.XkF!;u]o!.W>pnG`K=e,TN!r;?Ts +#QN`U!!#7_rrD!V!;uisrqcZq5PkB[r;?Tt+92B!qu?^!pAY-.qZ$U\qYpQjqZ$U\ci[!;QEk!'eg0 +nG`K=eGoXOs7#se![%Gmp&G(Wrr2uVrW)lr!<2iq!'g;Zr;Zp1s8V$T!!!,prrDQc!!#7[rrDik +!!#70s7$$gJCOW$"97=Ho`+tVrr2uVrW)iq +!5SO5!!2lp!<2rt!tYG3r;6Np+85^7r;-HoJ,90Fr;-HoJ'\/arr@T#!!33$nGN=g+9-la!!#7_ +rrD!V!;lcri;EWU"8Mlrrr)m"&-)\/qu?^]pAY-jqZ$VGqYpQnqZ$VGcipnG`K= +ec5a^s+(%J!WW)i!!#7_rrD!V!;lcrr;?Tq+8Gj9rr)lt&,uS/_#=<6!VQHmrqc]krrE&q!7(W6 +rr@T#!!+2Ar;Zm"s7l3d!'gJ_!9!hVqu6Zqr;Zg^q#:?nrVup/rr2uVrVup#p&>$kqZ-Hl!<2iq +cN!D6!.`W#!C-S^!!39&nFQ\\5Q:Z_i;N`Qs8;otJ,'$Drr)lt&,uS/nGWCf#PA&o!!!&ps82is +!RC`7rr@T#!!.TIr;Zm(s5Er;Zg"cN!D6!.`Z$!Wi>jr;Zm@s+'_A!'gJ_!9!hV!.XnG"7Q9j#P\5urr)lt&,lP-!!%N@ +rr@TJ!!!,rrr@TJ!!!,Hs7$$gJCac&"97!'gJ_!9!hV!$D(;rr<%Kp\t6m +rVup/rVlrg!!i,q!9!eU!"\l)!9!eU!"[BTnG`K=f)Pj_s+(%J!WW)h!!#7_rrD!V!!!Q+rrMTo +pAY-lrVup/r;QctJ+N[?nGN=e+8Gj9nGN=e+3soUrr@T$!!+2Ar;Zm"s7#U[!'gJ_!9!hV!!hok +!<2rt!"\Gr!;QKm!'g8Y!;QKm!'ed/nG`K=f)Ph9rqufu"97<]r;Zluq!nCb5Q:Z_q#(0m&+9Gtrr)lt +&*s5srVurkrrW0"!6kK4rr@T%!!+2Ar;Zm"s7#RZ!'gJ_!;ucq!!hrl!<2rt!"\Ap!T4L\rrM$g +bl@24!.`]%!C-S^!!39&i:6jJ5Q:Z_rqufs"7H0hrr)lt&#B6prr@T%!!.TIr;Zm(s1n1*!'gG^ +r;Zfumf*:drVup/V#Tra!.`]%!WVrn!!3]2JFW[?5Q1T^JGfK9rrE&t!!!P*s7$$gJCso(!WVZf +!!+2AnGiPRrVll5r;ZhIn,ECerVup/V#Tra!.``&!X&J\r;Zj_rp]sg5Q1T^i;EWU5O\UPrr)lt +&#B6prr@T&!!3E*_#466J,Jg:!'gG^!:]pe!$C\0!<2rt!"Yn*nG`K=f`2'as+(%J!WVrb!!#7^ +rrDim!!!PurrE&t!!!P*s7$$gJCso'+929>!Wi>jnGiPRrVllqr;Zg&n,ECerVup/V#Tra!.``& +!C-S^!!39&i:-dI5Q1T^rqufs"7Q6irr)lt&#B6prr@T&!!.TIr;Zm(s1n.)!'gD]r;Zfun,ECe +rVup/V#Tra!.``&!WVrn!!3]2JFNU>5Q(N]JGfK:rrE&t!!!P*s7$$gJD'u)!WVZf!!+2An,NGQ +r;Qc4r;ZhInG`LfrVup/V#Tra!.`c'!X&J\r;Zj_rpTmf5Q(N]i;EWU5Oe[Qrr)lt&#B6prr@T' +!!3E*_#466J,Jd9!'gD]!:]pe!$C_1!<2rt!"Yn*nG`K=g&M0bs+(%J!WVra!!#7]rrDim!!!Q! +rrE&t!!!P*s7$$gJD'u(+929>!Wi>jn,NGQr;Qcpr;Zg&nG`LfrVup/V#Tra!.`c'!C-S^!!39& +i:$^H5Q(N]rqufs"7ZPqu6Z3r;ZhI +nc&UgrVup/V#Tra!.`f(!X&J\r;Zj_rpKge5PtH\i;EWU5OnaRrr)lt&#B6prr@T(!!3E*_#466 +J,Ja8!'gA\!:]pe!$Cb2!<2rt!"Yn*nG`K=gAh9cs+(%J!WVr`!!#7\rrDim!!!Q"rrE&t!!!P* +s7$$gJD1&)+929>!Wi>jmf3>Pqu6Zor;Zg&nc&UgrVup/V#Tra!.`f(!C-S^!!39&i9pXG5PtH\ +rqufs"7cBkrr)lt&#B6prr@T(!!.TIr;Zm(s1n('!'g>[r;Zfunc&UgrVup/V#Tra!.`f(!WVrn +!!3]2JF,+8u3>nGN=f+91a/!'g>[!5SO5!.XS>!<2rt +!"Yn*nG`K=hZ*X@rVllUr;Zj_rpBad5PkB[i;EWU5P"gSrr)lt&#B6prr@T,!!%NIrrBk5!!.TI +mJm5OqYpQbr;Zg>o)A^hrVup/V#Tra!.`r,r;QbIr;Zluq!J+^5PkB[q#(0m&+]`#rr)lt&#B6p +rr@T-!!!&ts8;p!!WVZW!!#7[rrDuq!!!8prrE&t!!!P*s7$$gJD^D-!WE#urqufu"97^Bn!!2Zj!<2rt!"Yn*nG`K=huEcY +nG*%c&-%1J!!#7Zrr@TJ!:p-irr)lt&#B6prr@T-!!*,iq#CF;s6Tdd5Pb^Qts7#CU!'g;Z!;ucq!!i,q!<2rt!"Yn*nG`K=huEcYnG3+d"97^O^O\rp0Ub5PY6Yi;EWU5P4sUrpToms7$$gJD^D.!V#pc!It%6!!#7YrrDQe!!",5rrE&f!!#6h +s7$$gJD^D.!V#pc!WVr]!!#7YrrDim!!!Q%rrE&f!!"+Hs7$$gJD^D.!V#sd!Wi>jli7#Mq#:?l +r;Zg&o`"pjn,NG!ZN'Fo!.`u-!$VrpKgeJ$]1Err@T-!!*,iqZ$X]r9F=_5PP0XnGN=e+8,X6rpKge5I:CZrr@T-!!*,iqZ$X] +q!.n[5PP0Xq#(0m&,#r&rpKge+1)":rr@T-!!*,iqZ$X]nEU&S5PP0Xr;?Tq#PJ)srpKge&$u<* +rr@T-!!*,iqZ$X]i9L@C5PP0Xrqufs"82ZorpKge#IFI"rr@T-!!*,iqZ$X]_!:t#5PG-U!!!&m +rrE&e!!!,-s7$$gJD^D.!V#sd!C),#!!#7Wrr@TJ!;6?lrpKge!OMgqrr@T-!!*2kqZ$U\l2UfK +pAY-.r;ZhIpAY-lmJsTnnG`K=huEc[nG<1c53`+J5PG*Wi;EWU5PG*WrpBadJ$f7Frr@T-!!*2k +qZ$U[l2UfKpAY-^r;Zg>p&FF[!'djjnG`K=huEc[nG<1c53`+J5PG*Wq#(0m&,#tj!!"+Js7$$g +JD^D."7Z0f!']ZJ!'g2W!;ucq!!i2s!.aM$V +JGfK@rrD!G!!!&,s7$$gJD^D."7Z0f!']ZJ!'g/V!5SO5!.X_B!:]CV[/]Xq!.`u-!<_ig!!#4J +!!#7VrrD!U!!#7WrrDi^!!%MVs7$$gJD^D."7Z0f!']ZJ!'g/V!:]pe!$Cq7!;u6b!'dmknG`K= +huEc[nG<1c53`+J5P>$Vq#(0m&,#tj!!"+Ks7$$gJD^D."7Z0f!']ZJ!'g/V!;ucq!!i2s!5S%' +!"ZL;nG`K=huEc[nG<1c53`+J5P>$Vrqufs"6][ar;?Tq#IXU$rr@T-!!*2kqZ$U[l2UfKo`+ji +!!29_!<2os!!BY/nG`K=huEc[nG<1c53`+J5P4sUJGfK1s8;ot!O_ssrr@T-!!*2kqZ$U[l2UfK +o`"p,r;ZhIkPkO4r;a8*nG`K=huEc[nG<1c53`+J5P4sUi;EWU5Ni%H_#465J%#CHrr@T-!!*2k +qZ$U[l2UfKo`"p\r;Zg>kPkP?r;Zg^[f>js!.`u-!<_ig!!#4J!!#7UrrDim!!!PmrrDQe!!"+L +s7$$gJD^D."7Z0f!']ZJ!'g,U!;ucq!!h]e!;QKm!"ZOkPkP?r;Zg^\,Yst +!.`u-!,"8i,_!!#7SrrD!U!!#7HrrBk5!!%MYs7$$gJA;-b5P"gSnGN=e ++6WY(i;EWU5Iga_rr@Sb!!#7SrrDim!!!PmrrDQe!!"+Ns7$$gJA;-b5P"gSr;?Tq#Nu*eq#(0m +&%MZ/rr@Sb!!#7SrrE&s!!!,arrDuq!!!86s7$$gJA;-b5OndP!!!&_rrE&s!!!,2s7$$gJA;-b +5OnaRJGfK1s8;ot!P&1!rr@Sb!!#7RrrBk5!!%N3rr@TJ!4`'urr@Sb!!#7RrrD!U!!#7HrrBk5 +!!%MZs7$$gJA;-b5OnaRnGN=e+6WY(i;EWU5Ipg`rr@Sb!!#7RrrDim!!!PmrrDQe!!"+Os7$$g +JA;-b5OnaRr;?Tq#Nu*eq#(0m&%V`0rr@Sb!!#7RrrE&s!!!,arrDuq!!!87s7$$gJA;-b5Oe^O +!!!&_rrE&s!!!,3s7$$gJA;-b5Oe[QJGfK1s8;ot!P/7"rr@Sb!!#7QrrBk5!!%N3rr@TJ!4i.! +rr@Sb!!#7QrrD!U!!#7HrrBk5!!%M[s7$$gJA;-b5Oe[QnGN=e+6WY(i;EWU5J$marr@Sb!!#7Q +rrDim!!!PmrrDQe!!"+Ps7$$gJA;-b5Oe[Qr;?Tq#Nu*eq#(0m&%_f1rr@Sb!!#7QrrE&s!!!,a +rrDuq!!!88s7$$gJA;-b5O\XN!!!&_rrE&s!!!,4s7$$gJA;-b5O\UPJGfK1s8;ot!P8=#rr@Sb +!!#7PrrBk5!!%N3rr@TJ!4r4"rr@Sb!!#7PrrD!U!!#7HrrBk5!!%M\s7$$gJA;-b5O\UPnGN=e ++6WY(i;EWU5J-sbrr@Sb!!#7PrrDim!!!PmrrDQe!!"+Qs7$$gJA;-b5O\UPr;?Tq#Nu*eq#(0m +&%hl2rr@Sb!!#7PrrE&s!!!,arrDuq!!!89s7$$gJA;-b5OSRM!!!&_rrE&s!!!,5s7$$gJA;-b +5OSOOJGfK1s8;ot!PAC$rr@Sb!!#7OrrBk5!!%N3rr@TJ!5&:#rr@Sb!!#7OrrD!U!!#7HrrBk5 +!!%M]s7$$gJA;-b5OSOOnGN=e+6WY(i;EWU5J7$crr@Sb!!#7OrrDim!!!PmrrDQe!!"+Rs7$$g +JA;-b5OSOOr;?Tq#Nu*eq#(0m&%qr3rr@Sb!!#7OrrE&s!!!,arrDuq!!!8:s7$$gJA;-b5OJLL +!!!&_rrE&s!!!,6s7$$gJA;-b5OJINJGfK1s8;ot!PJI%rr@Sb!!#7NrrBk5!!%N3rr@TJ!5/@$ +rr@Sb!!#7NrrD!U!!#7HrrBk5!!%M^s7$$gJA;-b5OJINnGN=e+6WY(i;EWU5J@*drr@Sb!!#7N +rrDim!!!PmrrDQe!!"+Ss7$$gJA;-b5OJINr;?Tq#Nu*eq#(0m&&rr@Sb!!#7NrrE&s!!!,a +rrDuq!!!8;s7$$gJA;-b5OAFK!!!&_rrE&s!!!,7s7$$gJA;-b5OACMJGfK1s8;ot!PSO&rr@Sb +!!#7MrrBk5!!%N3rr@TJ!58F%rr@Sb!!#7MrrD!U!!#7HrrBk5!!%M_s7$$gJA;-b5OACMnFln_ +#OVNki;EWU5JI0err@Sb!!#7MrrDig!!!8krrDQe!!*o=^]3g'!._ib!'fiM!;uQk!!hok!;QEk +!'e:!nG`K=^]4@!m/I(bpAb0umJd1aqZ$U,_#Np(!._ib!'ffLpAb0umJd1cqZ$Tu_#Np(!._ib +!'ffL!.ahE!!hljq>e>2nG`K=^]4@!li-t#p](:!m/I'9qZ$VG_>j$)!._ib!'ffL!9!VP!!hlj +!5SI3!'e="nG`K=^]4@!li-tSp](:!m/I(DqZ$U<_>j$)!._ib!'ffL!;Qj$)!._ib!'ffL!<2`n!!hlj!;u]o!!C(;nG`K=^]4@! +lMpVZ!!hlj!<2iq!!0q9nG`K=^]4@!lMgj7q#CC"li6e]_>j$)!._ib!'fcK!5SC1!!hii!.aqH +_>j$)!._ib!'fcK!9!YQ!!hii!5SI3!.VlcnG`K=^]4@!lMgkRq#CC"li-tCqZ$VG_Z0-*!._ib +!'fcK!;Q?i!!hii!:]jc!'e@#nG`K=^]4@!lMgk^q#CC"li-t[qZ$U\_Z0-*!._ib!'fcK!<2co +!!hii!;u]o!$B)XnG`K=^]4@!l2UPZ!!hii!<2iq!$B)XnG`K=^]4@!l2La6q>^L#lMp_]!$B)X +nG`K=^]4@!l2Lb!q>^L#lMp_]!$B)XnG`K=^]4@!l2LbAq>^L#li-taqZ$U,_Z0-*!._ib!'f`J +!:]gb!!hii!<2iq!"ZsHnG`K=^]4@!l2LbYq>^L#li-taqZ$U,_Z0-*!._ib!'f`J!;uZn!!hii +!<2iq!"ZsHnG`K=^]4@!l2Lb_q>^L#li-taqZ$U,_Z0-*!._ib!'f]Iq>^L#li-taqZ$U,_Z0-* +!._ib!'f]I!.aqH!!hii!<2iq!"ZsHnG`K=^]4@!kl1XuqZ$U$li-taqZ$U,_Z0-*!._ib!'f]I +!9!_S!!hii!<2iq!"ZsHnG`K=^]4@!kl1YPqZ$U$lMp_]!$B)XnG`K=^]4@!kl1YXqZ$U$lMp_] +!$B)XnG`K=^]4@!kl1Y\qZ$U$lMp_]!$B)XnG`K=^]4@!kl1Y^qZ$U$lMp_]!$B)XnG`K=^]4@! +kl1Y^qZ$U$lMgj7qu?^]_Z0-*!._ib!'f]I!<2iq!!hfh!.atI!'e@#nG`K=^]4@!kl1Y^qZ$U$ +lMgk"qu?_H_Z0-*!._ib!'f]I!<2iq!!hfh!5SL4!.VlcnG`K=^]4@!kl1Y^qZ$U$lMgkBquFS5 +nG`K=^]4@!kl1Y^qZ$U$lMgkBquFS5nG`K=^]4@!kl1Y^qZ$U$lMgkRr;Zfu_>j$)!._ib!'f]I +!<2iq!!hfh!;QKm!!C(;nG`K=^]4@!kl1Y^qZ$U$lMgk^r;Zg&_>j$)!._ib!'f]I!<2iq!!hfh +!<2os!"ZpGnG`K=^]4@!kl1Y^qZ$U$l2U\^!$B&WnG`K=^]4@!kl1Y^qZ$U$l2La6rVup__>j$) +!._ib!'f]I!<2iq!!hcg!5SR6!.VibnG`K=^]4@!kl1Y^qZ$U$l2LbArW'b6nG`K=^]4@!kl1Y^ +qZ$U$l2Lk\!!!,:s7$$gJA;-b5Nr+IrqcZq#O26jrVup/_#Np(!._ib!'f]I!<2iq!!h`f!e:88 +_#Np(!._ib!'f]I!<2iq!!h`f!Vcc3s7$$gJA;-b5D/ues0)HRs0)HRs0)HRs0)HRs0)HRs0)HR +s0)HRs0)HRs0)HRs0)HRs0)HRs0)HRs0)HRs0)HRs0)HRs0)HRs0)HRs0)HRs0)HRs0)HRs0)HR +s0)HRs0)HRs0)HRs0)HRs0)HRs0)HRs0)HRs0)HRs0)HRs0)HRs0)HRs0)HRs0)HRs0)HRs0)HR +s0)HRs0)HRs0)HRs0)HRs0)HRs0)HRs0)HRs0)HRs0)HRs0)HRs0)HRs0)HRs0)HRs0)HRs0)HR +s0)HRs0)HRs0)HRs0)HRs0)HRs0)HRs0)HRs0)HRs0)HRs0)HRs0)HRs0)HRs0)HRs0)HRs0)HR +s0)HRs0)HRs0)HRs0)HRs0)HRs0)HRs0)HRs0)HRs0)HRs0)HRs0)HQ~> +%%EndData +showpage +%%Trailer +end +%%EOF Index: trunk/doc-orig/gcode_control_img.pdf =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: trunk/doc-orig/gcode_control_img.pdf =================================================================== --- trunk/doc-orig/gcode_control_img.pdf (nonexistent) +++ trunk/doc-orig/gcode_control_img.pdf (revision 1037) Property changes on: trunk/doc-orig/gcode_control_img.pdf ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: trunk/doc-orig/gcode_control_img.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: trunk/doc-orig/gcode_control_img.png =================================================================== --- trunk/doc-orig/gcode_control_img.png (nonexistent) +++ trunk/doc-orig/gcode_control_img.png (revision 1037) Property changes on: trunk/doc-orig/gcode_control_img.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: trunk/doc-orig/gcode_tool_path.eps =================================================================== --- trunk/doc-orig/gcode_tool_path.eps (nonexistent) +++ trunk/doc-orig/gcode_tool_path.eps (revision 1037) @@ -0,0 +1,415 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: cairo 1.8.10 (http://cairographics.org) +%%CreationDate: Mon May 30 02:27:10 2011 +%%Pages: 1 +%%BoundingBox: 0 0 403 230 +%%DocumentData: Clean7Bit +%%LanguageLevel: 2 +%%EndComments +%%BeginProlog +/cairo_eps_state save def +/dict_count countdictstack def +/op_count count 1 sub def +userdict begin +/q { gsave } bind def +/Q { grestore } bind def +/cm { 6 array astore concat } bind def +/w { setlinewidth } bind def +/J { setlinecap } bind def +/j { setlinejoin } bind def +/M { setmiterlimit } bind def +/d { setdash } bind def +/m { moveto } bind def +/l { lineto } bind def +/c { curveto } bind def +/h { closepath } bind def +/re { exch dup neg 3 1 roll 5 3 roll moveto 0 rlineto + 0 exch rlineto 0 rlineto closepath } bind def +/S { stroke } bind def +/f { fill } bind def +/f* { eofill } bind def +/B { fill stroke } bind def +/B* { eofill stroke } bind def +/n { newpath } bind def +/W { clip } bind def +/W* { eoclip } bind def +/BT { } bind def +/ET { } bind def +/pdfmark where { pop globaldict /?pdfmark /exec load put } + { globaldict begin /?pdfmark /pop load def /pdfmark + /cleartomark load def end } ifelse +/BDC { mark 3 1 roll /BDC pdfmark } bind def +/EMC { mark /EMC pdfmark } bind def +/cairo_store_point { /cairo_point_y exch def /cairo_point_x exch def } def +/Tj { show currentpoint cairo_store_point } bind def +/TJ { + { + dup + type /stringtype eq + { show } { -0.001 mul 0 cairo_font_matrix dtransform rmoveto } ifelse + } forall + currentpoint cairo_store_point +} bind def +/cairo_selectfont { cairo_font_matrix aload pop pop pop 0 0 6 array astore + cairo_font exch selectfont cairo_point_x cairo_point_y moveto } bind def +/Tf { pop /cairo_font exch def /cairo_font_matrix where + { pop cairo_selectfont } if } bind def +/Td { matrix translate cairo_font_matrix matrix concatmatrix dup + /cairo_font_matrix exch def dup 4 get exch 5 get cairo_store_point + /cairo_font where { pop cairo_selectfont } if } bind def +/Tm { 2 copy 8 2 roll 6 array astore /cairo_font_matrix exch def + cairo_store_point /cairo_font where { pop cairo_selectfont } if } bind def +/g { setgray } bind def +/rg { setrgbcolor } bind def +/d1 { setcachedevice } bind def +%%EndProlog +%%Page: 1 1 +%%BeginPageSetup +%%PageBoundingBox: 0 0 403 230 +%%EndPageSetup +q +1 g +0 0 403 230 rectfill +1 0 0 rg +0.5 w +0 J +0 j +[] 0.0 d +10 M q 1 0 0 1 0 230 cm +0 -230.398 m 32.879 -14.398 l S Q +0 g +0.5 w +q 1 0 0 1 0 230 cm +32.879 -14.398 m 32.879 -211.922 l 159.84 -211.922 l 159.84 -70.559 l +150.238 -70.559 l 148.32 -71.762 l 148.32 -72.238 l 150.238 -73.441 l +152.16 -76.32 l 152.641 -79.441 l 152.16 -81.84 l 150.961 -84 l 150.238 +-84.48 l 150.238 -142.801 l 149.762 -144.238 l 149.039 -145.922 l +114.961 -179.281 l 114.961 -186.238 l 114 -186.961 l 100.559 -186.961 l +99.602 -186 l 99.602 -172.559 l 100.559 -171.359 l 107.52 -171.359 l +138.961 -139.441 l 138.961 -84.48 l 138 -83.281 l 137.281 -81.84 l +136.801 -79.199 l 137.281 -76.559 l 138.238 -74.641 l 139.922 -72.961 l +141.121 -72 l 139.922 -71.039 l 138.238 -69.359 l 137.281 -67.441 l +136.801 -64.801 l 137.281 -62.16 l 138.238 -60.238 l 140.398 -58.078 l +137.762 -58.078 l 137.52 -57.602 l 121.922 -57.602 l 112.801 -66.238 l +112.801 -130.801 l 113.52 -131.281 l 114.719 -133.441 l 115.199 +-136.078 l 114.719 -138.961 l 112.801 -141.84 l 110.641 -143.281 l +109.441 -143.762 l 106.801 -144 l 104.16 -143.52 l 101.52 -141.602 l +100.078 -139.441 l 99.602 -137.52 l 99.602 -134.641 l 100.078 -132.719 +l 101.52 -130.801 l 101.52 -63.84 l 102.48 -60.719 l 116.16 -47.281 l +118.078 -46.32 l 137.039 -46.078 l 137.039 -43.441 l 138.238 -42.48 l +151.441 -42.48 l 152.398 -43.68 l 152.398 -57.359 l 151.441 -58.078 l +149.281 -58.078 l 149.281 -58.559 l 149.762 -59.039 l 157.68 -59.039 l +158.398 -58.32 l 158.398 -38.641 l 159.359 -35.52 l 159.84 -35.281 l +159.84 -14.398 l 32.879 -14.398 l S Q +1 0 0 rg +0.5 w +q 1 0 0 1 0 230 cm +32.879 -14.398 m 46.078 -50.16 l S Q +0 g +0.5 w +q 1 0 0 1 0 230 cm +46.078 -50.16 m 43.441 -50.879 l 41.281 -51.84 l 38.16 -54 l 36 -56.641 +l 34.32 -60 l 33.602 -64.801 l 34.32 -69.602 l 36 -72.961 l 38.16 +-75.602 l 41.281 -77.762 l 43.441 -78.719 l 46.32 -79.441 l 50.16 +-79.441 l 53.039 -78.719 l 55.68 -77.52 l 58.559 -75.359 l 60.238 +-73.199 l 62.16 -69.602 l 62.879 -65.281 l 62.641 -62.641 l 62.16 -60 l +60.238 -56.398 l 58.559 -54.238 l 55.68 -52.078 l 53.039 -50.879 l +50.16 -50.16 l 46.078 -50.16 l S Q +1 0 0 rg +0.5 w +q 1 0 0 1 0 230 cm +46.078 -50.16 m 217.922 -16.801 l S Q +0 g +0.5 w +q 1 0 0 1 0 230 cm +217.922 -16.801 m 217.199 -17.281 l 208.801 -25.441 l 208.078 -26.879 l +208.078 -49.199 l 205.441 -52.078 l 197.281 -52.078 l 195.84 -50.398 l +193.922 -49.441 l 190.32 -49.441 l 188.398 -50.398 l 186.719 -52.32 l +186 -53.762 l 186 -57.359 l 186.719 -58.801 l 188.398 -60.719 l 190.32 +-61.68 l 193.922 -61.68 l 195.84 -60.719 l 197.281 -59.039 l 207.121 +-59.039 l 208.559 -58.32 l 214.559 -52.078 l 215.039 -51.121 l 215.039 +-28.801 l 219.84 -23.762 l 263.039 -23.762 l 277.922 -38.879 l 277.922 +-46.801 l 290.879 -46.801 l 290.879 -33.84 l 282.238 -33.84 l 266.16 +-17.52 l 264.719 -16.801 l 217.922 -16.801 l S Q +1 0 0 rg +0.5 w +q 1 0 0 1 0 230 cm +217.922 -16.801 m 332.879 -34.078 l S Q +0 g +0.5 w +q 1 0 0 1 0 230 cm +332.879 -34.078 m 331.68 -34.559 l 330.238 -35.281 l 328.559 -37.199 l +327.84 -38.641 l 327.84 -42 l 328.559 -43.922 l 302.641 -70.078 l +264.238 -70.078 l 263.281 -70.559 l 259.199 -74.398 l 258.48 -75.84 l +258.48 -85.441 l 249.121 -94.559 l 239.762 -94.559 l 239.039 -93.602 l +237.121 -92.641 l 233.52 -92.641 l 231.602 -93.602 l 229.922 -95.52 l +229.199 -96.961 l 229.199 -100.559 l 229.922 -102 l 231.602 -103.922 l +233.52 -104.879 l 237.121 -104.879 l 239.039 -103.922 l 241.199 -101.52 +l 251.039 -101.52 l 252 -101.039 l 264.719 -88.559 l 265.441 -87.121 l +265.441 -77.52 l 265.922 -77.039 l 304.32 -77.039 l 305.762 -76.32 l +335.039 -46.801 l 337.199 -45.84 l 339.121 -44.16 l 340.078 -42.238 l +340.078 -38.641 l 339.359 -37.199 l 337.68 -35.281 l 335.762 -34.32 l +332.879 -34.078 l S Q +1 0 0 rg +0.5 w +q 1 0 0 1 0 230 cm +332.879 -34.078 m 228.961 -34.559 l S Q +0 g +0.5 w +q 1 0 0 1 0 230 cm +228.961 -34.559 m 228.961 -47.52 l 241.922 -47.52 l 241.922 -34.559 l +228.961 -34.559 l S Q +1 0 0 rg +0.5 w +q 1 0 0 1 0 230 cm +228.961 -34.559 m 191.039 -34.801 l S Q +0 g +0.5 w +q 1 0 0 1 0 230 cm +191.039 -34.801 m 189.359 -35.52 l 163.199 -35.52 l 161.762 -36.719 l +160.559 -38.16 l 160.559 -59.52 l 158.398 -61.441 l 149.762 -61.441 l +148.32 -59.762 l 146.398 -58.801 l 142.801 -58.801 l 141.359 -59.52 l +139.441 -61.199 l 138.48 -63.121 l 138.48 -66.719 l 139.441 -68.641 l +141.359 -70.32 l 142.801 -71.039 l 146.398 -71.039 l 148.32 -70.078 l +149.762 -68.398 l 160.32 -68.398 l 161.281 -67.922 l 166.801 -62.641 l +167.52 -61.199 l 167.52 -42.48 l 186 -42.48 l 186.48 -44.16 l 188.398 +-46.32 l 190.32 -47.281 l 193.922 -47.281 l 195.84 -46.32 l 197.52 +-44.398 l 198.238 -42.961 l 198.238 -39.359 l 197.52 -37.922 l 195.84 +-36 l 193.922 -35.039 l 191.039 -34.801 l S Q +1 0 0 rg +0.5 w +q 1 0 0 1 0 230 cm +191.039 -34.801 m 138.238 -43.922 l S Q +0 g +0.5 w +q 1 0 0 1 0 230 cm +138.238 -43.922 m 138.238 -48.48 l 118.801 -48.48 l 117.84 -48.961 l +104.398 -62.16 l 103.68 -63.602 l 103.68 -131.039 l 102 -132.48 l +101.039 -134.398 l 101.039 -138 l 101.762 -139.441 l 103.441 -141.359 l +105.359 -142.32 l 108.961 -142.32 l 110.879 -141.359 l 112.559 -139.441 +l 113.281 -138 l 113.281 -134.398 l 112.32 -132.48 l 110.641 -131.039 l +110.641 -65.52 l 120.48 -55.441 l 138.238 -55.441 l 138.238 -56.879 l +151.199 -56.879 l 151.199 -43.922 l 138.238 -43.922 l S Q +1 0 0 rg +0.5 w +q 1 0 0 1 0 230 cm +138.238 -43.922 m 234.238 -49.199 l S Q +0 g +0.5 w +q 1 0 0 1 0 230 cm +234.238 -49.199 m 233.039 -49.68 l 231.602 -50.398 l 229.922 -52.32 l +229.199 -53.762 l 229.199 -57.359 l 230.16 -59.281 l 232.078 -60.961 l +233.52 -61.68 l 237.121 -61.68 l 239.039 -60.719 l 240.719 -58.801 l +241.441 -57.359 l 241.441 -53.762 l 240.719 -52.32 l 239.039 -50.398 l +237.121 -49.441 l 234.238 -49.199 l S Q +1 0 0 rg +0.5 w +q 1 0 0 1 0 230 cm +234.238 -49.199 m 191.039 -63.602 l S Q +0 g +0.5 w +q 1 0 0 1 0 230 cm +191.039 -63.602 m 189.84 -64.078 l 188.398 -64.801 l 186.719 -66.719 l +186 -68.16 l 186 -71.762 l 186.961 -73.68 l 188.879 -75.359 l 190.32 +-76.078 l 193.922 -76.078 l 195.84 -75.121 l 197.52 -73.199 l 198.238 +-71.762 l 198.238 -68.16 l 197.52 -66.719 l 195.84 -64.801 l 193.922 +-63.84 l 191.039 -63.602 l S Q +1 0 0 rg +0.5 w +q 1 0 0 1 0 230 cm +191.039 -63.602 m 234.238 -63.602 l S Q +0 g +0.5 w +q 1 0 0 1 0 230 cm +234.238 -63.602 m 233.039 -64.078 l 231.602 -64.801 l 230.16 -66.48 l +216 -66.48 l 215.039 -66.961 l 208.801 -72.961 l 208.078 -74.398 l +208.078 -90.961 l 204.719 -94.559 l 196.559 -94.559 l 195.84 -93.602 l +193.922 -92.641 l 190.32 -92.641 l 188.879 -93.359 l 186.961 -95.039 l +186 -96.961 l 186 -100.559 l 186.961 -102.48 l 188.879 -104.16 l 190.32 +-104.879 l 193.922 -104.879 l 195.84 -103.922 l 198 -101.52 l 206.398 +-101.52 l 207.84 -100.801 l 214.559 -93.84 l 215.039 -92.879 l 215.039 +-76.078 l 217.922 -73.441 l 230.16 -73.441 l 231.602 -75.121 l 233.52 +-76.078 l 237.121 -76.078 l 239.039 -75.121 l 240.719 -73.199 l 241.441 +-71.762 l 241.441 -68.16 l 240.719 -66.719 l 239.039 -64.801 l 237.121 +-63.84 l 234.238 -63.602 l S Q +1 0 0 rg +0.5 w +q 1 0 0 1 0 230 cm +234.238 -63.602 m 143.52 -72.961 l S Q +0 g +0.5 w +q 1 0 0 1 0 230 cm +143.52 -72.961 m 142.32 -73.441 l 140.879 -74.16 l 139.199 -76.078 l +138.48 -77.52 l 138.48 -81.121 l 139.441 -83.039 l 141.121 -84.48 l +141.121 -140.879 l 108.961 -172.801 l 100.801 -172.801 l 100.801 +-185.762 l 113.762 -185.762 l 113.762 -177.359 l 147.359 -144 l 148.078 +-142.559 l 148.078 -84.48 l 149.762 -83.039 l 150.719 -81.121 l 150.719 +-77.52 l 150 -76.078 l 148.32 -74.16 l 146.398 -73.199 l 143.52 -72.961 +l S Q +1 0 0 rg +0.5 w +q 1 0 0 1 0 230 cm +143.52 -72.961 m 191.039 -78 l S Q +0 g +0.5 w +q 1 0 0 1 0 230 cm +191.039 -78 m 189.84 -78.48 l 188.398 -79.199 l 186.48 -81.359 l 186 +-83.039 l 174.961 -83.039 l 174 -83.52 l 168.48 -88.801 l 167.762 +-90.238 l 167.762 -163.441 l 168.48 -164.879 l 210.961 -207.121 l +210.961 -211.68 l 223.922 -211.68 l 223.922 -198.719 l 211.68 -198.719 +l 174.719 -161.52 l 174.719 -92.16 l 176.641 -90 l 189.359 -90 l +191.281 -90.719 l 193.922 -90.48 l 195.84 -89.52 l 197.52 -87.602 l +198.238 -86.16 l 198.238 -82.559 l 197.52 -81.121 l 195.84 -79.199 l +193.922 -78.238 l 191.039 -78 l S Q +1 0 0 rg +0.5 w +q 1 0 0 1 0 230 cm +191.039 -78 m 234.238 -78 l S Q +0 g +0.5 w +q 1 0 0 1 0 230 cm +234.238 -78 m 233.039 -78.48 l 231.602 -79.199 l 229.922 -81.121 l +229.199 -82.559 l 229.199 -86.16 l 230.16 -88.078 l 232.078 -89.762 l +233.52 -90.48 l 237.121 -90.48 l 239.039 -89.52 l 240.719 -87.602 l +241.441 -86.16 l 241.441 -82.559 l 240.719 -81.121 l 239.039 -79.199 l +237.121 -78.238 l 234.238 -78 l S Q +1 0 0 rg +0.5 w +q 1 0 0 1 0 230 cm +234.238 -78 m 283.199 -91.68 l S Q +0 g +0.5 w +q 1 0 0 1 0 230 cm +283.199 -91.68 m 282 -92.16 l 280.559 -92.879 l 278.879 -94.801 l +278.16 -96.238 l 278.16 -99.84 l 279.121 -101.762 l 280.801 -103.199 l +280.801 -144 l 281.281 -144.961 l 293.039 -156.961 l 293.281 -160.32 l +294.238 -162.238 l 296.16 -163.922 l 297.602 -164.641 l 301.199 +-164.641 l 303.121 -163.68 l 304.801 -161.762 l 305.52 -160.32 l 305.52 +-156.719 l 304.801 -155.281 l 303.121 -153.359 l 301.199 -152.398 l +297.84 -152.16 l 287.762 -142.32 l 287.762 -103.199 l 289.68 -101.52 l +305.52 -101.52 l 308.879 -105.121 l 308.879 -118.801 l 307.199 -120.238 +l 306.238 -122.16 l 306.238 -125.762 l 306.961 -127.199 l 308.641 +-129.121 l 310.559 -130.078 l 314.16 -130.078 l 316.078 -129.121 l +317.762 -127.199 l 318.48 -125.762 l 318.48 -122.16 l 317.52 -120.238 l +315.84 -118.801 l 315.84 -103.199 l 315.121 -101.762 l 308.16 -95.039 l +307.199 -94.559 l 289.441 -94.559 l 288 -92.879 l 286.078 -91.922 l +283.199 -91.68 l S Q +1 0 0 rg +0.5 w +q 1 0 0 1 0 230 cm +283.199 -91.68 m 191.039 -106.801 l S Q +0 g +0.5 w +q 1 0 0 1 0 230 cm +191.039 -106.801 m 189.84 -107.281 l 188.398 -108 l 186.719 -109.922 l +186 -111.359 l 186 -114.961 l 186.961 -116.879 l 188.879 -118.559 l +190.32 -119.281 l 193.922 -119.281 l 195.84 -118.32 l 197.281 -116.641 +l 212.641 -116.641 l 226.078 -130.32 l 227.52 -131.039 l 230.16 +-131.039 l 231.602 -132.719 l 233.52 -133.68 l 237.121 -133.68 l +238.559 -132.961 l 240.48 -131.281 l 241.441 -129.359 l 241.441 +-125.762 l 240.48 -123.84 l 238.559 -122.16 l 237.121 -121.441 l 233.52 +-121.441 l 231.602 -122.398 l 230.16 -124.078 l 229.199 -124.078 l +215.039 -109.68 l 213.602 -108.961 l 212.16 -108.961 l 211.199 -109.68 +l 197.281 -109.68 l 195.84 -108 l 193.922 -107.039 l 191.039 -106.801 l S Q +1 0 0 rg +0.5 w +q 1 0 0 1 0 230 cm +191.039 -106.801 m 234.238 -106.801 l S Q +0 g +0.5 w +q 1 0 0 1 0 230 cm +234.238 -106.801 m 233.039 -107.281 l 231.602 -108 l 229.922 -109.922 l +229.199 -111.359 l 229.199 -114.961 l 230.16 -116.879 l 232.078 +-118.559 l 233.52 -119.281 l 237.121 -119.281 l 239.039 -118.32 l +239.762 -117.359 l 253.68 -117.359 l 254.16 -117.84 l 254.16 -147.602 l +254.641 -148.559 l 264.238 -158.398 l 264.48 -160.32 l 265.199 -161.762 +l 266.879 -163.68 l 268.801 -164.641 l 272.398 -164.641 l 274.32 +-163.68 l 276 -161.762 l 276.719 -160.32 l 276.719 -156.719 l 276 +-155.281 l 274.32 -153.359 l 272.398 -152.398 l 270.238 -152.16 l +268.078 -152.641 l 261.121 -145.922 l 261.121 -116.16 l 260.398 +-114.719 l 256.32 -110.879 l 255.359 -110.398 l 241.199 -110.398 l +239.039 -108 l 237.121 -107.039 l 234.238 -106.801 l S Q +1 0 0 rg +0.5 w +q 1 0 0 1 0 230 cm +234.238 -106.801 m 191.039 -121.199 l S Q +0 g +0.5 w +q 1 0 0 1 0 230 cm +191.039 -121.199 m 189.84 -121.68 l 188.398 -122.398 l 186.719 -124.32 +l 186 -125.762 l 186 -129.359 l 186.961 -131.281 l 188.879 -132.961 l +190.32 -133.68 l 193.922 -133.68 l 195.84 -132.719 l 197.281 -131.039 l +204 -131.039 l 215.281 -142.559 l 216.719 -143.281 l 229.199 -143.281 l +229.68 -144.961 l 231.602 -147.121 l 233.52 -148.078 l 237.121 -148.078 +l 238.559 -147.359 l 240.48 -145.68 l 241.441 -143.762 l 241.441 +-140.16 l 240.48 -138.238 l 238.559 -136.559 l 237.121 -135.84 l 234.48 +-135.602 l 232.559 -136.32 l 218.398 -136.32 l 207.121 -124.801 l +205.68 -124.078 l 197.281 -124.078 l 195.84 -122.398 l 193.922 -121.441 +l 191.039 -121.199 l S Q +1 0 0 rg +0.5 w +q 1 0 0 1 0 230 cm +191.039 -121.199 m 191.039 -135.602 l S Q +0 g +0.5 w +q 1 0 0 1 0 230 cm +191.039 -135.602 m 189.84 -136.078 l 188.398 -136.801 l 186.719 +-138.719 l 186 -140.16 l 186 -143.762 l 186.961 -145.68 l 188.879 +-147.359 l 190.32 -148.078 l 193.922 -148.078 l 195.84 -147.121 l +197.281 -145.441 l 202.32 -145.441 l 216.719 -159.602 l 216.719 -179.52 +l 217.922 -180.961 l 219.359 -182.16 l 247.199 -182.16 l 268.559 +-203.762 l 268.801 -207.121 l 269.52 -208.559 l 271.199 -210.48 l +273.121 -211.441 l 276.719 -211.441 l 278.641 -210.48 l 280.32 -208.559 +l 281.039 -207.121 l 281.039 -203.52 l 280.32 -202.078 l 278.641 +-200.16 l 276.719 -199.199 l 273.359 -198.961 l 249.84 -175.68 l +248.879 -175.199 l 223.68 -175.199 l 223.68 -157.922 l 223.199 -156.961 +l 205.68 -139.199 l 204.238 -138.48 l 197.281 -138.48 l 195.84 -136.801 +l 193.922 -135.84 l 191.039 -135.602 l S Q +1 0 0 rg +0.5 w +q 1 0 0 1 0 230 cm +191.039 -135.602 m 191.039 -150 l S Q +0 g +0.5 w +q 1 0 0 1 0 230 cm +191.039 -150 m 189.84 -150.48 l 188.398 -151.199 l 186.719 -153.121 l +186 -154.559 l 186 -158.16 l 186.961 -160.078 l 188.879 -161.762 l +190.32 -162.48 l 193.922 -162.48 l 195.84 -161.52 l 197.52 -159.602 l +198.238 -158.16 l 198.238 -154.559 l 197.52 -153.121 l 195.84 -151.199 +l 193.922 -150.238 l 191.039 -150 l S Q +1 0 0 rg +0.5 w +q 1 0 0 1 0 230 cm +191.039 -150 m 234.238 -150 l S Q +0 g +0.5 w +q 1 0 0 1 0 230 cm +234.238 -150 m 233.039 -150.48 l 231.602 -151.199 l 229.922 -153.121 l +229.199 -154.559 l 229.199 -158.16 l 230.16 -160.078 l 232.078 -161.762 +l 233.52 -162.48 l 237.121 -162.48 l 239.039 -161.52 l 240.719 -159.602 +l 241.441 -158.16 l 241.441 -154.559 l 240.719 -153.121 l 239.039 +-151.199 l 237.121 -150.238 l 234.238 -150 l S Q +1 0 0 rg +0.5 w +q 1 0 0 1 0 230 cm +234.238 -150 m 46.559 -51.84 l S Q +0 g +0.5 w +q 1 0 0 1 0 230 cm +46.559 -51.84 m 44.641 -52.32 l 42.238 -53.281 l 39.602 -54.961 l +37.441 -57.359 l 36 -60 l 35.281 -62.398 l 35.281 -67.441 l 36 -69.84 l +37.441 -72.48 l 39.602 -74.879 l 42.238 -76.559 l 45.359 -77.762 l +50.879 -77.762 l 54 -76.559 l 56.641 -74.879 l 58.801 -72.48 l 60.238 +-69.84 l 60.961 -67.441 l 60.961 -62.398 l 60.238 -60 l 58.801 -57.359 +l 56.641 -54.961 l 54 -53.281 l 50.879 -52.078 l 46.559 -51.84 l S Q +1 0 0 rg +0.5 w +q 1 0 0 1 0 230 cm +46.559 -51.84 m S Q +Q +showpage +%%Trailer +count op_count sub {pop} repeat +countdictstack dict_count sub {end} repeat +cairo_eps_state restore +%%EOF Index: trunk/doc-orig/gcode_tool_path.pdf =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: trunk/doc-orig/gcode_tool_path.pdf =================================================================== --- trunk/doc-orig/gcode_tool_path.pdf (nonexistent) +++ trunk/doc-orig/gcode_tool_path.pdf (revision 1037) Property changes on: trunk/doc-orig/gcode_tool_path.pdf ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: trunk/doc-orig/gcode_tool_path.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: trunk/doc-orig/gcode_tool_path.png =================================================================== --- trunk/doc-orig/gcode_tool_path.png (nonexistent) +++ trunk/doc-orig/gcode_tool_path.png (revision 1037) Property changes on: trunk/doc-orig/gcode_tool_path.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: trunk/doc-orig/letter_size.tab =================================================================== --- trunk/doc-orig/letter_size.tab (nonexistent) +++ trunk/doc-orig/letter_size.tab (revision 1037) @@ -0,0 +1,30 @@ +# $Id$ +# + +A .2340 +B .2380 +C .2420 +D .2460 +E .2500 +F .2570 +G .2610 +H .2660 +I .2720 +J .2770 +K .2810 +L .2900 +M .2950 +N .3020 +O .3160 +P .3230 +Q .3320 +R .3390 +S .3480 +T .3580 +U .3680 +V .3770 +W .3860 +X .3970 +Y .4040 +Z .4130 + Index: trunk/doc-orig/letter_size.texi =================================================================== --- trunk/doc-orig/letter_size.texi (nonexistent) +++ trunk/doc-orig/letter_size.texi (revision 1037) @@ -0,0 +1,16 @@ +@c Generated file. Do not edit directly +@c $Id$ +@multitable @columnfractions 0.167 0.167 0.167 0.167 0.167 0.167 +@item Drill @tab Diameter @tab Drill @tab Diameter @tab Drill @tab Diameter +@item Size @tab (inches) @tab Size @tab (inches) @tab Size @tab (inches) + +@item A @tab .2340 @tab B @tab .2380 @tab C @tab .2420 +@item D @tab .2460 @tab E @tab .2500 @tab F @tab .2570 +@item G @tab .2610 @tab H @tab .2660 @tab I @tab .2720 +@item J @tab .2770 @tab K @tab .2810 @tab L @tab .2900 +@item M @tab .2950 @tab N @tab .3020 @tab O @tab .3160 +@item P @tab .3230 @tab Q @tab .3320 @tab R @tab .3390 +@item S @tab .3480 @tab T @tab .3580 @tab U @tab .3680 +@item V @tab .3770 @tab W @tab .3860 @tab X @tab .3970 +@item Y @tab .4040 @tab Z @tab .4130 @tab @tab @end multitable + Index: trunk/doc-orig/mdate-sh =================================================================== --- trunk/doc-orig/mdate-sh (nonexistent) +++ trunk/doc-orig/mdate-sh (revision 1037) @@ -0,0 +1,193 @@ +#!/bin/sh +# Get modification time of a file or directory and pretty-print it. + +scriptversion=2005-02-07.09 + +# Copyright (C) 1995, 1996, 1997, 2003, 2004, 2005 Free Software +# Foundation, Inc. +# written by Ulrich Drepper , June 1995 +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# This file is maintained in Automake, please report +# bugs to or send patches to +# . + +case $1 in + '') + echo "$0: No file. Try \`$0 --help' for more information." 1>&2 + exit 1; + ;; + -h | --h*) + cat <<\EOF +Usage: mdate-sh [--help] [--version] FILE + +Pretty-print the modification time of FILE. + +Report bugs to . +EOF + exit $? + ;; + -v | --v*) + echo "mdate-sh $scriptversion" + exit $? + ;; +esac + +# Prevent date giving response in another language. +LANG=C +export LANG +LC_ALL=C +export LC_ALL +LC_TIME=C +export LC_TIME + +save_arg1="$1" + +# Find out how to get the extended ls output of a file or directory. +if ls -L /dev/null 1>/dev/null 2>&1; then + ls_command='ls -L -l -d' +else + ls_command='ls -l -d' +fi + +# A `ls -l' line looks as follows on OS/2. +# drwxrwx--- 0 Aug 11 2001 foo +# This differs from Unix, which adds ownership information. +# drwxrwx--- 2 root root 4096 Aug 11 2001 foo +# +# To find the date, we split the line on spaces and iterate on words +# until we find a month. This cannot work with files whose owner is a +# user named `Jan', or `Feb', etc. However, it's unlikely that `/' +# will be owned by a user whose name is a month. So we first look at +# the extended ls output of the root directory to decide how many +# words should be skipped to get the date. + +# On HPUX /bin/sh, "set" interprets "-rw-r--r--" as options, so the "x" below. +set x`ls -l -d /` + +# Find which argument is the month. +month= +command= +until test $month +do + shift + # Add another shift to the command. + command="$command shift;" + case $1 in + Jan) month=January; nummonth=1;; + Feb) month=February; nummonth=2;; + Mar) month=March; nummonth=3;; + Apr) month=April; nummonth=4;; + May) month=May; nummonth=5;; + Jun) month=June; nummonth=6;; + Jul) month=July; nummonth=7;; + Aug) month=August; nummonth=8;; + Sep) month=September; nummonth=9;; + Oct) month=October; nummonth=10;; + Nov) month=November; nummonth=11;; + Dec) month=December; nummonth=12;; + esac +done + +# Get the extended ls output of the file or directory. +set dummy x`eval "$ls_command \"\$save_arg1\""` + +# Remove all preceding arguments +eval $command + +# Because of the dummy argument above, month is in $2. +# +# On a POSIX system, we should have +# +# $# = 5 +# $1 = file size +# $2 = month +# $3 = day +# $4 = year or time +# $5 = filename +# +# On Darwin 7.7.0 and 7.6.0, we have +# +# $# = 4 +# $1 = day +# $2 = month +# $3 = year or time +# $4 = filename + +# Get the month. +case $2 in + Jan) month=January; nummonth=1;; + Feb) month=February; nummonth=2;; + Mar) month=March; nummonth=3;; + Apr) month=April; nummonth=4;; + May) month=May; nummonth=5;; + Jun) month=June; nummonth=6;; + Jul) month=July; nummonth=7;; + Aug) month=August; nummonth=8;; + Sep) month=September; nummonth=9;; + Oct) month=October; nummonth=10;; + Nov) month=November; nummonth=11;; + Dec) month=December; nummonth=12;; +esac + +case $3 in + ???*) day=$1;; + *) day=$3; shift;; +esac + +# Here we have to deal with the problem that the ls output gives either +# the time of day or the year. +case $3 in + *:*) set `date`; eval year=\$$# + case $2 in + Jan) nummonthtod=1;; + Feb) nummonthtod=2;; + Mar) nummonthtod=3;; + Apr) nummonthtod=4;; + May) nummonthtod=5;; + Jun) nummonthtod=6;; + Jul) nummonthtod=7;; + Aug) nummonthtod=8;; + Sep) nummonthtod=9;; + Oct) nummonthtod=10;; + Nov) nummonthtod=11;; + Dec) nummonthtod=12;; + esac + # For the first six month of the year the time notation can also + # be used for files modified in the last year. + if (expr $nummonth \> $nummonthtod) > /dev/null; + then + year=`expr $year - 1` + fi;; + *) year=$3;; +esac + +# The result. +echo $day $month $year + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-end: "$" +# End: Index: trunk/doc-orig/metric_size.tab =================================================================== --- trunk/doc-orig/metric_size.tab (nonexistent) +++ trunk/doc-orig/metric_size.tab (revision 1037) @@ -0,0 +1,192 @@ +# $Id$ +# + +0.20_mm .00787 +0.25_mm .00984 +0.30_mm .0118 +0.35_mm .0138 +0.40_mm .0158 +0.45_mm .0177 +0.50_mm .0197 +0.55_mm .0217 +0.60_mm .0236 +0.65_mm .0256 +0.70_mm .0276 +0.75_mm .0295 +0.80_mm .0315 +0.85_mm .0335 +0.90_mm .0354 +0.95_mm .0374 +1.00_mm .0394 +1.05_mm .0413 +1.10_mm .0433 +1.15_mm .0453 +1.20_mm .0472 +1.25_mm .0492 +1.30_mm .0512 +1.35_mm .0531 +1.40_mm .0551 +1.45_mm .0571 +1.50_mm .0591 +1.55_mm .0610 +1.60_mm .0630 +1.65_mm .0650 +1.70_mm .0669 +1.75_mm .0689 +1.80_mm .0709 +1.85_mm .0728 +1.90_mm .0748 +1.95_mm .0768 +2.00_mm .0787 +2.05_mm .0807 +2.10_mm .0827 +2.15_mm .0846 +2.20_mm .0866 +2.25_mm .0886 +2.30_mm .0906 +2.35_mm .0925 +2.40_mm .0945 +2.45_mm .0965 +2.50_mm .0984 +2.55_mm .1004 +2.60_mm .1024 +2.65_mm .1043 +2.70_mm .1063 +2.75_mm .1083 +2.80_mm .1102 +2.85_mm .1122 +2.90_mm .1142 +2.95_mm .1161 +3.00_mm .1181 +3.10_mm .1220 +3.15_mm .1240 +3.20_mm .1260 +3.25_mm .1280 +3.30_mm .1299 +3.40_mm .1339 +3.50_mm .1378 +3.60_mm .1417 +3.70_mm .1457 +3.75_mm .1476 +3.80_mm .1496 +3.90_mm .1535 +4.00_mm .1575 +4.10_mm .1614 +4.20_mm .1654 +4.25_mm .1673 +4.30_mm .1693 +4.40_mm .1732 +4.50_mm .1772 +4.60_mm .1811 +4.70_mm .1850 +4.75_mm .1870 +4.80_mm .1890 +4.90_mm .1929 +5.00_mm .1969 +5.10_mm .2008 +5.20_mm .2047 +5.25_mm .2067 +5.30_mm .2087 +5.40_mm .2126 +5.50_mm .2165 +5.60_mm .2205 +5.70_mm .2244 +5.75_mm .2264 +5.80_mm .2283 +5.90_mm .2323 +6.00_mm .2362 +6.10_mm .2402 +6.20_mm .2441 +6.25_mm .2461 +6.30_mm .2480 +6.40_mm .2520 +6.50_mm .2559 +6.60_mm .2598 +6.70_mm .2638 +6.75_mm .2657 +6.80_mm .2677 +6.90_mm .2717 +7.00_mm .2756 +7.10_mm .2795 +7.20_mm .2835 +7.25_mm .2854 +7.30_mm .2874 +7.40_mm .2914 +7.50_mm .2953 +7.60_mm .2992 +7.70_mm .3031 +8.00_mm .3150 +8.10_mm .3189 +8.20_mm .3228 +8.25_mm .3248 +8.30_mm .3268 +8.40_mm .3307 +8.50_mm .3346 +8.60_mm .3386 +8.70_mm .3425 +8.75_mm .3445 +8.80_mm .3465 +8.90_mm .3504 +9.00_mm .3543 +9.10_mm .3583 +9.20_mm .3622 +9.25_mm .3642 +9.30_mm .3661 +9.40_mm .3701 +9.50_mm .3740 +9.60_mm .3780 +9.70_mm .3819 +9.75_mm .3839 +9.80_mm .3858 +9.90_mm .3898 +10.00_mm .3937 +10.10_mm .3976 +10.20_mm .4016 +10.25_mm .4035 +10.30_mm .4055 +10.40_mm .4094 +10.50_mm .4134 +10.60_mm .4173 +10.70_mm .4213 +10.80_mm .4252 +10.90_mm .4291 +11.00_mm .4331 +11.10_mm .4370 +11.20_mm .4409 +11.25_mm .4429 +11.30_mm .4449 +11.40_mm .4488 +11.50_mm .4528 +11.60_mm .4567 +11.70_mm .4606 +11.75_mm .4626 +11.80_mm .4646 +11.90_mm .4685 +12.00_mm .4724 +12.50_mm .4921 +13.00_mm .5118 +13.50_mm .5315 +14.00_mm .5512 +14.50_mm .5709 +15.00_mm .5906 +15.50_mm .6102 +16.00_mm .6299 +16.50_mm .6496 +17.00_mm .6693 +17.50_mm .6890 +18.00_mm .7087 +18.50_mm .7283 +19.00_mm .7480 +19.50_mm .7677 +20.00_mm .7874 +20.50_mm .8071 +21.00_mm .8268 +21.50_mm .8465 +22.00_mm .8661 +22.50_mm .8858 +23.00_mm .9055 +23.50_mm .9252 +24.00_mm .9449 +24.50_mm .9646 +25.00_mm .9843 + Index: trunk/doc-orig/metric_size.texi =================================================================== --- trunk/doc-orig/metric_size.texi (nonexistent) +++ trunk/doc-orig/metric_size.texi (revision 1037) @@ -0,0 +1,70 @@ +@c Generated file. Do not edit directly +@c $Id$ +@multitable @columnfractions 0.167 0.167 0.167 0.167 0.167 0.167 +@item Drill @tab Diameter @tab Drill @tab Diameter @tab Drill @tab Diameter +@item Size @tab (inches) @tab Size @tab (inches) @tab Size @tab (inches) + +@item 0.20 mm @tab .00787 @tab 0.25 mm @tab .00984 @tab 0.30 mm @tab .0118 +@item 0.35 mm @tab .0138 @tab 0.40 mm @tab .0158 @tab 0.45 mm @tab .0177 +@item 0.50 mm @tab .0197 @tab 0.55 mm @tab .0217 @tab 0.60 mm @tab .0236 +@item 0.65 mm @tab .0256 @tab 0.70 mm @tab .0276 @tab 0.75 mm @tab .0295 +@item 0.80 mm @tab .0315 @tab 0.85 mm @tab .0335 @tab 0.90 mm @tab .0354 +@item 0.95 mm @tab .0374 @tab 1.00 mm @tab .0394 @tab 1.05 mm @tab .0413 +@item 1.10 mm @tab .0433 @tab 1.15 mm @tab .0453 @tab 1.20 mm @tab .0472 +@item 1.25 mm @tab .0492 @tab 1.30 mm @tab .0512 @tab 1.35 mm @tab .0531 +@item 1.40 mm @tab .0551 @tab 1.45 mm @tab .0571 @tab 1.50 mm @tab .0591 +@item 1.55 mm @tab .0610 @tab 1.60 mm @tab .0630 @tab 1.65 mm @tab .0650 +@item 1.70 mm @tab .0669 @tab 1.75 mm @tab .0689 @tab 1.80 mm @tab .0709 +@item 1.85 mm @tab .0728 @tab 1.90 mm @tab .0748 @tab 1.95 mm @tab .0768 +@item 2.00 mm @tab .0787 @tab 2.05 mm @tab .0807 @tab 2.10 mm @tab .0827 +@item 2.15 mm @tab .0846 @tab 2.20 mm @tab .0866 @tab 2.25 mm @tab .0886 +@item 2.30 mm @tab .0906 @tab 2.35 mm @tab .0925 @tab 2.40 mm @tab .0945 +@item 2.45 mm @tab .0965 @tab 2.50 mm @tab .0984 @tab 2.55 mm @tab .1004 +@item 2.60 mm @tab .1024 @tab 2.65 mm @tab .1043 @tab 2.70 mm @tab .1063 +@item 2.75 mm @tab .1083 @tab 2.80 mm @tab .1102 @tab 2.85 mm @tab .1122 +@item 2.90 mm @tab .1142 @tab 2.95 mm @tab .1161 @tab 3.00 mm @tab .1181 +@item 3.10 mm @tab .1220 @tab 3.15 mm @tab .1240 @tab 3.20 mm @tab .1260 +@item 3.25 mm @tab .1280 @tab 3.30 mm @tab .1299 @tab 3.40 mm @tab .1339 +@item 3.50 mm @tab .1378 @tab 3.60 mm @tab .1417 @tab 3.70 mm @tab .1457 +@item 3.75 mm @tab .1476 @tab 3.80 mm @tab .1496 @tab 3.90 mm @tab .1535 +@item 4.00 mm @tab .1575 @tab 4.10 mm @tab .1614 @tab 4.20 mm @tab .1654 +@item 4.25 mm @tab .1673 @tab 4.30 mm @tab .1693 @tab 4.40 mm @tab .1732 +@item 4.50 mm @tab .1772 @tab 4.60 mm @tab .1811 @tab 4.70 mm @tab .1850 +@item 4.75 mm @tab .1870 @tab 4.80 mm @tab .1890 @tab 4.90 mm @tab .1929 +@item 5.00 mm @tab .1969 @tab 5.10 mm @tab .2008 @tab 5.20 mm @tab .2047 +@item 5.25 mm @tab .2067 @tab 5.30 mm @tab .2087 @tab 5.40 mm @tab .2126 +@item 5.50 mm @tab .2165 @tab 5.60 mm @tab .2205 @tab 5.70 mm @tab .2244 +@item 5.75 mm @tab .2264 @tab 5.80 mm @tab .2283 @tab 5.90 mm @tab .2323 +@item 6.00 mm @tab .2362 @tab 6.10 mm @tab .2402 @tab 6.20 mm @tab .2441 +@item 6.25 mm @tab .2461 @tab 6.30 mm @tab .2480 @tab 6.40 mm @tab .2520 +@item 6.50 mm @tab .2559 @tab 6.60 mm @tab .2598 @tab 6.70 mm @tab .2638 +@item 6.75 mm @tab .2657 @tab 6.80 mm @tab .2677 @tab 6.90 mm @tab .2717 +@item 7.00 mm @tab .2756 @tab 7.10 mm @tab .2795 @tab 7.20 mm @tab .2835 +@item 7.25 mm @tab .2854 @tab 7.30 mm @tab .2874 @tab 7.40 mm @tab .2914 +@item 7.50 mm @tab .2953 @tab 7.60 mm @tab .2992 @tab 7.70 mm @tab .3031 +@item 8.00 mm @tab .3150 @tab 8.10 mm @tab .3189 @tab 8.20 mm @tab .3228 +@item 8.25 mm @tab .3248 @tab 8.30 mm @tab .3268 @tab 8.40 mm @tab .3307 +@item 8.50 mm @tab .3346 @tab 8.60 mm @tab .3386 @tab 8.70 mm @tab .3425 +@item 8.75 mm @tab .3445 @tab 8.80 mm @tab .3465 @tab 8.90 mm @tab .3504 +@item 9.00 mm @tab .3543 @tab 9.10 mm @tab .3583 @tab 9.20 mm @tab .3622 +@item 9.25 mm @tab .3642 @tab 9.30 mm @tab .3661 @tab 9.40 mm @tab .3701 +@item 9.50 mm @tab .3740 @tab 9.60 mm @tab .3780 @tab 9.70 mm @tab .3819 +@item 9.75 mm @tab .3839 @tab 9.80 mm @tab .3858 @tab 9.90 mm @tab .3898 +@item 10.00 mm @tab .3937 @tab 10.10 mm @tab .3976 @tab 10.20 mm @tab .4016 +@item 10.25 mm @tab .4035 @tab 10.30 mm @tab .4055 @tab 10.40 mm @tab .4094 +@item 10.50 mm @tab .4134 @tab 10.60 mm @tab .4173 @tab 10.70 mm @tab .4213 +@item 10.80 mm @tab .4252 @tab 10.90 mm @tab .4291 @tab 11.00 mm @tab .4331 +@item 11.10 mm @tab .4370 @tab 11.20 mm @tab .4409 @tab 11.25 mm @tab .4429 +@item 11.30 mm @tab .4449 @tab 11.40 mm @tab .4488 @tab 11.50 mm @tab .4528 +@item 11.60 mm @tab .4567 @tab 11.70 mm @tab .4606 @tab 11.75 mm @tab .4626 +@item 11.80 mm @tab .4646 @tab 11.90 mm @tab .4685 @tab 12.00 mm @tab .4724 +@item 12.50 mm @tab .4921 @tab 13.00 mm @tab .5118 @tab 13.50 mm @tab .5315 +@item 14.00 mm @tab .5512 @tab 14.50 mm @tab .5709 @tab 15.00 mm @tab .5906 +@item 15.50 mm @tab .6102 @tab 16.00 mm @tab .6299 @tab 16.50 mm @tab .6496 +@item 17.00 mm @tab .6693 @tab 17.50 mm @tab .6890 @tab 18.00 mm @tab .7087 +@item 18.50 mm @tab .7283 @tab 19.00 mm @tab .7480 @tab 19.50 mm @tab .7677 +@item 20.00 mm @tab .7874 @tab 20.50 mm @tab .8071 @tab 21.00 mm @tab .8268 +@item 21.50 mm @tab .8465 @tab 22.00 mm @tab .8661 @tab 22.50 mm @tab .8858 +@item 23.00 mm @tab .9055 @tab 23.50 mm @tab .9252 @tab 24.00 mm @tab .9449 +@item 24.50 mm @tab .9646 @tab 25.00 mm @tab .9843 @tab @tab @end multitable + Index: trunk/doc-orig/options.texi =================================================================== --- trunk/doc-orig/options.texi (nonexistent) +++ trunk/doc-orig/options.texi (revision 1037) @@ -0,0 +1,896 @@ +@c key options +@menu +* General Options:: +* General GUI Options:: +* GTK+ GUI Options:: +* lesstif GUI Options:: +* Colors:: +* Layer Names:: +* Paths:: +* Sizes:: +* Commands:: +* DRC Options:: +* BOM Creation:: +* Gerber Export:: +* Postscript Export:: +* Encapsulated Postscript Export:: +* PNG Options:: +* lpr Printing Options:: +* nelma Options:: +@end menu +@c options General Options +@node General Options +@section General Options +@c ./../src/main.c 434 +@ftable @code +@item --help +Show help on command line options. +@end ftable +@c ./../src/main.c 439 +@ftable @code +@item --version +Show version. +@end ftable +@c ./../src/main.c 443 +@ftable @code +@item --verbose +Be verbose on stdout. +@end ftable +@c ./../src/main.c 448 +@ftable @code +@item --copyright +Show copyright. +@end ftable +@c ./../src/main.c 453 +@ftable @code +@item --show-defaults +Show option defaults. +@end ftable +@c ./../src/main.c 458 +@ftable @code +@item --show-actions +Show available actions and exit. +@end ftable +@c ./../src/main.c 463 +@ftable @code +@item --dump-actions +Dump actions (for documentation). +@end ftable +@c ./../src/main.c 468 +@ftable @code +@item --grid-units-mm +Set default grid units. Can be mm or mil. Defaults to mil. +@end ftable +@c ./../src/main.c 686 +@ftable @code +@item --backup-interval +Time between automatic backups in seconds. Set to @code{0} to disable. +The default value is @code{60}. +@end ftable +@c ./../src/main.c 723 +@ftable @code +@item --groups +Layer group string. Defaults to @code{"1,c:2:3:4:5:6,s:7:8"}. +@end ftable +@c ./../src/main.c 788 +@ftable @code +@item --route-styles +A string that defines the route styles. Defaults to @* +@code{"Signal,1000,3600,2000,1000:Power,2500,6000,3500,1000 + :Fat,4000,6000,3500,1000:Skinny,600,2402,1181,600"} +@end ftable +@c ./../src/main.c 807 +@ftable @code +@item --element-path +A colon separated list of directories or commands (starts with '|'). +The path is passed to the program specified in @option{--element-command}. +@end ftable +@c ./../src/main.c 817 +@ftable @code +@item --action-script +If set, this file is executed at startup. +@end ftable +@c ./../src/main.c 822 +@ftable @code +@item --action-string +If set, this string of actions is executed at startup. +@end ftable +@c ./../src/main.c 827 +@ftable @code +@item --fab-author +Name of author to be put in the Gerber files. +@end ftable +@c ./../src/main.c 832 +@ftable @code +@item --layer-stack +Initial layer stackup, for setting up an export. A comma separated list of layer +names, layer numbers and layer groups. +@end ftable +@c ./../src/main.c 883 +@ftable @code +@item --save-last-command +If set, the last user command is saved. +@end ftable +@c ./../src/main.c 887 +@ftable @code +@item --save-in-tmp +If set, all data which would otherwise be lost are saved in a temporary file +@file{/tmp/PCB.%i.save} . Sequence @samp{%i} is replaced by the process ID. +@end ftable +@c ./../src/main.c 901 +@ftable @code +@item --reset-after-element +If set, all found connections are reset before a new component is scanned. +@end ftable +@c ./../src/main.c 906 +@ftable @code +@item --ring-bell-finished +Execute the bell command when all rats are routed. +@end ftable +@c options General GUI Options +@node General GUI Options +@section General GUI Options +@c ./../src/main.c 842 +@ftable @code +@item --pinout-offset-x +Horizontal offset of the pin number display. Defaults to @code{100mil}. +@end ftable +@c ./../src/main.c 847 +@ftable @code +@item --pinout-offset-y +Vertical offset of the pin number display. Defaults to @code{100mil}. +@end ftable +@c ./../src/main.c 852 +@ftable @code +@item --pinout-text-offset-x +Horizontal offset of the pin name display. Defaults to @code{800mil}. +@end ftable +@c ./../src/main.c 857 +@ftable @code +@item --pinout-text-offset-y +Vertical offset of the pin name display. Defaults to @code{-100mil}. +@end ftable +@c ./../src/main.c 862 +@ftable @code +@item --draw-grid +If set, draw the grid at start-up. +@end ftable +@c ./../src/main.c 866 +@ftable @code +@item --clear-line +If set, new lines clear polygons. +@end ftable +@c ./../src/main.c 870 +@ftable @code +@item --full-poly +If set, new polygons are full ones. +@end ftable +@c ./../src/main.c 874 +@ftable @code +@item --unique-names +If set, you will not be permitted to change the name of an component to match that +of another component. +@end ftable +@c ./../src/main.c 878 +@ftable @code +@item --snap-pin +If set, pin centers and pad end points are treated as additional grid points +that the cursor can snap to. +@end ftable +@c ./../src/main.c 892 +@ftable @code +@item --all-direction-lines +Allow all directions, when drawing new lines. +@end ftable +@c ./../src/main.c 897 +@ftable @code +@item --show-number +Pinout shows number. +@end ftable +@c options GTK+ GUI Options +@node GTK+ GUI Options +@section GTK+ GUI Options +@c ./../src/hid/gtk/gui-top-window.c 1615 +@ftable @code +@item --listen +Listen for actions on stdin. +@end ftable +@c ./../src/hid/gtk/gui-top-window.c 1621 +@ftable @code +@item --bg-image +File name of an image to put into the background of the GUI canvas. The image must +be a color PPM image, in binary (not ASCII) format. It can be any size, and will be +automatically scaled to fit the canvas. +@end ftable +@c ./../src/hid/gtk/gui-top-window.c 1627 +@ftable @code +@item --pcb-menu +Location of the @file{gpcb-menu.res} file which defines the menu for the GTK+ GUI. +@end ftable +@c options lesstif GUI Options +@node lesstif GUI Options +@section lesstif GUI Options +@c ./../src/hid/lesstif/main.c 201 +@ftable @code +@item --listen +Listen for actions on stdin. +@end ftable +@c ./../src/hid/lesstif/main.c 207 +@ftable @code +@item --bg-image +File name of an image to put into the background of the GUI canvas. The image must +be a color PPM image, in binary (not ASCII) format. It can be any size, and will be +automatically scaled to fit the canvas. +@end ftable +@c ./../src/hid/lesstif/main.c 213 +@ftable @code +@item --pcb-menu +Location of the @file{pcb-menu.res} file which defines the menu for the lesstif GUI. +@end ftable +@c options Colors +@node Colors +@section Colors +@c ./../src/main.c 473 +@ftable @code +@item --black-color +Color value for black. Default: @samp{#000000} +@end ftable +@c ./../src/main.c 477 +@ftable @code +@item --black-color +Color value for white. Default: @samp{#ffffff} +@end ftable +@c ./../src/main.c 481 +@ftable @code +@item --background-color +Background color of the canvas. Default: @samp{#e5e5e5} +@end ftable +@c ./../src/main.c 486 +@ftable @code +@item --crosshair-color +Color of the crosshair. Default: @samp{#ff0000} +@end ftable +@c ./../src/main.c 491 +@ftable @code +@item --cross-color +Color of the cross. Default: @samp{#cdcd00} +@end ftable +@c ./../src/main.c 495 +@ftable @code +@item --via-color +Color of vias. Default: @samp{#7f7f7f} +@end ftable +@c ./../src/main.c 499 +@ftable @code +@item --via-selected-color +Color of selected vias. Default: @samp{#00ffff} +@end ftable +@c ./../src/main.c 504 +@ftable @code +@item --pin-color +Color of pins. Default: @samp{#4d4d4d} +@end ftable +@c ./../src/main.c 508 +@ftable @code +@item --pin-selected-color +Color of selected pins. Default: @samp{#00ffff} +@end ftable +@c ./../src/main.c 513 +@ftable @code +@item --pin-name-color +Color of pin names and pin numbers. Default: @samp{#ff0000} +@end ftable +@c ./../src/main.c 518 +@ftable @code +@item --element-color +Color of components. Default: @samp{#000000} +@end ftable +@c ./../src/main.c 522 +@ftable @code +@item --rat-color +Color of ratlines. Default: @samp{#b8860b} +@end ftable +@c ./../src/main.c 526 +@ftable @code +@item --invisible-objects-color +Color of invisible objects. Default: @samp{#cccccc} +@end ftable +@c ./../src/main.c 531 +@ftable @code +@item --invisible-mark-color +Color of invisible marks. Default: @samp{#cccccc} +@end ftable +@c ./../src/main.c 536 +@ftable @code +@item --element-selected-color +Color of selected components. Default: @samp{#00ffff} +@end ftable +@c ./../src/main.c 541 +@ftable @code +@item --rat-selected-color +Color of selected rats. Default: @samp{#00ffff} +@end ftable +@c ./../src/main.c 546 +@ftable @code +@item --connected-color +Color to indicate connections. Default: @samp{#00ff00} +@end ftable +@c ./../src/main.c 551 +@ftable @code +@item --off-limit-color +Color of off-canvas area. Default: @samp{#cccccc} +@end ftable +@c ./../src/main.c 556 +@ftable @code +@item --grid-color +Color of the grid. Default: @samp{#ff0000} +@end ftable +@c ./../src/main.c 560 +@ftable @code +@item --layer-color- +Color of layer @code{}, where @code{} is an integer from 1 to 16. +@end ftable +@c ./../src/main.c 578 +@ftable @code +@item --layer-selected-color- +Color of layer @code{}, when selected. @code{} is an integer from 1 to 16. +@end ftable +@c ./../src/main.c 597 +@ftable @code +@item --warn-color +Color of offending objects during DRC. Default value is @code{"#ff8000"} +@end ftable +@c ./../src/main.c 601 +@ftable @code +@item --mask-color +Color of the mask layer. Default value is @code{"#ff0000"} +@end ftable +@c options Layer Names +@node Layer Names +@section Layer Names +@c ./../src/main.c 691 +@ftable @code +@item --layer-name-1 +Name of the 1st Layer. Default is @code{"top"}. +@end ftable +@c ./../src/main.c 695 +@ftable @code +@item --layer-name-2 +Name of the 2nd Layer. Default is @code{"ground"}. +@end ftable +@c ./../src/main.c 699 +@ftable @code +@item --layer-name-3 +Name of the 3nd Layer. Default is @code{"signal2"}. +@end ftable +@c ./../src/main.c 703 +@ftable @code +@item --layer-name-4 +Name of the 4rd Layer. Default is @code{"signal3"}. +@end ftable +@c ./../src/main.c 707 +@ftable @code +@item --layer-name-5 +Name of the 5rd Layer. Default is @code{"power"}. +@end ftable +@c ./../src/main.c 711 +@ftable @code +@item --layer-name-6 +Name of the 6rd Layer. Default is @code{"bottom"}. +@end ftable +@c ./../src/main.c 715 +@ftable @code +@item --layer-name-7 +Name of the 7rd Layer. Default is @code{"outline"}. +@end ftable +@c ./../src/main.c 719 +@ftable @code +@item --layer-name-8 +Name of the 8rd Layer. Default is @code{"spare"}. +@end ftable +@c options Paths +@node Paths +@section Paths +@c ./../src/main.c 769 +@ftable @code +@item --lib-newlib +Top level directory for the newlib style library. +@end ftable +@c ./../src/main.c 778 +@ftable @code +@item --lib-name +The default filename for the library. +@end ftable +@c ./../src/main.c 783 +@ftable @code +@item --default-font +The name of the default font. +@end ftable +@c ./../src/main.c 794 +@ftable @code +@item --file-path +A colon separated list of directories or commands (starts with '|'). The path +is passed to the program specified in @option{--file-command} together with the selected +filename. +@end ftable +@c ./../src/main.c 802 +@ftable @code +@item --font-path +A colon separated list of directories to search the default font. Defaults to +the default library path. +@end ftable +@c ./../src/main.c 812 +@ftable @code +@item --lib-path +A colon separated list of directories that will be passed to the commands specified +by @option{--element-command} and @option{--element-contents-command}. +@end ftable +@c options Sizes +@node Sizes +@section Sizes +@c ./../src/main.c 606 +All parameters should be given with an unit. If no unit is given, 1/100 mil +(cmil) will be used. Write units without space to the +number like @code{3mm}, not @code{3 mm}. +Valid Units are: + @table @samp + @item km + Kilometer + @item m + Meter + @item cm + Centimeter + @item mm + Millimeter + @item um + Micrometer + @item nm + Nanometer + @item in + Inch (1in = 0.0254m) + @item mil + Mil (1000mil = 1in) + @item cmil + Centimil (1/100 mil) +@end table + +@ftable @code +@item --via-thickness +Default diameter of vias. Default value is @code{60mil}. +@end ftable +@c ./../src/main.c 611 +@ftable @code +@item --via-drilling-hole +Default diameter of holes. Default value is @code{28mil}. +@end ftable +@c ./../src/main.c 616 +@ftable @code +@item --line-thickness +Default thickness of new lines. Default value is @code{10mil}. +@end ftable +@c ./../src/main.c 621 +@ftable @code +@item --rat-thickness +Thickness of rats. Values from 1 to 19 are fixed width in screen pixels. +Anything larger means PCB units (i.e. 100 means "1 mil"). Default value +is @code{10mil}. +@end ftable +@c ./../src/main.c 625 +@ftable @code +@item --keepaway +Default minimum distance between a track and adjacent copper. +Default value is @code{10mil}. +@end ftable +@c ./../src/main.c 629 +@ftable @code +@item --default-PCB-width +Default width of the canvas. Default value is @code{6000mil}. +@end ftable +@c ./../src/main.c 634 +@ftable @code +@item --default-PCB-height +Default height of the canvas. Default value is @code{5000mil}. +@end ftable +@c ./../src/main.c 639 +@ftable @code +@item --text-scale +Default text scale. This value is in percent. Default value is @code{100}. +@end ftable +@c ./../src/main.c 643 +@ftable @code +@item --alignment-distance +Specifies the distance between the board outline and alignment targets. +Default value is @code{2mil}. +@end ftable +@c ./../src/main.c 677 +@ftable @code +@item --grid +Initial grid size. Default value is @code{10mil}. +@end ftable +@c ./../src/main.c 681 +@ftable @code +@item --minimum polygon area +Minimum polygon area. +@end ftable +@c options Commands +@node Commands +@section Commands +@c ./../src/main.c 728 +pcb uses external commands for input output operations. These commands can be +configured at start-up to meet local requirements. The command string may include +special sequences @code{%f}, @code{%p} or @code{%a}. These are replaced when the +command is called. The sequence @code{%f} is replaced by the file name, +@code{%p} gets the path and @code{%a} indicates a package name. +@c ./../src/main.c 731 +@ftable @code +@item --font-command +Command to load a font. +@end ftable +@c ./../src/main.c 735 +@ftable @code +@item --file-command +Command to read a file. +@end ftable +@c ./../src/main.c 739 +@ftable @code +@item --element-command +Command to read a footprint. @* +Defaults to @code{"M4PATH='%p';export M4PATH;echo 'include(%f)' | m4"} +@end ftable +@c ./../src/main.c 745 +@ftable @code +@item --print-file +Command to print to a file. +@end ftable +@c ./../src/main.c 749 +@ftable @code +@item --lib-command-dir +Path to the command that queries the library. +@end ftable +@c ./../src/main.c 754 +@ftable @code +@item --lib-command +Command to query the library. @* +Defaults to @code{"QueryLibrary.sh '%p' '%f' %a"} +@end ftable +@c ./../src/main.c 759 +@ftable @code +@item --lib-contents-command +Command to query the contents of the library. @* +Defaults to @code{"ListLibraryContents.sh %p %f"} or, +on Windows builds, an empty string (to disable this feature). +@end ftable +@c ./../src/main.c 774 +@ftable @code +@item --save-command +Command to save to a file. +@end ftable +@c ./../src/main.c 798 +@ftable @code +@item --rat-command +Command for reading a netlist. Sequence @code{%f} is replaced by the netlist filename. +@end ftable +@c options DRC Options +@node DRC Options +@section DRC Options +@c ./../src/main.c 648 +All parameters should be given with an unit. If no unit is given, 1/100 mil +(cmil) will be used for backward compability. Valid units are given in section +@ref{Sizes}. +@c ./../src/main.c 652 +@ftable @code +@item --bloat +Minimum spacing. Default value is @code{10mil}. +@end ftable +@c ./../src/main.c 656 +@ftable @code +@item --shrink +Minimum touching overlap. Default value is @code{10mil}. +@end ftable +@c ./../src/main.c 660 +@ftable @code +@item --min-width +Minimum width of copper. Default value is @code{10mil}. +@end ftable +@c ./../src/main.c 664 +@ftable @code +@item --min-silk +Minimum width of lines in silk. Default value is @code{10mil}. +@end ftable +@c ./../src/main.c 668 +@ftable @code +@item --min-drill +Minimum diameter of holes. Default value is @code{15mil}. +@end ftable +@c ./../src/main.c 672 +@ftable @code +@item --min-ring +Minimum width of annular ring. Default value is @code{10mil}. +@end ftable +@c options BOM Creation +@node BOM Creation +@section BOM Creation +@c ./../src/hid/bom/bom.c 30 +@ftable @code +@item --bomfile +Name of the BOM output file. +@end ftable +@c ./../src/hid/bom/bom.c 35 +@ftable @code +@item --xyfile +Name of the XY output file. +@end ftable +@c ./../src/hid/bom/bom.c 41 +@ftable @code +@item --xy-unit +Unit of XY dimensions. Defaults to mil. +@end ftable +@c options Gerber Export +@node Gerber Export +@section Gerber Export +@c ./../src/hid/gerber/gerber.c 338 +@ftable @code +@item --gerberfile +Gerber output file prefix. Can include a path. +@end ftable +@c ./../src/hid/gerber/gerber.c 344 +@ftable @code +@item --all-layers +Output contains all layers, even empty ones. +@end ftable +@c ./../src/hid/gerber/gerber.c 350 +@ftable @code +@item --verbose +Print file names and aperture counts on stdout. +@end ftable +@c options Postscript Export +@node Postscript Export +@section Postscript Export +@c ./../src/hid/ps/ps.c 149 +@ftable @code +@item --psfile +Name of the postscript output file. Can contain a path. +@end ftable +@c ./../src/hid/ps/ps.c 155 +@ftable @code +@cindex drill-helper +@item --drill-helper +Print a centering target in large drill holes. +@end ftable +@c ./../src/hid/ps/ps.c 161 +@ftable @code +@cindex align-marks +@item --align-marks +Print alignment marks on each sheet. This is meant to ease alignment during exposure. +@end ftable +@c ./../src/hid/ps/ps.c 167 +@ftable @code +@item --outline +Print the contents of the outline layer on each sheet. +@end ftable +@c ./../src/hid/ps/ps.c 172 +@ftable @code +@item --mirror +Print mirror image. +@end ftable +@c ./../src/hid/ps/ps.c 178 +@ftable @code +@item --fill-page +Scale output to make the board fit the page. +@end ftable +@c ./../src/hid/ps/ps.c 184 +@ftable @code +@item --auto-mirror +Print mirror image of appropriate layers. +@end ftable +@c ./../src/hid/ps/ps.c 190 +@ftable @code +@item --ps-color +Postscript output in color. +@end ftable +@c ./../src/hid/ps/ps.c 196 +@ftable @code +@cindex ps-bloat +@item --ps-bloat +Amount to add to trace/pad/pin edges. +@end ftable +@c ./../src/hid/ps/ps.c 202 +@ftable @code +@cindex ps-invert +@item --ps-invert +Draw objects as white-on-black. +@end ftable +@c ./../src/hid/ps/ps.c 208 +@ftable @code +@item --media +Size of the media, the postscript is fitted to. The parameter +@code{} can be any of the standard names for paper size: @samp{A0} +to @samp{A10}, @samp{B0} to @samp{B10}, @samp{Letter}, @samp{11x17}, +@samp{Ledger}, @samp{Legal}, @samp{Executive}, @samp{A-Size}, @samp{B-size}, +@samp{C-Size}, @samp{D-size}, @samp{E-size}, @samp{US-Business_Card}, +@samp{Intl-Business_Card}. +@end ftable +@c ./../src/hid/ps/ps.c 214 +@ftable @code +@cindex psfade +@item --psfade +Fade amount for assembly drawings (0.0=missing, 1.0=solid). +@end ftable +@c ./../src/hid/ps/ps.c 220 +@ftable @code +@item --scale +Scale value to compensate for printer sizing errors (1.0 = full scale). +@end ftable +@c ./../src/hid/ps/ps.c 226 +@ftable @code +@cindex multi-file +@item --multi-file +Produce multiple files, one per page, instead of a single multi page file. +@end ftable +@c ./../src/hid/ps/ps.c 232 +@ftable @code +@item --xcalib +Paper width. Used for x-Axis calibration. +@end ftable +@c ./../src/hid/ps/ps.c 238 +@ftable @code +@item --ycalib +Paper height. Used for y-Axis calibration. +@end ftable +@c ./../src/hid/ps/ps.c 244 +@ftable @code +@item --drill-copper +Draw drill holes in pins / vias, instead of leaving solid copper. +@end ftable +@c ./../src/hid/ps/ps.c 250 +@ftable @code +@cindex show-legend +@item --show-legend +Print file name and scale on printout. +@end ftable +@c options Encapsulated Postscript Export +@node Encapsulated Postscript Export +@section Encapsulated Postscript Export +@c ./../src/hid/ps/eps.c 78 +@ftable @code +@item --eps-file +Name of the encapsulated postscript output file. Can contain a path. +@end ftable +@c ./../src/hid/ps/eps.c 84 +@ftable @code +@item --eps-scale +Scale EPS output by the parameter @samp{num}. +@end ftable +@c ./../src/hid/ps/eps.c 90 +@ftable @code +@cindex as-shown (EPS) +@item --as-shown +Export layers as shown on screen. +@end ftable +@c ./../src/hid/ps/eps.c 96 +@ftable @code +@item --monochrome +Convert output to monochrome. +@end ftable +@c ./../src/hid/ps/eps.c 102 +@ftable @code +@cindex only-visible +@item --only-visible +Limit the bounds of the EPS file to the visible items. +@end ftable +@c options PNG Options +@node PNG Options +@section PNG Options +@c ./../src/hid/png/png.c 168 +@ftable @code +@item --outfile +Name of the file to be exported to. Can contain a path. +@end ftable +@c ./../src/hid/png/png.c 174 +@ftable @code +@item --dpi +Scale factor in pixels/inch. Set to 0 to scale to size specified in the layout. +@end ftable +@c ./../src/hid/png/png.c 180 +@ftable @code +@item --x-max +Width of the png image in pixels. No constraint, when set to 0. +@end ftable +@c ./../src/hid/png/png.c 186 +@ftable @code +@item --y-max +Height of the png output in pixels. No constraint, when set to 0. +@end ftable +@c ./../src/hid/png/png.c 192 +@ftable @code +@item --xy-max +Maximum width and height of the PNG output in pixels. No constraint, when set to 0. +@end ftable +@c ./../src/hid/png/png.c 198 +@ftable @code +@item --as-shown +Export layers as shown on screen. +@end ftable +@c ./../src/hid/png/png.c 204 +@ftable @code +@item --monochrome +Convert output to monochrome. +@end ftable +@c ./../src/hid/png/png.c 210 +@ftable @code +@item --only-vivible +Limit the bounds of the exported PNG image to the visible items. +@end ftable +@c ./../src/hid/png/png.c 216 +@ftable @code +@item --use-alpha +Make the background and any holes transparent. +@end ftable +@c ./../src/hid/png/png.c 222 +@ftable @code +@item --format +File format to be exported. Parameter @code{} can be @samp{PNG}, +@samp{GIF}, or @samp{JPEG}. +@end ftable +@c ./../src/hid/png/png.c 228 +@ftable @code +@item --png-bloat +Amount of extra thickness to add to traces, pads, or pin edges. The parameter +@samp{} is a number, appended by a dimension @samp{mm}, @samp{mil}, or +@samp{pix}. If no dimension is given, the default dimension is 1/100 mil. +@end ftable +@c ./../src/hid/png/png.c 234 +@ftable @code +@cindex photo-mode +@item --photo-mode +Export a photo realistic image of the layout. +@end ftable +@c ./../src/hid/png/png.c 240 +@ftable @code +@item --photo-flip-x +In photo-realistic mode, export the reverse side of the layout. Left-right flip. +@end ftable +@c ./../src/hid/png/png.c 246 +@ftable @code +@item --photo-flip-y +In photo-realistic mode, export the reverse side of the layout. Up-down flip. +@end ftable +@c options lpr Printing Options +@node lpr Printing Options +@section lpr Printing Options +@c ./../src/hid/lpr/lpr.c 33 +@ftable @code +@item --lprcommand +Command to use for printing. Defaults to @code{lpr}. This can be used to produce +PDF output with a virtual PDF printer. Example: @* +@code{--lprcommand "lp -d CUPS-PDF-Printer"}. +@end ftable +@noindent In addition, all @ref{Postscript Export} options are valid. +@c options nelma Options +@node nelma Options +@section nelma Options +@c ./../src/hid/nelma/nelma.c 157 +@ftable @code +@item -- basename +File name prefix. +@end ftable +@c ./../src/hid/nelma/nelma.c 163 +@ftable @code +@item --dpi +Horizontal scale factor (grid points/inch). +@end ftable +@c ./../src/hid/nelma/nelma.c 169 +@ftable @code +@item --copper-height +Copper layer height (um). +@end ftable +@c ./../src/hid/nelma/nelma.c 175 +@ftable @code +@item --substrate-height +Substrate layer height (um). +@end ftable +@c ./../src/hid/nelma/nelma.c 181 +@ftable @code +@item --substrate-epsilon +Substrate relative epsilon. +@end ftable Index: trunk/doc-orig/pad.pcb =================================================================== --- trunk/doc-orig/pad.pcb (nonexistent) +++ trunk/doc-orig/pad.pcb (revision 1037) @@ -0,0 +1,911 @@ +# release: pcb-bin 1.99q + +PCB["pad" 600000 500000] + +Grid[2000.00000000 0 0 1] +Cursor[88600 72400 2.000000] +Thermal[0.500000] +DRC[699 400 800 800 1000 750] +Flags(0x0000000000000840) +Groups("1,s:2,c:3:4:5:6:7:8") +Styles["Signal,1000,3600,2000,1000:Power,2500,6000,3500,1000:Fat,4000,6000,3500,1000:Skinny,200,2402,1181,600"] + +Symbol[' ' 1800] +( +) +Symbol['!' 1200] +( + SymbolLine[0 4500 0 5000 800] + SymbolLine[0 1000 0 3500 800] +) +Symbol['"' 1200] +( + SymbolLine[0 1000 0 2000 800] + SymbolLine[1000 1000 1000 2000 800] +) +Symbol['#' 1200] +( + SymbolLine[0 3500 2000 3500 800] + SymbolLine[0 2500 2000 2500 800] + SymbolLine[1500 2000 1500 4000 800] + SymbolLine[500 2000 500 4000 800] +) +Symbol['$' 1200] +( + SymbolLine[1500 1500 2000 2000 800] + SymbolLine[500 1500 1500 1500 800] + SymbolLine[0 2000 500 1500 800] + SymbolLine[0 2000 0 2500 800] + SymbolLine[0 2500 500 3000 800] + SymbolLine[500 3000 1500 3000 800] + SymbolLine[1500 3000 2000 3500 800] + SymbolLine[2000 3500 2000 4000 800] + SymbolLine[1500 4500 2000 4000 800] + SymbolLine[500 4500 1500 4500 800] + SymbolLine[0 4000 500 4500 800] + SymbolLine[1000 1000 1000 5000 800] +) +Symbol['%' 1200] +( + SymbolLine[0 1500 0 2000 800] + SymbolLine[0 1500 500 1000 800] + SymbolLine[500 1000 1000 1000 800] + SymbolLine[1000 1000 1500 1500 800] + SymbolLine[1500 1500 1500 2000 800] + SymbolLine[1000 2500 1500 2000 800] + SymbolLine[500 2500 1000 2500 800] + SymbolLine[0 2000 500 2500 800] + SymbolLine[0 5000 4000 1000 800] + SymbolLine[3500 5000 4000 4500 800] + SymbolLine[4000 4000 4000 4500 800] + SymbolLine[3500 3500 4000 4000 800] + SymbolLine[3000 3500 3500 3500 800] + SymbolLine[2500 4000 3000 3500 800] + SymbolLine[2500 4000 2500 4500 800] + SymbolLine[2500 4500 3000 5000 800] + SymbolLine[3000 5000 3500 5000 800] +) +Symbol['&' 1200] +( + SymbolLine[0 4500 500 5000 800] + SymbolLine[0 1500 0 2500 800] + SymbolLine[0 1500 500 1000 800] + SymbolLine[0 3500 1500 2000 800] + SymbolLine[500 5000 1000 5000 800] + SymbolLine[1000 5000 2000 4000 800] + SymbolLine[0 2500 2500 5000 800] + SymbolLine[500 1000 1000 1000 800] + SymbolLine[1000 1000 1500 1500 800] + SymbolLine[1500 1500 1500 2000 800] + SymbolLine[0 3500 0 4500 800] +) +Symbol[''' 1200] +( + SymbolLine[0 2000 1000 1000 800] +) +Symbol['(' 1200] +( + SymbolLine[0 4500 500 5000 800] + SymbolLine[0 1500 500 1000 800] + SymbolLine[0 1500 0 4500 800] +) +Symbol[')' 1200] +( + SymbolLine[0 1000 500 1500 800] + SymbolLine[500 1500 500 4500 800] + SymbolLine[0 5000 500 4500 800] +) +Symbol['*' 1200] +( + SymbolLine[0 2000 2000 4000 800] + SymbolLine[0 4000 2000 2000 800] + SymbolLine[0 3000 2000 3000 800] + SymbolLine[1000 2000 1000 4000 800] +) +Symbol['+' 1200] +( + SymbolLine[0 3000 2000 3000 800] + SymbolLine[1000 2000 1000 4000 800] +) +Symbol[',' 1200] +( + SymbolLine[0 6000 1000 5000 800] +) +Symbol['-' 1200] +( + SymbolLine[0 3000 2000 3000 800] +) +Symbol['.' 1200] +( + SymbolLine[0 5000 500 5000 800] +) +Symbol['/' 1200] +( + SymbolLine[0 4500 3000 1500 800] +) +Symbol['0' 1200] +( + SymbolLine[0 4500 500 5000 800] + SymbolLine[0 1500 0 4500 800] + SymbolLine[0 1500 500 1000 800] + SymbolLine[500 1000 1500 1000 800] + SymbolLine[1500 1000 2000 1500 800] + SymbolLine[2000 1500 2000 4500 800] + SymbolLine[1500 5000 2000 4500 800] + SymbolLine[500 5000 1500 5000 800] + SymbolLine[0 4000 2000 2000 800] +) +Symbol['1' 1200] +( + SymbolLine[500 5000 1500 5000 800] + SymbolLine[1000 1000 1000 5000 800] + SymbolLine[0 2000 1000 1000 800] +) +Symbol['2' 1200] +( + SymbolLine[0 1500 500 1000 800] + SymbolLine[500 1000 2000 1000 800] + SymbolLine[2000 1000 2500 1500 800] + SymbolLine[2500 1500 2500 2500 800] + SymbolLine[0 5000 2500 2500 800] + SymbolLine[0 5000 2500 5000 800] +) +Symbol['3' 1200] +( + SymbolLine[0 1500 500 1000 800] + SymbolLine[500 1000 1500 1000 800] + SymbolLine[1500 1000 2000 1500 800] + SymbolLine[2000 1500 2000 4500 800] + SymbolLine[1500 5000 2000 4500 800] + SymbolLine[500 5000 1500 5000 800] + SymbolLine[0 4500 500 5000 800] + SymbolLine[500 3000 2000 3000 800] +) +Symbol['4' 1200] +( + SymbolLine[0 3000 2000 1000 800] + SymbolLine[0 3000 2500 3000 800] + SymbolLine[2000 1000 2000 5000 800] +) +Symbol['5' 1200] +( + SymbolLine[0 1000 2000 1000 800] + SymbolLine[0 1000 0 3000 800] + SymbolLine[0 3000 500 2500 800] + SymbolLine[500 2500 1500 2500 800] + SymbolLine[1500 2500 2000 3000 800] + SymbolLine[2000 3000 2000 4500 800] + SymbolLine[1500 5000 2000 4500 800] + SymbolLine[500 5000 1500 5000 800] + SymbolLine[0 4500 500 5000 800] +) +Symbol['6' 1200] +( + SymbolLine[1500 1000 2000 1500 800] + SymbolLine[500 1000 1500 1000 800] + SymbolLine[0 1500 500 1000 800] + SymbolLine[0 1500 0 4500 800] + SymbolLine[0 4500 500 5000 800] + SymbolLine[1500 3000 2000 3500 800] + SymbolLine[0 3000 1500 3000 800] + SymbolLine[500 5000 1500 5000 800] + SymbolLine[1500 5000 2000 4500 800] + SymbolLine[2000 3500 2000 4500 800] +) +Symbol['7' 1200] +( + SymbolLine[0 5000 2500 2500 800] + SymbolLine[2500 1000 2500 2500 800] + SymbolLine[0 1000 2500 1000 800] +) +Symbol['8' 1200] +( + SymbolLine[0 4500 500 5000 800] + SymbolLine[0 3500 0 4500 800] + SymbolLine[0 3500 500 3000 800] + SymbolLine[500 3000 1500 3000 800] + SymbolLine[1500 3000 2000 3500 800] + SymbolLine[2000 3500 2000 4500 800] + SymbolLine[1500 5000 2000 4500 800] + SymbolLine[500 5000 1500 5000 800] + SymbolLine[0 2500 500 3000 800] + SymbolLine[0 1500 0 2500 800] + SymbolLine[0 1500 500 1000 800] + SymbolLine[500 1000 1500 1000 800] + SymbolLine[1500 1000 2000 1500 800] + SymbolLine[2000 1500 2000 2500 800] + SymbolLine[1500 3000 2000 2500 800] +) +Symbol['9' 1200] +( + SymbolLine[0 5000 2000 3000 800] + SymbolLine[2000 1500 2000 3000 800] + SymbolLine[1500 1000 2000 1500 800] + SymbolLine[500 1000 1500 1000 800] + SymbolLine[0 1500 500 1000 800] + SymbolLine[0 1500 0 2500 800] + SymbolLine[0 2500 500 3000 800] + SymbolLine[500 3000 2000 3000 800] +) +Symbol[':' 1200] +( + SymbolLine[0 2500 500 2500 800] + SymbolLine[0 3500 500 3500 800] +) +Symbol[';' 1200] +( + SymbolLine[0 5000 1000 4000 800] + SymbolLine[1000 2500 1000 3000 800] +) +Symbol['<' 1200] +( + SymbolLine[0 3000 1000 2000 800] + SymbolLine[0 3000 1000 4000 800] +) +Symbol['=' 1200] +( + SymbolLine[0 2500 2000 2500 800] + SymbolLine[0 3500 2000 3500 800] +) +Symbol['>' 1200] +( + SymbolLine[0 2000 1000 3000 800] + SymbolLine[0 4000 1000 3000 800] +) +Symbol['?' 1200] +( + SymbolLine[1000 3000 1000 3500 800] + SymbolLine[1000 4500 1000 5000 800] + SymbolLine[0 1500 0 2000 800] + SymbolLine[0 1500 500 1000 800] + SymbolLine[500 1000 1500 1000 800] + SymbolLine[1500 1000 2000 1500 800] + SymbolLine[2000 1500 2000 2000 800] + SymbolLine[1000 3000 2000 2000 800] +) +Symbol['@' 1200] +( + SymbolLine[0 1000 0 4000 800] + SymbolLine[0 4000 1000 5000 800] + SymbolLine[1000 5000 4000 5000 800] + SymbolLine[5000 3500 5000 1000 800] + SymbolLine[5000 1000 4000 0 800] + SymbolLine[4000 0 1000 0 800] + SymbolLine[1000 0 0 1000 800] + SymbolLine[1500 2000 1500 3000 800] + SymbolLine[1500 3000 2000 3500 800] + SymbolLine[2000 3500 3000 3500 800] + SymbolLine[3000 3500 3500 3000 800] + SymbolLine[3500 3000 4000 3500 800] + SymbolLine[3500 3000 3500 1500 800] + SymbolLine[3500 2000 3000 1500 800] + SymbolLine[2000 1500 3000 1500 800] + SymbolLine[2000 1500 1500 2000 800] + SymbolLine[4000 3500 5000 3500 800] +) +Symbol['A' 1200] +( + SymbolLine[0 1500 0 5000 800] + SymbolLine[0 1500 500 1000 800] + SymbolLine[500 1000 2000 1000 800] + SymbolLine[2000 1000 2500 1500 800] + SymbolLine[2500 1500 2500 5000 800] + SymbolLine[0 3000 2500 3000 800] +) +Symbol['B' 1200] +( + SymbolLine[0 5000 2000 5000 800] + SymbolLine[2000 5000 2500 4500 800] + SymbolLine[2500 3500 2500 4500 800] + SymbolLine[2000 3000 2500 3500 800] + SymbolLine[500 3000 2000 3000 800] + SymbolLine[500 1000 500 5000 800] + SymbolLine[0 1000 2000 1000 800] + SymbolLine[2000 1000 2500 1500 800] + SymbolLine[2500 1500 2500 2500 800] + SymbolLine[2000 3000 2500 2500 800] +) +Symbol['C' 1200] +( + SymbolLine[500 5000 2000 5000 800] + SymbolLine[0 4500 500 5000 800] + SymbolLine[0 1500 0 4500 800] + SymbolLine[0 1500 500 1000 800] + SymbolLine[500 1000 2000 1000 800] +) +Symbol['D' 1200] +( + SymbolLine[500 1000 500 5000 800] + SymbolLine[2000 1000 2500 1500 800] + SymbolLine[2500 1500 2500 4500 800] + SymbolLine[2000 5000 2500 4500 800] + SymbolLine[0 5000 2000 5000 800] + SymbolLine[0 1000 2000 1000 800] +) +Symbol['E' 1200] +( + SymbolLine[0 3000 1500 3000 800] + SymbolLine[0 5000 2000 5000 800] + SymbolLine[0 1000 0 5000 800] + SymbolLine[0 1000 2000 1000 800] +) +Symbol['F' 1200] +( + SymbolLine[0 1000 0 5000 800] + SymbolLine[0 1000 2000 1000 800] + SymbolLine[0 3000 1500 3000 800] +) +Symbol['G' 1200] +( + SymbolLine[2000 1000 2500 1500 800] + SymbolLine[500 1000 2000 1000 800] + SymbolLine[0 1500 500 1000 800] + SymbolLine[0 1500 0 4500 800] + SymbolLine[0 4500 500 5000 800] + SymbolLine[500 5000 2000 5000 800] + SymbolLine[2000 5000 2500 4500 800] + SymbolLine[2500 3500 2500 4500 800] + SymbolLine[2000 3000 2500 3500 800] + SymbolLine[1000 3000 2000 3000 800] +) +Symbol['H' 1200] +( + SymbolLine[0 1000 0 5000 800] + SymbolLine[2500 1000 2500 5000 800] + SymbolLine[0 3000 2500 3000 800] +) +Symbol['I' 1200] +( + SymbolLine[0 1000 1000 1000 800] + SymbolLine[500 1000 500 5000 800] + SymbolLine[0 5000 1000 5000 800] +) +Symbol['J' 1200] +( + SymbolLine[0 1000 1500 1000 800] + SymbolLine[1500 1000 1500 4500 800] + SymbolLine[1000 5000 1500 4500 800] + SymbolLine[500 5000 1000 5000 800] + SymbolLine[0 4500 500 5000 800] +) +Symbol['K' 1200] +( + SymbolLine[0 1000 0 5000 800] + SymbolLine[0 3000 2000 1000 800] + SymbolLine[0 3000 2000 5000 800] +) +Symbol['L' 1200] +( + SymbolLine[0 1000 0 5000 800] + SymbolLine[0 5000 2000 5000 800] +) +Symbol['M' 1200] +( + SymbolLine[0 1000 0 5000 800] + SymbolLine[0 1000 1500 2500 800] + SymbolLine[1500 2500 3000 1000 800] + SymbolLine[3000 1000 3000 5000 800] +) +Symbol['N' 1200] +( + SymbolLine[0 1000 0 5000 800] + SymbolLine[0 1000 0 1500 800] + SymbolLine[0 1500 2500 4000 800] + SymbolLine[2500 1000 2500 5000 800] +) +Symbol['O' 1200] +( + SymbolLine[0 1500 0 4500 800] + SymbolLine[0 1500 500 1000 800] + SymbolLine[500 1000 1500 1000 800] + SymbolLine[1500 1000 2000 1500 800] + SymbolLine[2000 1500 2000 4500 800] + SymbolLine[1500 5000 2000 4500 800] + SymbolLine[500 5000 1500 5000 800] + SymbolLine[0 4500 500 5000 800] +) +Symbol['P' 1200] +( + SymbolLine[500 1000 500 5000 800] + SymbolLine[0 1000 2000 1000 800] + SymbolLine[2000 1000 2500 1500 800] + SymbolLine[2500 1500 2500 2500 800] + SymbolLine[2000 3000 2500 2500 800] + SymbolLine[500 3000 2000 3000 800] +) +Symbol['Q' 1200] +( + SymbolLine[0 1500 0 4500 800] + SymbolLine[0 1500 500 1000 800] + SymbolLine[500 1000 1500 1000 800] + SymbolLine[1500 1000 2000 1500 800] + SymbolLine[2000 1500 2000 4500 800] + SymbolLine[1500 5000 2000 4500 800] + SymbolLine[500 5000 1500 5000 800] + SymbolLine[0 4500 500 5000 800] + SymbolLine[1000 4000 2000 5000 800] +) +Symbol['R' 1200] +( + SymbolLine[0 1000 2000 1000 800] + SymbolLine[2000 1000 2500 1500 800] + SymbolLine[2500 1500 2500 2500 800] + SymbolLine[2000 3000 2500 2500 800] + SymbolLine[500 3000 2000 3000 800] + SymbolLine[500 1000 500 5000 800] + SymbolLine[500 3000 2500 5000 800] +) +Symbol['S' 1200] +( + SymbolLine[2000 1000 2500 1500 800] + SymbolLine[500 1000 2000 1000 800] + SymbolLine[0 1500 500 1000 800] + SymbolLine[0 1500 0 2500 800] + SymbolLine[0 2500 500 3000 800] + SymbolLine[500 3000 2000 3000 800] + SymbolLine[2000 3000 2500 3500 800] + SymbolLine[2500 3500 2500 4500 800] + SymbolLine[2000 5000 2500 4500 800] + SymbolLine[500 5000 2000 5000 800] + SymbolLine[0 4500 500 5000 800] +) +Symbol['T' 1200] +( + SymbolLine[0 1000 2000 1000 800] + SymbolLine[1000 1000 1000 5000 800] +) +Symbol['U' 1200] +( + SymbolLine[0 1000 0 4500 800] + SymbolLine[0 4500 500 5000 800] + SymbolLine[500 5000 1500 5000 800] + SymbolLine[1500 5000 2000 4500 800] + SymbolLine[2000 1000 2000 4500 800] +) +Symbol['V' 1200] +( + SymbolLine[0 1000 0 4000 800] + SymbolLine[0 4000 1000 5000 800] + SymbolLine[1000 5000 2000 4000 800] + SymbolLine[2000 1000 2000 4000 800] +) +Symbol['W' 1200] +( + SymbolLine[0 1000 0 5000 800] + SymbolLine[0 5000 1500 3500 800] + SymbolLine[1500 3500 3000 5000 800] + SymbolLine[3000 1000 3000 5000 800] +) +Symbol['X' 1200] +( + SymbolLine[0 1000 0 1500 800] + SymbolLine[0 1500 2500 4000 800] + SymbolLine[2500 4000 2500 5000 800] + SymbolLine[0 4000 0 5000 800] + SymbolLine[0 4000 2500 1500 800] + SymbolLine[2500 1000 2500 1500 800] +) +Symbol['Y' 1200] +( + SymbolLine[0 1000 0 1500 800] + SymbolLine[0 1500 1000 2500 800] + SymbolLine[1000 2500 2000 1500 800] + SymbolLine[2000 1000 2000 1500 800] + SymbolLine[1000 2500 1000 5000 800] +) +Symbol['Z' 1200] +( + SymbolLine[0 1000 2500 1000 800] + SymbolLine[2500 1000 2500 1500 800] + SymbolLine[0 4000 2500 1500 800] + SymbolLine[0 4000 0 5000 800] + SymbolLine[0 5000 2500 5000 800] +) +Symbol['[' 1200] +( + SymbolLine[0 1000 500 1000 800] + SymbolLine[0 1000 0 5000 800] + SymbolLine[0 5000 500 5000 800] +) +Symbol['\' 1200] +( + SymbolLine[0 1500 3000 4500 800] +) +Symbol[']' 1200] +( + SymbolLine[0 1000 500 1000 800] + SymbolLine[500 1000 500 5000 800] + SymbolLine[0 5000 500 5000 800] +) +Symbol['^' 1200] +( + SymbolLine[0 1500 500 1000 800] + SymbolLine[500 1000 1000 1500 800] +) +Symbol['_' 1200] +( + SymbolLine[0 5000 2000 5000 800] +) +Symbol['a' 1200] +( + SymbolLine[1500 3000 2000 3500 800] + SymbolLine[500 3000 1500 3000 800] + SymbolLine[0 3500 500 3000 800] + SymbolLine[0 3500 0 4500 800] + SymbolLine[0 4500 500 5000 800] + SymbolLine[2000 3000 2000 4500 800] + SymbolLine[2000 4500 2500 5000 800] + SymbolLine[500 5000 1500 5000 800] + SymbolLine[1500 5000 2000 4500 800] +) +Symbol['b' 1200] +( + SymbolLine[0 1000 0 5000 800] + SymbolLine[0 4500 500 5000 800] + SymbolLine[500 5000 1500 5000 800] + SymbolLine[1500 5000 2000 4500 800] + SymbolLine[2000 3500 2000 4500 800] + SymbolLine[1500 3000 2000 3500 800] + SymbolLine[500 3000 1500 3000 800] + SymbolLine[0 3500 500 3000 800] +) +Symbol['c' 1200] +( + SymbolLine[500 3000 2000 3000 800] + SymbolLine[0 3500 500 3000 800] + SymbolLine[0 3500 0 4500 800] + SymbolLine[0 4500 500 5000 800] + SymbolLine[500 5000 2000 5000 800] +) +Symbol['d' 1200] +( + SymbolLine[2000 1000 2000 5000 800] + SymbolLine[1500 5000 2000 4500 800] + SymbolLine[500 5000 1500 5000 800] + SymbolLine[0 4500 500 5000 800] + SymbolLine[0 3500 0 4500 800] + SymbolLine[0 3500 500 3000 800] + SymbolLine[500 3000 1500 3000 800] + SymbolLine[1500 3000 2000 3500 800] +) +Symbol['e' 1200] +( + SymbolLine[500 5000 2000 5000 800] + SymbolLine[0 4500 500 5000 800] + SymbolLine[0 3500 0 4500 800] + SymbolLine[0 3500 500 3000 800] + SymbolLine[500 3000 1500 3000 800] + SymbolLine[1500 3000 2000 3500 800] + SymbolLine[0 4000 2000 4000 800] + SymbolLine[2000 4000 2000 3500 800] +) +Symbol['f' 1000] +( + SymbolLine[500 1500 500 5000 800] + SymbolLine[500 1500 1000 1000 800] + SymbolLine[1000 1000 1500 1000 800] + SymbolLine[0 3000 1000 3000 800] +) +Symbol['g' 1200] +( + SymbolLine[1500 3000 2000 3500 800] + SymbolLine[500 3000 1500 3000 800] + SymbolLine[0 3500 500 3000 800] + SymbolLine[0 3500 0 4500 800] + SymbolLine[0 4500 500 5000 800] + SymbolLine[500 5000 1500 5000 800] + SymbolLine[1500 5000 2000 4500 800] + SymbolLine[0 6000 500 6500 800] + SymbolLine[500 6500 1500 6500 800] + SymbolLine[1500 6500 2000 6000 800] + SymbolLine[2000 3000 2000 6000 800] +) +Symbol['h' 1200] +( + SymbolLine[0 1000 0 5000 800] + SymbolLine[0 3500 500 3000 800] + SymbolLine[500 3000 1500 3000 800] + SymbolLine[1500 3000 2000 3500 800] + SymbolLine[2000 3500 2000 5000 800] +) +Symbol['i' 1000] +( + SymbolLine[0 2000 0 2500 800] + SymbolLine[0 3500 0 5000 800] +) +Symbol['j' 1000] +( + SymbolLine[500 2000 500 2500 800] + SymbolLine[500 3500 500 6000 800] + SymbolLine[0 6500 500 6000 800] +) +Symbol['k' 1200] +( + SymbolLine[0 1000 0 5000 800] + SymbolLine[0 3500 1500 5000 800] + SymbolLine[0 3500 1000 2500 800] +) +Symbol['l' 1000] +( + SymbolLine[0 1000 0 4500 800] + SymbolLine[0 4500 500 5000 800] +) +Symbol['m' 1200] +( + SymbolLine[500 3500 500 5000 800] + SymbolLine[500 3500 1000 3000 800] + SymbolLine[1000 3000 1500 3000 800] + SymbolLine[1500 3000 2000 3500 800] + SymbolLine[2000 3500 2000 5000 800] + SymbolLine[2000 3500 2500 3000 800] + SymbolLine[2500 3000 3000 3000 800] + SymbolLine[3000 3000 3500 3500 800] + SymbolLine[3500 3500 3500 5000 800] + SymbolLine[0 3000 500 3500 800] +) +Symbol['n' 1200] +( + SymbolLine[500 3500 500 5000 800] + SymbolLine[500 3500 1000 3000 800] + SymbolLine[1000 3000 1500 3000 800] + SymbolLine[1500 3000 2000 3500 800] + SymbolLine[2000 3500 2000 5000 800] + SymbolLine[0 3000 500 3500 800] +) +Symbol['o' 1200] +( + SymbolLine[0 3500 0 4500 800] + SymbolLine[0 3500 500 3000 800] + SymbolLine[500 3000 1500 3000 800] + SymbolLine[1500 3000 2000 3500 800] + SymbolLine[2000 3500 2000 4500 800] + SymbolLine[1500 5000 2000 4500 800] + SymbolLine[500 5000 1500 5000 800] + SymbolLine[0 4500 500 5000 800] +) +Symbol['p' 1200] +( + SymbolLine[500 3500 500 6500 800] + SymbolLine[0 3000 500 3500 800] + SymbolLine[500 3500 1000 3000 800] + SymbolLine[1000 3000 2000 3000 800] + SymbolLine[2000 3000 2500 3500 800] + SymbolLine[2500 3500 2500 4500 800] + SymbolLine[2000 5000 2500 4500 800] + SymbolLine[1000 5000 2000 5000 800] + SymbolLine[500 4500 1000 5000 800] +) +Symbol['q' 1200] +( + SymbolLine[2000 3500 2000 6500 800] + SymbolLine[1500 3000 2000 3500 800] + SymbolLine[500 3000 1500 3000 800] + SymbolLine[0 3500 500 3000 800] + SymbolLine[0 3500 0 4500 800] + SymbolLine[0 4500 500 5000 800] + SymbolLine[500 5000 1500 5000 800] + SymbolLine[1500 5000 2000 4500 800] +) +Symbol['r' 1200] +( + SymbolLine[500 3500 500 5000 800] + SymbolLine[500 3500 1000 3000 800] + SymbolLine[1000 3000 2000 3000 800] + SymbolLine[0 3000 500 3500 800] +) +Symbol['s' 1200] +( + SymbolLine[500 5000 2000 5000 800] + SymbolLine[2000 5000 2500 4500 800] + SymbolLine[2000 4000 2500 4500 800] + SymbolLine[500 4000 2000 4000 800] + SymbolLine[0 3500 500 4000 800] + SymbolLine[0 3500 500 3000 800] + SymbolLine[500 3000 2000 3000 800] + SymbolLine[2000 3000 2500 3500 800] + SymbolLine[0 4500 500 5000 800] +) +Symbol['t' 1000] +( + SymbolLine[500 1000 500 4500 800] + SymbolLine[500 4500 1000 5000 800] + SymbolLine[0 2500 1000 2500 800] +) +Symbol['u' 1200] +( + SymbolLine[0 3000 0 4500 800] + SymbolLine[0 4500 500 5000 800] + SymbolLine[500 5000 1500 5000 800] + SymbolLine[1500 5000 2000 4500 800] + SymbolLine[2000 3000 2000 4500 800] +) +Symbol['v' 1200] +( + SymbolLine[0 3000 0 4000 800] + SymbolLine[0 4000 1000 5000 800] + SymbolLine[1000 5000 2000 4000 800] + SymbolLine[2000 3000 2000 4000 800] +) +Symbol['w' 1200] +( + SymbolLine[0 3000 0 4500 800] + SymbolLine[0 4500 500 5000 800] + SymbolLine[500 5000 1000 5000 800] + SymbolLine[1000 5000 1500 4500 800] + SymbolLine[1500 3000 1500 4500 800] + SymbolLine[1500 4500 2000 5000 800] + SymbolLine[2000 5000 2500 5000 800] + SymbolLine[2500 5000 3000 4500 800] + SymbolLine[3000 3000 3000 4500 800] +) +Symbol['x' 1200] +( + SymbolLine[0 3000 2000 5000 800] + SymbolLine[0 5000 2000 3000 800] +) +Symbol['y' 1200] +( + SymbolLine[0 3000 0 4500 800] + SymbolLine[0 4500 500 5000 800] + SymbolLine[2000 3000 2000 6000 800] + SymbolLine[1500 6500 2000 6000 800] + SymbolLine[500 6500 1500 6500 800] + SymbolLine[0 6000 500 6500 800] + SymbolLine[500 5000 1500 5000 800] + SymbolLine[1500 5000 2000 4500 800] +) +Symbol['z' 1200] +( + SymbolLine[0 3000 2000 3000 800] + SymbolLine[0 5000 2000 3000 800] + SymbolLine[0 5000 2000 5000 800] +) +Symbol['{' 1200] +( + SymbolLine[500 1500 1000 1000 800] + SymbolLine[500 1500 500 2500 800] + SymbolLine[0 3000 500 2500 800] + SymbolLine[0 3000 500 3500 800] + SymbolLine[500 3500 500 4500 800] + SymbolLine[500 4500 1000 5000 800] +) +Symbol['|' 1200] +( + SymbolLine[0 1000 0 5000 800] +) +Symbol['}' 1200] +( + SymbolLine[0 1000 500 1500 800] + SymbolLine[500 1500 500 2500 800] + SymbolLine[500 2500 1000 3000 800] + SymbolLine[500 3500 1000 3000 800] + SymbolLine[500 3500 500 4500 800] + SymbolLine[0 5000 500 4500 800] +) +Symbol['~' 1200] +( + SymbolLine[0 3500 500 3000 800] + SymbolLine[500 3000 1000 3000 800] + SymbolLine[1000 3000 1500 3500 800] + SymbolLine[1500 3500 2000 3500 800] + SymbolLine[2000 3500 2500 3000 800] +) +Layer(1 "component") +( + Line[106000 144000 262000 144000 1000 2000 "clearline"] + Line[106000 144000 106000 84000 1000 2000 "clearline"] + Line[106000 84000 262000 84000 1000 2000 "clearline"] + Line[262000 84000 262000 144000 1000 2000 "clearline"] +) +Layer(2 "solder") +( + Line[256000 90000 256000 138000 1000 2000 "clearline"] + Line[112000 138000 112000 90000 1000 2000 "clearline"] + Line[112000 90000 256000 90000 1000 2000 "clearline"] + Line[112000 138000 256000 138000 1000 2000 "clearline"] +) +Layer(3 "GND") +( +) +Layer(4 "power") +( +) +Layer(5 "signal1") +( + Polygon("clearpoly") + ( + [118000 96000] [250000 96000] [250000 132000] [118000 132000] + ) +) +Layer(6 "signal2") +( +) +Layer(7 "unused") +( +) +Layer(8 "unused") +( +) +Layer(9 "silk") +( +) +Layer(10 "silk") +( + Line[118000 96000 118000 132000 500 2000 "clearline"] + Line[118000 132000 154000 132000 500 2000 "clearline"] + Line[154000 132000 154000 96000 500 2000 "clearline"] + Line[154000 96000 118000 96000 500 2000 "clearline"] + Line[136000 152000 136000 120000 500 1200 "clearline"] + Line[136000 120000 132000 124000 500 1200 "clearline"] + Line[132000 114000 140000 114000 1010 1200 "clearline"] + Line[140000 124000 136000 120000 500 1200 "clearline"] + Line[98000 90000 94000 94000 500 1200 "clearline"] + Line[214000 76000 250000 76000 500 1200 "clearline"] + Line[98000 138000 98000 90000 500 1200 "clearline"] + Line[270000 96000 266000 100000 500 1200 "clearline"] + Line[136000 110000 136000 118000 1010 1200 "clearline"] + Line[214000 96000 214000 132000 500 2000 "clearline"] + Line[252000 132000 276000 132000 500 1200 "clearline"] + Line[218000 72000 214000 76000 500 1200 "clearline"] + Line[214000 76000 218000 80000 500 1200 "clearline"] + Line[270000 96000 274000 100000 500 1200 "clearline"] + Line[252000 96000 276000 96000 500 1200 "clearline"] + Line[214000 132000 250000 132000 500 2000 "clearline"] + Line[136000 90000 140000 86000 500 1200 "clearline"] + Line[232000 150000 232000 120000 500 1200 "clearline"] + Line[236000 124000 232000 120000 500 1200 "clearline"] + Line[232000 110000 232000 118000 1010 1200 "clearline"] + Line[232000 120000 228000 124000 500 1200 "clearline"] + Line[204000 114000 212000 114000 500 1200 "clearline"] + Line[212000 114000 208000 110000 500 1200 "clearline"] + Line[212000 114000 208000 118000 500 1200 "clearline"] + Line[214000 94000 214000 70000 500 1200 "clearline"] + Line[250000 94000 250000 70000 500 1200 "clearline"] + Line[204000 114000 204000 48000 500 1200 "clearline"] + Line[136000 90000 132000 86000 500 1200 "clearline"] + Line[270000 132000 266000 128000 500 1200 "clearline"] + Line[250000 132000 250000 96000 500 2000 "clearline"] + Line[250000 96000 214000 96000 500 2000 "clearline"] + Line[160000 90000 112000 90000 500 2000 "clearline"] + Line[160000 138000 112000 138000 500 2000 "clearline"] + Line[112000 90000 112000 138000 500 2000 "clearline"] + Line[160000 90000 160000 138000 500 2000 "clearline"] + Line[136000 74000 136000 90000 500 1200 "clearline"] + Line[270000 132000 274000 128000 500 1200 "clearline"] + Line[228000 114000 236000 114000 1010 1200 "clearline"] + Line[270000 132000 270000 96000 500 1200 "clearline"] + Line[250000 76000 246000 72000 500 1200 "clearline"] + Line[250000 76000 246000 80000 500 1200 "clearline"] + Line[92000 90000 110000 90000 500 1200 "clearline"] + Line[186000 96000 190000 92000 500 1200 "clearline"] + Line[186000 96000 182000 92000 500 1200 "clearline"] + Line[186000 64000 186000 96000 500 1200 "clearline"] + Line[98000 138000 94000 134000 500 1200 "clearline"] + Line[98000 138000 102000 134000 500 1200 "clearline"] + Line[98000 90000 102000 94000 500 1200 "clearline"] + Line[92000 138000 110000 138000 500 1200 "clearline"] + Line[214000 138000 210000 142000 500 1200 "clearline"] + Line[218000 142000 214000 138000 500 1200 "clearline"] + Line[214000 168000 214000 138000 500 1200 "clearline"] + Line[192000 144000 188000 148000 500 1200 "clearline"] + Line[196000 148000 192000 144000 500 1200 "clearline"] + Line[192000 184000 192000 144000 500 1200 "clearline"] + Line[168000 144000 164000 148000 500 1200 "clearline"] + Line[172000 148000 168000 144000 500 1200 "clearline"] + Line[168000 176000 168000 144000 500 1200 "clearline"] + Line[168000 132000 172000 128000 500 1200 "clearline"] + Line[168000 132000 164000 128000 500 1200 "clearline"] + Line[168000 120000 168000 132000 500 1200 "clearline"] + Text[106000 152000 0 200 "(X0,Y0)" ""] + Text[224000 150000 0 200 "(X1,Y1)" ""] + Text[226000 72000 1 200 "SIZE" ""] + Text[41000 106000 0 200 "Mask Size" ""] + Text[56000 62000 0 200 "Mask Aperture" ""] + Text[130000 52000 0 200 "Pad Shape" ""] + Text[272000 110000 0 200 "SIZE" ""] + Text[132000 36000 0 200 "Pad Aperture" ""] + Text[210000 168000 0 200 "Soldermask Opening" ""] + Text[188000 186000 0 200 "Clearance to non-connecting" ""] + Text[188000 198000 0 200 "polygons" ""] + Text[102000 176000 0 200 "Clearance/2" ""] +) Index: trunk/doc-orig/pad.pdf =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: trunk/doc-orig/pad.pdf =================================================================== --- trunk/doc-orig/pad.pdf (nonexistent) +++ trunk/doc-orig/pad.pdf (revision 1037) Property changes on: trunk/doc-orig/pad.pdf ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: trunk/doc-orig/pad.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: trunk/doc-orig/pad.png =================================================================== --- trunk/doc-orig/pad.png (nonexistent) +++ trunk/doc-orig/pad.png (revision 1037) Property changes on: trunk/doc-orig/pad.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: trunk/doc-orig/pcb.1 =================================================================== --- trunk/doc-orig/pcb.1 (nonexistent) +++ trunk/doc-orig/pcb.1 (revision 1037) @@ -0,0 +1,45 @@ +.\" +.\" This program is free software; you can redistribute it and/or modify +.\" it under the terms of the GNU General Public License as published by +.\" the Free Software Foundation; either version 2 of the License, or +.\" (at your option) any later version. +.\" +.\" This program is distributed in the hope that it will be useful, +.\" but WITHOUT ANY WARRANTY; without even the implied warranty of +.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +.\" GNU General Public License for more details. +.\" +.\" You should have received a copy of the GNU General Public License +.\" along with this program; if not, write to the Free Software +.\" Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +.\" + +.TH PCB 1 + +.SH NAME +.B pcb +\- Printed circuit board layout tool + +.SH SYNOPSIS +.B pcb [options] [pcb file] + +.SH DESCRIPTION +The +.B pcb +program is a tool for the layout of printed circuit boards. +The complete manual for +.B pcb +is provided in a GNU texinfo format as well as HTML and PDF. +The texinfo version of the manual is typically viewed with the +.B info +program or alternatively with +.B emacs +or a graphical info viewer such as +.B tkinfo. +The PDF and HTML documentation is typically installed as +/usr/local/share/pcb/pcb.html and /usr/local/share/pcb/pcb.pdf. +The prefix "/usr/local" may vary at your site. + + + + Index: trunk/doc-orig/pcb.css =================================================================== --- trunk/doc-orig/pcb.css (nonexistent) +++ trunk/doc-orig/pcb.css (revision 1037) @@ -0,0 +1,11 @@ +table.cartouche { + border-collapse: collapse; + border: 1px solid #800000; + width: 100%; +} +table.cartouche td { + padding: 4px; +} +pre.format { + font-family: monospace; +} Index: trunk/doc-orig/pcb.html =================================================================== --- trunk/doc-orig/pcb.html (nonexistent) +++ trunk/doc-orig/pcb.html (revision 1037) @@ -0,0 +1,13072 @@ + + +Pcb + + + + + + + + + +

Pcb

+
+ +


+Next: , +Up: (dir) + +
+ +

Pcb

+ +

This document is a manual for Pcb, the open source, interactive printed circuit +board layout system. + +

+ + +
+ +


+Next: , +Previous: Top, +Up: Top + +
+ +

Copying

+ +

Copyright © 1994,1995,1996,1997 Thomas Nau + +

Copyright © 1998,1999,2000,2001,2002 harry eaton + +

This program is free software; you may redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +

This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANT-ABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + + +

+ +


+Next: , +Previous: Copying, +Up: Top + +
+ +

History

+ +

Pcb is a handy tool for laying out printed circuit +boards. + +

Pcb was first written by Thomas Nau for an Atari ST in 1990 and +ported to UNIX and X11 in 1994. +It was not intended as a professional layout system, +but as a tool which supports people who do some +home-developing of hardware. + +

The second release 1.2 included menus for the first time. This made +Pcb easier to use and thus a more important tool. + +

Release 1.3 introduced undo for highly-destructive commands, +more straightforward action handling and scalable fonts. Layer-groups +were introduced to group signal-layers together. + +

Release 1.4 provided support for add-on device drivers. +Two layers (the solder and the component side) +were added to support SMD elements. The handling of libraries +was also improved in 1.4.1. Support for additional devices like +GERBER plotters started in 1.4.4. The undo feature was expanded +and the redo-feature added in 1.4.5. + +

harry eaton took over pcb development beginning with Release 1.5, +although he contributed some code beginning with Release 1.4.3 + +

Release 1.5 provides support for rats-nest generation from simple net +lists. It also allows for automatic clearances around pins that pierce +a polygon. A variety of other enhancements including a Gerber RS-274X +driver and NC drill file generation have also been added. + +

Release 1.6 provides automatic screen updates of changed regions. +This should eliminate most of the need for the redraw ((R key). +Also some changes to what order items under the cursor are selected +were made for better consistency - it is no longer possible to +accidentally move a line or line point that is completely obscured +by a polygon laying over top of it. Larger objects on the upper +most layers can be selected ahead of smaller objects on lower layers. +These changes make operations more intuitive. A new mode of line +creation was added that creates two line on 45 degree angles +with a single click. The actual outline of the prospective line(s) are +now shown during line creation. An arc creation mode was added. +Drawn arcs are quarter circles and can be useful for high frequency +controlled impedance lines. (You can have eighth circle arc if the +source is compiled with -DARC45, but be aware that the ends of such +arcs can never intersect a grid point). Two new flags for pins and +vias were created - one indicates that the pin or via is purely a +drill hole and has no copper annulus. You can only toggle this flag +for vias - for elements, it must be an integral part of the element +definition. The other flag controls whether the pad will be round +or octagonal. There is also now a feature for converting the contents +of a buffer into an element. + +

Release 1.6.1 added the ability to make groups of action commands bound to +a single X11 event to be undone by a single undo. Also a simple design rule +checker was added - it checks for minimum spacing and overlap rules. Plus +many fixes for bugs introduced with the many changes of 1.6 + +

Release 1.7 added support for routing tracks through polygons without touching +them. It also added support for unplated drill files, and drawing directly +on the silk layer. A Netlist window for easily working with netlist was also added. + +

Release 2.0 adds an auto-router, a new simpler library mechanism, much improved +support for graphically creating (and editing) elements, viewable solder-mask +layers (and editing), snap to pins and pads, netlist entry by drawing rats, element +files (and libraries) that can contain whole sub-layouts, metric grids, improved +user interface, a GNU autoconf/automake based build system, and a host +of other improvements. + +

Special thanks goes to: +

     Thomas Nau (who started the project and wrote the early versions).
+     C. Scott Ananian (who wrote the auto-router code).
+     Bernhard Daeubler (Bernhard.Daeubler@physik.uni-ulm.de)
+     Harald Daeubler (Harald.Daeubler@physik.uni-ulm.de)
+     DJ Delorie (djdelorie@users.sourceforge.net)
+     Larry Doolittle (ldoolitt@recycle.lbl.gov)
+     Dan McMahill (danmc@users.sourceforge.net)
+     Roland Merk (merk@faw.uni-ulm.de)
+     Erland Unruh (Erland.Unruh@malmo.trab.se)
+     Albert John FitzPatrick III (ajf_nylorac@acm.org)
+     Boerge Strand (borges@ifi.uio.no)
+     Andre M. Hedrick (hedrick@Astro.Dyer.Vanderbilt.Edu)
+
+

who provided all sorts of help including porting Pcb to +several operating systems and platforms, bug fixes, library enhancement, +user interface suggestions and more. In addition to these people, +many others donated time for bug-fixing and +other important work. Some of them can be identified in the source code +files. Thanks to all of them. If you feel left out of this list, I +apologize; please send me an e-mail and I'll try to correct the omission. + + +

+ +


+Next: , +Previous: History, +Up: Top + +
+ +

1 Overview

+ +

+Pcb is an open source printed circuit board editor. +Pcb includes many professional features such as: +

    +
  • Up to 16 copper layer designs by default. By changing a compile time setting, this +can be set as high as needed. +
  • RS-274X (Gerber) output +
  • NC Drill output +
  • Centroid (X-Y) data output +
  • Postscript and Encapsulated Postscript output +
  • Autorouter +
  • Trace optimizer +
  • Rats nest +
  • Design Rule Checker (DRC) +
  • Connectivity verification +
  • Pcb is Free Software +
  • Can interoperate with free schematic capture tools such as gEDA and + xcircuit +
  • Runs under Linux, NetBSD, Solaris, and other similar operating +systems. +
  • Windows version is available +
+ + +
+ +


+Next: , +Previous: Overview, +Up: Top + +
+ +

2 Introduction

+ +

+Each layout consists of several, mostly independent, objects. This chapter +gives an overview of the object types and their relationship to each other. +For a complete description of how to use Pcb, refer to +Getting Started. +The layout is generated on-screen on a grid that can have its origin +at any desired location. +The X coordinate increases to the right, Y increases down to the bottom. +All distances and sizes in Pcb are measured in mils +(0.001 inch). One unit on the coordinate display is one mil in +distance on the board. +The grid may be set on a metric pitch, but is only correct to within +the nearest +/- 0.01 mil because Pcb stores all dimensions as +integer multiples of 1/100 of a mil or 0.00001 inch. + +

The sections in this chapter are sorted by the +order of appearance of the objects within a layout file. + +

+ +
+ +


+Next: , +Up: Intro + +
+ +

2.1 Symbols

+ +

+The top object is the layout itself. It uses a set of symbols +that resides at the first logical level. Each symbol is uniquely identified +by a seven bit ASCII code. All layout objects share the same set of +symbols. These symbols are used to form text objects on the silkscreen +and copper layers. Undefined symbols are drawn as filled rectangles. + +

Every font file is preprocessed by a user-defined command when it is loaded. +For details see ‘fontCommand’, Resources. + +

+ +


+Next: , +Previous: Symbol Objects, +Up: Intro + +
+ +

2.2 Vias

+ +

+Vias provide through-hole connectivity across all layers. +While vias look a lot like element pins, don't use vias +for adding elements to the layout, even if that seems +easier than creating a new element. The default solder-mask +will cover over vias, so you won't be able to solder to them. +Of course, you can change this so that vias also have +solder-mask cut-outs, but it is not the default. +Vias are also useful for defining arbitrary drill points such as +those used for mounting a board. Vias used in this way have +a special flag set so that they have no annular copper ring, +and also appear in the unplated drill file. Ctrl-H key over +a via switches it between being a pure-mounting hole and a regular via. +You can assign a name to a via, which is useful during the creation +of new element definitions. +Each via exists on all copper layers. (i.e. +blind and buried vias are not supported) + +

+ +


+Next: , +Previous: Via Objects, +Up: Intro + +
+ +

2.3 Elements

+ +

+Elements represent the components on a board. +Elements are loaded from ASCII coded files in a +similar manner to the layout file itself, or from the +library selector window. +An element is composed of lines and arcs on the silk-screen +layer (used to define the package outline), pins +(or pads for SMD) and three labels that define the +description, the element's layout-name (which also +appears on the silk-screen layer) and its value. You +can choose which of the names are displayed on the screen +with the Screen menu; however, the silk screen in +the printout will always show the layout-name. +Element pins are contained on the first logical level +and so reside on all layers, but the pads of surface-mount +elements reside on only the component or solder +layers. An element can have a mixture of pins, pads +(on one or both sides), and mounting holes. + +

A mark is used to position the element with +respect to the cross hair during pasting. +The mark will lie on a grid point when the element +is positioned. The mark is drawn as a small diamond +shape, but is only visible when both the silk +and pins/pads layers are visible. +All parts of an element are treated as one unit, except for +the name. +It is not possible to delete a single pin or move +only part of an element on the layout. +You can resize separate pieces of an element, +but doing so is usually a bad idea. You can move/rotate +the element name independently of the element it belongs +to. When you move an element name, a line is draw from +the cursor to the element mark so it is easy to tell +which element the name belongs to. + +

Each pin and pad has two string identifiers, one is the +"name" which is a functional description of the pin +(e.g. "clock in") and the other is the "number" of the +pin which is used to identify it in a netlist. The "number" +is usually an integer, but it can be any string. You +can edit the "name" of each pin of an element, but the +"number" is embedded in the element definition and is +determined when the new element is first created. +Pads are similar to lines on a layer but they must be oriented +either vertically or horizontally. +Pads can have either rounded or square ends. Pins +can be round, square, or octagonal. + +

Elements are supported by several special layers: silk, pins/pads and +far-side. The silk layer shows the package outline and +also holds legend text and element names. The pins/pads layer is used to toggle +whether the element's pins and pads are displayed. The far-side layer controls visibility +of objects (silkscreen and pads) that are on the far (i.e. not currently viewed) side +of the board. + +

The “oldlib” style of footprint libraries distributed with +Pcb rely upon the M4 macro processor. M4 is typically +installed under the name m4 on most unix-like operating +systems. It is recommended that you use the GNU version of M4 to +avoid limitations found in some vendor implementations. See the m4 +man page on your system for more information. +Every element file is preprocessed by a user-defined command when the file is read. +For details see ‘elementCommand’, Resources. m4, the default +value of ‘elementCommand’, allows you to create libraries for +package definitions that are shared by all elements. +The old element libraries distributed with Pcb expect m4 or an +equivalent to be the elementCommand. The new library scheme simply has +each element stored in a self-contained file, so there is no need to learn +m4 to add to the libraries. + +

Pcb can create a list of +all connections from one (or all) elements to the others or a list of +unconnected pins. +It can also verify the layout connections against a netlist file. +The element's ‘layout-name’ is the name used to identify the element +in a netlist file (see Netlist File). + +

The old libraries, or very old (pre-1.6) layout files may have +incorrect pin numbering since there was no concept of pin numbers +when they were created. Pcb uses the order of appearance of +the pin definitions in the layout or library file if it uses the +old format, but there is no guarantee that it will be correct for +these old objects. + +

Be aware that a few of the old library parts may still be incorrectly +implemented regarding pin-numbering. All of the DIL (Dual- +Inline-Pins) parts are correct and most of the others are too, +but you should verify the pin numbering +of any non-DIL part before using an old library part. +(use the ‘generate object report’ in the Info menu +to see what Pcb thinks a pin's number is) +All of the old +library names begin with a ~, so you can easily identify them. +The old libraries also may contain other sorts of errors, +including incorrect pin spacing, silkscreen overlapping solder areas, etc. +Check carefully any element in the old library before using it! +As the new library grows, the old library will be pared down to +at least remove all of the elements with errors, but this will +take time. + +

You can make your own element definitions graphically now. +Simply draw vias for the pins, lines on the solder and/or +component layers for surface-mount pads (they must be either horizontal +or vertical), +and lines and arcs on the silkscreen layer for the silkscreen +outline. You should name (N key) each via and copper line with the pin number. +Once you are happy with the geometry, select everything that is to become part of +the element, then choose ‘convert selection to element’ from the Select menu. +Afterwords you can make pin (or pad) one +square if you like, and give the element its various names. You can also give +the pins and pads their functional names. Note that the +element mark corresponds to the position you click after choosing the +conversion from the menu, so decide where the mark goes and make +sure it falls on a grid point before you request the conversion. +If the vias/lines are not named, then the pin numbering will correspond to the +order in which they were placed. + +

When you create a new element, remember that silkscreen lines +should never overlap the copper part of the +pins or pads, as this can interfere with soldering. The silkscreen +should identify the maximum extent of the element package so it +is easy to see how close elements can be placed together. + +

If you want to make an element similar to an existing one, you can +break an element into constituent pieces from the Buffer menu. +Paste the pieces to the layout, make the necessary changes, then +convert it back into an element. If the pin numbers haven't changed, +there is no need to name each via/line as they are pre-named when +the element was broken apart. When you create a new element, you +can save it to a file in order to have easy access to it the next +time you run Pcb. + +

+ +


+Next: , +Previous: Element Objects, +Up: Intro + +
+ +

2.4 Layers

+ +

+Every layout consists of several layers that can be used independently +or treated as a group. +Layer groups can be used to logically separate (and color-code) +different traces (e.g. power and signal); however, all +layers within a group reside on the same physical +copper layer of a board, so using different layers within the same +group won't provide electrical separation where they touch or overlap. +For details, see ‘layerGroups’, Resources. +Each layer is drawn in a color defined in the resource file +and identified by a name that you can change (for details +see ‘layerColor’, Resources.) +Layers are really just containers for line, arc, polygon, and text objects. The +component and solder layers contain SMD elements as well, but the +file structure doesn't reflect that fact directly. + +

Each layer group +represents a physical layer on the printed circuit board. If you want to make +a four layer board, you'll need to have at least four layer groups. +Connections between layer groups are established only through element pins and vias. +The relationship between a specific layer and the board itself is configurable from +the ‘Edit layer groups’ option in the Settings menu. +The layer groups corresponding to the physical layers: component-side +and solder-side are always defined and you must map at least one +logical layer to each, even if you plan to make a single-sided board. +You are not obligated to put tracks on either of them. +Surface mount elements always reside on either the component-side or the +solder-side layer group. When you paste an element from the buffer, +it will go onto whichever side of the board you are viewing. +You can swap which side of the board you are viewing by pressing +the Tab key, or by selecting ‘view solder side’ from the +Screen menu. +The layer groups just have a name or number associated with them - where +they are sandwiched in the board is left for you to tell the +manufacturer. + +

The silkscreen layer is special because there are actually two silkscreen +layers, one for the top (component) and one for the bottom (solder) side +of the board. Which silk layer you draw on is determined by the side of the +board that you are viewing. If you are viewing the component side, then +drawing on the silk layer draws to the component-side silk layer. + +

The netlist layer is another special layer. It shows rat's-nest lines +(i.e. guides that show how the netlist expects the element to interconnect). +If you make this the active layer, you can use the Line tool to add +entries into the netlist, or to delete connections from the netlist +window. Except for these two purposes, you should not +make the netlist layer the active layer. Usually there is no need to +do this because a separate schematic package should be used to create the +netlist. Pcb can automatically draw all of the rats from +the netlist. In some cases you may want to make a small change without +going to the trouble of modifying the schematic, which is why this +facility is provided. + +

+ +


+Next: , +Previous: Layer Objects, +Up: Intro + +
+ +

2.5 Lines

+ +

+Lines are used to draw tracks on the pc board. +When in the line mode, each Btn1 +press establishes one end of a line. +Once the second point is defined, the line is drawn +and a new line started where the first one ended. +You can abandon the new starting point in favor +of another by pressing Ctrl-Btn1, or +Btn3, but don't use Btn2. +The undo function (U key or ‘undo last operation’ +from the Edit menu) will take you back +point by point if you use it while in the line mode. + +

New lines can be restricted to 45 degree angles if desired. You can toggle this +restriction on and off while creating lines by pressing the period key. +If the 45 degree restriction is turned on, then the / (forward slash) key +can be used to cycle through three different modes of 45 degree line creation. +One mode just creates a single line forced to the nearest 45 degree vector. The next +mode creates two lines from the start to end points such that the first line leaves the +start point at a 90 degree vector, and the second line enters the end point on a 45 +degree vector. The last mode creates two lines such that the first line leaves the +start point on a 45 degree vector and arrives at the end point on a 90 degree vector. +You can temporarily swap between the last two modes by holding the Shift key down. + +

It is simple to edit a line object by breaking it into pieces (insert point mode), +moving an end point or the whole line (Arrow tool), +or changing the layer it resides on (M key moves the line under the pointer +to the active layer). +In the case when two line segments meet at exactly the same +point you can delete the intermediate point, otherwise the delete tool removes an entire line. +Feel free to experiment +since Pcb will allow you to undo and redo anything that materially affects your work. +If you switch active layers in the midst of placing lines a via will automatically be +placed, when necessary, in order to continue the connection. + +

If you draw a line inside a polygon, it will either plow through the +polygon creating a clearance, or touch the polygon. This behavior is +selectable in the Settings menu for new lines. To change the +behavior of an existing line, hit the J key with the cross hair +over the line. You can increase the size of the clearance by 2 mils on +each edge with the with the +K key. Shift-K will decrease the clearance by 2 mils. +The increment may be changed from 2 mils through the application +resource file. +The clearance can be also increased, decreased and set +by the ChangeClearSize action. + +

Lines do not need to intersect the center of a pin, pad, via, or other +line for Pcb to understand that they make electrical connection. +If the connection is too tenuous, running the design rule checker will report +that the connection may break if the line width shrinks slightly. + +

+ +


+Next: , +Previous: Line Objects, +Up: Intro + +
+ +

2.6 Arcs

+ +

+Pcb can handle arcs of any angular extent, but when you +create an arc with the Arc tool, it will +be a quarter circle (this means they always bend a right angle). Arcs are very similar +to lines otherwise. They are created on the active layer and have the same thickness +that new lines will have. The various clicks for creating lines work pretty much the +same way for creating arcs. +In order to make the arc curve in the desired direction, drag the mouse along +the tangent line from the starting position towards the end position. If the grid is +too coarse, it may not be possible to distinguish whether you've moved over then up, +or up then over, so if you can't seem to make the arc go in the direction you want, try pressing +the Shift key while drawing the arc. Decreasing the grid spacing may also help. +Alternatively you can draw the wrong arc, then +rotate and move it where you want. Like the Line tool, after an arc is drawn a new +starting point is established at the end point. + +

Whenever a starting point is established +by either the Line or Arc tools it will be retained if you switch directly between the +tools (e.g. F2 key for Lines, F8 key for Arcs. Arcs can either touch or +clear polygons just like lines do. Of course connection +searches, undo and all the other features you'd expect work with arcs too. + +

+ +


+Next: , +Previous: Arc Objects, +Up: Intro + +
+ +

2.7 Polygons

+ +

+Sometimes it's useful to fill large areas with solid copper. +The way to do this is with polygons. +Polygons can be created in either the polygon mode or the rectangle mode. +In the polygon mode, you'll have to define each corner of the polygon +with a mouse click (Btn1). When the last point is clicked +exactly on top of the starting point, the polygon is finished. +Since this can be hard to do, the Shift-P key will enter the +final point for you, closing the polygon. +If the 45 degree angle restriction is turned on +and you try to close the polygon when it is not possible, you'll get a +warning instead. If you haven't finished entering a polygon, but want to +undo one (or more) of the points that you've already defined, use the +undo command (U key). + +

With the rectangle tool, defining +the two diagonally opposite corners is sufficient, but of course the resulting +polygon is a rectangle. +Like lines, a polygon can by edited by deleting, inserting and moving the points +that define it. Pins and vias always clear through polygons without +touching them when first positioned. You must add a thermal with the thermal +tool in order to connect pins and vias to polygons. Thermals can be added and removed by +clicking Btn1 with the thermal tool over the pin or via. +The thermal tool always +places a thermal to polygons on the active layer, so if the tool doesn't +seem to work, it's probably because the polygon you want to touch is not +on the active layer. You can change the style of thermal used or make +a solid connection by holding down Shift while clicking +Btn1 with the thermal tool over the pin or via. + +

Pcb is capable of handling complex polygons, but +using a number of simpler ones improves performance of the connection tracing code. +You also must be careful not to create polygons that touch or overlap themselves. +The fabricated board may not look the way you expect if you violate this +principle. It is always ok to have two (or more) polygons touch or overlap +each other, but not for points within the same polygon to do so. + +

The great advantage to this new polygon behavior is that simple or complex ground +and/or power planes can be easily made with polygons and seen on the screen. +If you don't want this auto-clearance behavior, or you load a layout created by +an early version of Pcb, the old behavior +(shorts to all piercing pins and vias) is available. A ‘ChangeSize’ +operation (S key) toggles a polygon between the new and old polygon/pin +behavior. + +

+ +


+Next: , +Previous: Polygon Objects, +Up: Intro + +
+ +

2.8 Text

+ +

+Text objects should be used to label a layout or to put additional +information on the board. Elements have their ‘layout-name’ labels on the +silk-screen layer. If you are making a board without a silkscreen, +you can use copper text to label the elements, but you have to do +this manually. + +

Text is always horizontal when first created, but the +rotate mode can align it along 0, 90, 180 and 270 degree angles. +Text on the far side of the board will automatically appear mirror-imaged. + +

Warning: TEXT OBJECTS ON A COPPER LAYER CREATE COPPER LINES BUT THEY ARE NOT SCANNED FOR +CONNECTIONS OR TESTED FOR CREATING SHORTS VS. THE NETLIST. NEITHER ARE TEXT OBJECTS TESTED AGAINST ANY DESIGN RULES. + +

+ +


+Previous: Text Objects, +Up: Intro + +
+ +

2.9 Nets

+ +

+Layout files also contain the netlist that describes how the elements +are supposed to be interconnected. This list of connections can be +loaded from a netlist file (see Netlist File), or +entered by drawing rat-lines as described +previously. Each net has a name and routing style associated with it. +The net contains a list of all element layout-name names and +pin numbers that should +be connected to the net. Loading a netlist file will replace all +existing nets with the ones from the file. +The Netlist window provides an easy way to +browse through the net list. You can display the rat's-nest by selecting +‘optimize rats-nest’ from the Connects menu. If you move or rotate elements, +the rat's-nest will automatically follow the movements, but they won't +necessarily show the shortest paths until you optimize them again. + + +

+ +


+Next: , +Previous: Intro, +Up: Top + +
+ +

3 Getting Started

+ +

+The goal of this chapter is to give you enough information to learn how +Pcb works and how to develop your layouts to make the best use of Pcb's +features. All event translations (i.e. the buttons and keys you +press) refer to the default application resource file shipped with Pcb. +There is probably no need to change this unless your window +manager uses some of the button events itself; however, if you want +to customize the behavior of Pcb then changing the resource file +is usually the best way to do it. + +

Get yourself a printout of this chapter and User Commands, if you +haven't already done so, and follow the examples. + +

Start Pcb (the actual command will use all lower-case letters) +without any additional options. +If you get the error message: + +

         can't find default font-symbol-file 'default_font'
+
+

then the font searchpath or filename in the application resource +file is wrong. Be sure that your m4 program supports search paths. +If not, get GNU m4. +For other messages, see problems. +Another quick-start is provided by pcbtest.sh in the src +directory. If some features don't seem to work, try running pcbtest.sh, +if that works, then Pcb hasn't been installed properly. + +

+ +
+ +


+Next: , +Up: Getting Started + +
+ +

3.1 The Application Window

+ +

The main window consists of five areas: +the menu at the top, the layer control in the upper left, the tool buttons +located below the layer controls, the Layout area to the right of these, and the +status line at the bottom of the window. + +

+ + + +

3.1.1 Menus

+ +

+The menus are located at the top of the Layout area. Most, but not all, +of their functions are also available from the keyboard. Similarly, some +functions are only achievable through the keyboard or command entry. +Some menu entries such as ‘center layout’ in the Screen menu require a certain cross hair position. +In this case a prompt message will popup at the bottom of the screen +with wording similar to the following: +

     move pointer to the appropriate screen position and press a button
+
+

Any mouse button will do the job, whereas any key except the arrow (cursor) keys +will cancel the operation. If it seems like the menu hasn't done what you +expected, check to see if it is waiting for the position click. For details see Actions. + +

Pressing Btn3 in the Layout area also pops up a menu with many of the most common operations (except +when you're in the midst of drawing a line or arc). When +a choice in the Btn3 popup menu needs a cross hair position, it uses the position +where the cross hair was when Btn3 was pressed. For example, to get detailed +information on an object, place the cross hair over the object, press Btn3, then +choose ‘object report’. If you pop up the Btn3 menu but don't want to +take any of the actions, click on one of the headers in the menu. + + + +

File
This menu offers a choice of loading, saving and printing data, saving +connection information to a file or quitting the application. Most +of the entries in the File menu are self explanatory. +Selecting +‘print layout’ pops up a printer control dialog. +A selection of several device drivers is available from the printer control +dialog. Presently PostScript, encapsulated PostScript, +and GerberX are supported. The GerberX driver produces +all of the files necessary to have the board professionally manufactured. +The connection saving features in the File menu produce outputs in an +arcane format that is not too useful. They do not produce netlist +files. + +


Edit
The Edit menu provides the usual cut, copy, paste +which work on selections. To learn how to +create complex selections, see Arrow Tool. +The Edit menu also +provides access to Undo and Redo of the last operation. These +can also be accomplished with the U key and Shift-R +key. Finally, the Edit menu allows you to change the names +of: the layout, the active layer, or text objects on the layout. + +


Screen
The Screen menu supports most functions related to +the whole Layout area. There are various entries to change the grid to some popular +values, the zoom factor, and which kind of element name is displayed. +You can also re-align the grid origin and turn on and off the display +of the grid. +Before changing the grid alignment, I recommend that you zoom in as close as +possible so that you're sure the grid +points appear exactly where you want them. + +

The Screen menu also allows you to turn on and off the +visibility of the solder-mask layer. When the solder-mask layer +is made visible it obscures most of the layout, so only turn +this on when you really want to know what the solder-mask will +look like. The solder-mask that you see belongs to the +side of the board you are viewing, which can be changed with +the ‘view solder side’ option, also found in the Screen menu. +When the solder-mask is displayed, the pin and pad clearance adjustments +(see Line Objects) alter the size of mask cut-outs. + +


Sizes
The Sizes menu allows you to select a group of line thickness, via diameter, via drill +size, and clearance (keepaway) (collectively called a "routing style") to be copied to the "active" sizes. +You can also change the names given to the routing styles and adjust their values from +this menu. The "active" sizes are also adjustable from this menu. +The "active" sizes are shown in the status-line and control the initial size of new vias, +drilling holes, lines, clearances, text-objects and also the maximum dimensions of the +board layout. + +


Settings
The Settings menu controls several operating configuration +parameters. The ‘edit layer groups’ entry brings up a dialog +that allows you to change the way layers are grouped. Layer grouping +is described in Layer Objects. The ‘all-direction lines’ +entry controls +the clipping of lines to 45-degree angles. You can also control +whether moving individual objects causes the attached lines to +"rubber band" with the move or not from the Settings menu. Another +entry controls whether the starting clip angle for the two-line +mode (see Line Objects) alternates every other line. You can +also control whether element names must be unique from the Settings +menu. When unique element names are enforced, copying a new element +will automatically create a unique ‘layout-name’ name for it +provided that the name originally ended with a digit (e.g. +U7 or R6). The Settings menu allows you to control +whether the cross hair will snap to pins and pads even when they +are off-grid. Finally you can control whether new lines and +arcs touch or clear intersecting polygons from this menu. + +


Select
This menu covers most of the operations that work with selected objects. +You may either (un)select all visible objects on a layout or only the ones +which have been found by the last connection scan see + + +. +You can delete all selected objects from this menu. +Other entries in the Select menu change the sizes of selected objects. +Note that a select action only affects those objects that are +selected and have their visibility turned on in the Layer Control +panel. The Select menu also provides a means for selecting objects +by name using unix Regular Expressions. + +


Buffer
From the Buffer menu you may select one out of five +buffers to use, rotate or clear its contents or save the buffer contents +to a file. You can also use the ‘break buffer element to pieces’ entry +to de-compose an element into pieces for editing. +Note: only objects with visibility turned on are pasted to the layout. If +you have something in a buffer, then change which side of the board you +are viewing, the contents of the buffer will automatically be mirrored +for pasting on the side you are viewing. It is not necessary to clear +a buffer before cutting or copying something into it - it will automatically +be cleared first. + +


Connects
The entries available through the Connects menu allow you to find +connections from objects and to manipulate these. +You can also optimize or erase rat's nests from this menu. Finally, +the ‘auto-route all rats’ entry allows you to auto-route +all connections show by the rat's nest. The auto-router will use +any visible copper layer for routing, so turn off the visibility of any +layers you don't want it to use. The auto-router will automatically +understand and avoid any traces that are already on the board, but +it is not restricted to the grid. Finally, +the auto-router routes using the active sizes (except for nets that +have a route-style defined). Pcb always knows which tracks +were routed by the auto-router, and you can selectively remove them +without fear of changing tracks that you have manually routed +with the ‘rip-up all auto-routed tracks’ entry in the Connects +menu. The ‘design rule checker’ entry runs a check for copper +areas that are too close together, or connections that touch too +tenuously for reliable production. The DRC stops when the first +problem is encountered so after fixing a problem be sure to +run it again until no problems are found. +
          Warning: COPPER TEXT IS IGNORED BY THE DRC CHECKER.
+
+


Info
The ‘generate object report’ entry from the Info menu +provides a way to get detailed information +about an object, such as its coordinates, dimensions, etc. +You can also get a report summarizing all of the drills +used on the board with ‘generate drill summary’. Lastly, +you can get a list of all pins, pads and vias that were +found during a connection search. + +


Window
The Window menu provides a way to bring each of Pcb's +windows to the front. The Library window is used to +bring elements from the library into the paste-buffer. The +Message Log window holds the various messages that +Pcb sends to the user. The Netlist window shows +the list of connections desired. + +
+ +

Now that you're familiar with the various menus, it's time +to try some things out. From the File menu choose +‘load layout’, navigate to the tutorial folder, then +load the file ‘tut1.pcb’. + +

+ + +


+Next: , +Previous: Menu, +Up: Application Window + +
+ +

3.1.2 The Status-line and Input-field

+ +

+The status-line is located at the bottom edge of the main window. +During normal operation the status information is visible there. +When a selected menu operation requires an additional button click, the +status-line is replaced by a message telling you to position the cursor +and click. +When a text input is required, the status-line is replaced by the +Input-field which has a prompt for typing the input. + +

The status-line shows, from left to right, the side of the board that you +are viewing (Tab key changes this), the current grid values, +if new lines are restricted to 45 degrees, +which type of 45 degree line mode is active, whether rubberband move and +rotate mode is on (R), and the zoom factor. +This information is followed by the active line-width, via-size +and drilling hole, keepaway spacing, and text scaling. Last is the active buffer number and the +name of the layout. An asterisk appearing at the far left indicates that the +layout has been modified since the last save. +Note that the name of the layout is not the same +thing as the filename of the layout. +Change the grid factor to 1.0 mm from the Screen menu. Observe how the +status line shows the new grid setting. Except for the case of the metric +grid, all dimensions in the status line are in units of 0.001 inch (1 mil). + +

The input-field pops up (temporarily replacing the status-line) whenever user input +is required. Two keys are bound to the input field: the Escape key +aborts the input, Return accepts it. Let's change the name of a component +on the board to see how the input-field works. Position the cross hair over +R5, and press the N key. The input field pops-up showing the name +for you to edit. Go ahead and change the name, then hit return. Notice the name +of the element changed. Now undo the change by pressing the U key. You can +position the cross hair over the name, or the element before pressing the +N key. + +

Now select ‘realign grid’ from the Screen menu. Notice that the +status line has been replaced with an instruction to position the cursor +where you want a grid point to fall. In this case, since the cross hair +can only fall on a grid point, you must move the tip of the finger cursor +to the place where you want a grid point to appear. Do not worry that +the cross hair is not coincident with the cursor. Click Btn1 at +your chosen location. See how the grid has shifted, and the status line +has returned. + +

The present cross hair position is displayed in the upper right corner of the window. +Normally this position is an absolute coordinate, but you can anchor a marker at +the cross hair location by pressing Ctrl-M (try it now) and then the +display will read both the absolute cross hair position as well as the difference +between it and the marker. The numbers enclosed in < > are the X and Y distances +between the cross hair and the mark, while the numbers enclosed in parenthesis +are the distance and angle from the mark to the cross hair. The values displayed +are always in units of 0.001 inch (1 mil). +Pressing Ctrl-M again turns the marker off. + +

+ +

3.1.3 The Layer Controls

+ +

+The layer control panel, located in the upper left, is used to turn on +and off the display of layer groups and to select the active drawing layer. +If a layer hasn't been named, the label "(unknown)" is used as the default. +If this happens, it probably means the application resources are not installed +properly. + +

The upper buttons are used to switch layers on and off. Click +<Btn1> on one or more of them. Each click toggles the setting. +If you turn off the currently active layer, another one that is visible +will become active. If there are no others visible, you will not be +able to turn off the active layer. +When the layers are grouped, clicking on these buttons will toggle +the visibility of all layers in the same group. This is a good idea because +layers in the same group reside on the same physical layer of +the actual board. Notice that this example has 2 groups each having +3 layers, plus two other layers named ‘unused’. +Use the ‘Edit layer groups’ option in the ‘Settings’ menu to +change the layer groupings in the lesstif GUI or the ‘Preferences’ +dialog from the ‘File’ menu in the GTK+ GUI. Note that changing the +groupings can radically alter the connectivity on the board. +Grouping layers is only useful for helping you to color-code +signals in your layout. Note that grouping layers actually reduces the number +of different physical layers available for your board, so to make an eight +layer board, you cannot group any layers. + +

The far side button turns on and off the visibility of elements +(including SMD pads) on the opposite (to the side you're viewing) +board side, as well as silk screening on that side. It does not +hide the x-ray view of the other copper layers, these must be turned off +separately if desired. Use the tab key to view the entire board from the other +side. To see a view of what the back side of the board will actually look like, +make the solder layer the active layer then press tab until the status +line says "solder" on the right, then turn off the visibility of all layers +except solder, pins/pads, vias, and silk. Now turn them all back on. + +

The lowest button, named active, is used to change the active +drawing layer. Pressing <Btn1> on it pops up a menu to select which +layer should be active. +Each entry is labeled with the layer's name and drawn in its color. +The active layer is automatically made visible. The active layer is +always drawn on top of the other layers, so the ordering of layers +on the screen does not generally reflect the ordering of the manufactured +board. Only the solder, component, silkscreen, and solder-mask layers +are always drawn in their physical order. Bringing the active layer +to the top makes it easier to select and change objects on the active layer. +Try changing the active layer's name to ABC by selecting +‘edit name of active layer’ from the ‘Edit’ menu. +Changing the active layer can also be done by pressing keys +1..MAX_LAYER. + +

Turn off the visibility of the component layer. +Now make the component layer the active layer. Notice that it +automatically became visible. Try setting a few +other layers as the active layer. You should also experiment +with turning on and off each of the layers to see what happens. + +

The netlist layer is a special layer for adding connections to +the netlist by drawing rat lines. This is not the recommended +way to add to the netlist, but occasionally may be convenient. +To learn how to use the netlist layer see Net Objects. + +

+ +


+Next: , +Previous: Layer Controls, +Up: Application Window + +
+ +

3.1.4 The Tool Selectors

+ +

+The tool selector buttons reside below the layer controls. +They are used to select which layout tool to use in the drawing +area. Each tool performs its function when Btn1 is pressed. +Every tool gives the cursor a unique shape that identifies it. +The tool selector buttons themselves are icons that illustrate their function. +Each layout tool can also be selected from the keyboard: +

         F1 key       Via tool
+         F2 key       Line tool
+         F3 key       Arc tool
+         F4 key       Text tool
+         F5 key       Rectangle tool
+         F6 key       Polygon tool
+         F7 key       Buffer tool
+         F8 key       Delete tool
+         F9 key       Rotate tool
+         Insert key   Insert-point tool
+         F10 key      Thermal tool
+         F11 key      Arrow tool
+         F12 key      Lock tool
+
+

Some of the tools are very simple, such as the Via tool. Clicking +Btn1 with the Via tool creates a via at the cross hair position. +The via will have the diameter and drill sizes that are active, +as shown in the status line. +The Buffer tool is similar. With it, <Btn1> copies +the contents of the active buffer to the layout, but only +those parts that reside on visible layers are copied. +The Rotate tool allows you to rotate elements, arcs, and text objects +90 degrees counter-clockwise with each click. Holding the Shift +key down changes the Rotate tool to clockwise operation. +Anything including groups of objects +can be rotated inside a buffer using the rotate buffer menu option. + +

The Line tool is explained in detail in Line Objects. Go read +that section if you haven't already. +Activate the Line tool. Set the active layer to the solder layer. +Try drawing some lines. Use the U key to undo some of the +lines you just created. Zoom in a bit closer with the Z key. +Draw some more lines. Be sure to draw some separate lines by starting +a new anchor point with Ctrl-Btn1. Change the ‘crosshair snaps to pin/pads’ +behavior in the Settings menu. Now draw a line. Notice that +the new line points must now always be on a grid point. It might not +be able to reach some pins or pads with this setting. Increase the active line thickness +by pressing the L key. Note that the status line updates +to reflect the new active line thickness. Now draw another line. Before completing the +next line, make the component layer active by pressing the 4 key. +Now finish the line. Notice that a via was automatically placed where +you switched layers. Pcb does not do any checks to make sure that +the via could safely be placed there. Neither does it interfere with +your desire to place lines haphazardly. It is up to you to place +things properly when doing manual routing with the Line tool. + +

The Arc tool is explained in detail in Arc Objects. Its +use is very similar to the Line tool. + +

The Rectangle tool, Polygon tool and Thermal tool are explained in detail in +Polygon Objects. Go read that section. +Remember that the Thermal tool will only create and destroy thermals +to polygons on the active layer. Use the Rectangle tool to make a +small copper plane on the component layer. Now place a via in the +middle of the plane. Notice that it does not touch the plane, and +they are not electrically connected. Use the Thermal tool to make +the via connect to the plane. Thermals allow the via or pin to +be heated by a soldering iron without having to heat the entire +plane. If solid connections were made to the plane, it could be +nearly impossible to solder. Shift-click on the via with the Thermal +tool to change the style of thermal used or to make the connection +solid. Click on the via again with the Thermal tool to remove the +connection to the plane. + +

The Insert-point tool is an editing tool that allows you to add +points into lines and polygons. The +Insert-point tool enforces the 45 degree line +rule. You can force only the shorter line segment to 45 +degrees by holding the Shift key down while inserting the point. +Try adding a point into one of the lines you created. Since line +clipping is turned on, you may need to move the cross hair quite far +from the point where you first clicked on the line. Turn off the +line clipping by selecting ‘all-direction lines’ from the +Settings menu (or hit +the Period key). Now you can place an inserted point anywhere. +Try adding a point to the rectangle you made earlier. Start by clicking +somewhere along an edge of the rectangle, then move the pointer to +a new location and click again. + +

The delete-mode deletes the object beneath the cursor with each +Btn1 click. +If you click at an end-point that two lines have in common, it will replace the two lines with a single line +spanning the two remaining points. This can be used to delete an "inserted" +point in a line, restoring the previous line. Now delete one of the original corner +points of the polygon you were just playing with. To do this, place the cross hair over the +corner and click on it with the Delete tool. You could also use the Backspace key +if some other tool is active. Try deleting some of +the lines and intermediate points that you created earlier. Use undo +repeatedly to undo all the changes that you've made. Use redo +a few times to see what happens. Now add a new line. Notice that +you can no longer use redo since the layout has changed since +the last undo happened. The undo/redo tree is always pruned in this +way (i.e. it has a root, but no branches). + +

The Arrow tool is so important, it has its own section: Arrow Tool. +Go read it now. + +

The Lock tool allows you to lock objects on the layout. When an object +is locked, it can't be selected, moved, rotated, or resized. This is +useful for very large objects like ground planes, or board-outlines that +are defined as an element. With such large objects, nearly anywhere you +click with the Arrow tool will be on the large object, so it could be +hard to draw box selections. If you lock an object, the Arrow tool will +behave as if it didn't exist. You cannot unlock an object with undo. +You must click on it again with the Lock tool. If an object is locked, +previous changes to it cannot be undone either. When you lock +an object, a report message about it is popped up and will always tell +you what object it is, and that it is locked if you just locked it. +Other than noticing your inability to manipulate something, the only +way to tell an object is locked is with a report from the Info +menu. Use the Lock tool sparingly. + +

+ +


+Previous: Tool Selectors, +Up: Application Window + +
+ +

3.1.5 Layout Area

+ +

+The layout area is where you see the layout. The cursor shape depends +on the active tool when the pointer is moved into the layout area. +A cross hair follows the mouse pointer with respect to the grid setting. +Select a new grid from the Screen menu. +The new value is updated in the status line. +A different way to change the grid is +Shift<Key>g to decrease or <Key>g to increase +it, but this only works for English (integer mil) grids. +The grid setting is saved along with the data when you save a pcb layout. +For homemade layouts a value around 50 is a good setting. +The cursor can also be moved in the layout area with the cursor (arrow) keys or, for larger +distances, by pressing the Shift modifier together with a cursor key. + +

+ +


+Next: , +Previous: Application Window, +Up: Getting Started + +
+ +

3.2 Log Window

+ +

+This optional window is used to display all kind of messages including +the ones written to stderr by external commands. The main advantage +of using it is +that its contents are saved in a scrolling list until the +program exits. Disabling this feature by setting the resource +useLogWindow to false will generate popup windows to display +messages. The stderr of external commands will appear on Pcbs +stderr which normally is the parent shell. I suggest you iconify +the log window after startup for example by setting *log.iconic to +true in the resource file. If raiseLogWindow is set true, +the window will deiconify and raise itself whenever new messages are to be +displayed. + +

+ +


+Next: , +Previous: Log Window, +Up: Getting Started + +
+ +

3.3 Library Window

+ +

+The library window makes loading elements (or even partial layouts) easy. +Just click the appropriate library from the list on the left. A list +of its elements then appears on the right. Select an element +from the list by clicking on its description. Selecting an element from the +library will also automatically copy the element into +the active buffer, then invoke the Buffer tool so +you can paste it to the layout. Elements in the old library should be +taken with a grain of salt (i.e. check them carefully before +using). The old library names all begin with ~ so you can easily distinguish between +the old and new libraries. All of the elements in the new library +should be thoroughly vetted, so you +can use them with confidence. The new libraries are stored simply +as directories full of element files, so making additions to the +new library is easy since there is no need to learn m4. +For details on the old libraries, +check-out Library File and Library Contents File. For +details on the format of an element file used for the new libraries, +see Element File. + +

+ +


+Next: , +Previous: Library Window, +Up: Getting Started + +
+ +

3.4 Netlist Window

+ +

+The netlist window is very similar to the library window. On the left +is a list of all of the nets, on the right is the list of connections +belonging to the chosen net. The chosen net is highlighted in the +list and also shown on the second line of the window in red. If the +net name has a star to the left of it then it is "disabled". A disabled +net is treated as if it were not in the net list. This is useful, for +example, if you plan to use a ground plane and don't want the ground +net showing up in the rat's nest. You can enable/disable individual +nets by double-clicking the net name. If you want to enable or disable +all nets at once, there are two buttons at the top of the netlist +window for this purpose. + +

The button labeled ‘Sel Net On Layout’ +can be used to select (on the layout) everything that is connected +(or is supposed to be connected) to the net. If you click on a +connection in the connection list, it will select/deselect +the corresponding pin or pad in the layout and also center the layout +window where it is located. If you "Find" (‘lookup connection +to object’ in the Connects menu [also F key]), a pin +or pad it will also choose the net and connection in the netlist window +if it exists in the netlist. + +

If no netlist exists for the layout, then the netlist window does not +appear. You can load a netlist from a file from the File menu. The +format for netlist files is described in Netlist File. + +

+ +


+Next: , +Previous: Netlist Window, +Up: Getting Started + +
+ +

3.5 Drawing and Removing Basic Objects

+ +

+hace begging gutting here, and do a real-world tutorial example. + +

There are several ways of creating new objects: you can draw them yourself, +you can copy an existing object (or selection), or you can load an element from a file or +from the Library window. Each type of object has a particular tool for creating it. + +

The active tool can be selected from the tool selectors in the bottom +left corner or by one of the function keys listed earlier in this chapter. +Each <Btn1> press with the tool tells the application to create +or change the appropriate object or at least take +the first step to do so. Each tools causes the cursor to take +on a unique shape and also causes the corresponding +tool selector button to be highlighted. You can use either cue +to see which tool is active. + +

Insert mode provides the capability of inserting new points into existing +polygons or lines. The 45 degree line clipping is now enforced when selected. +Press and hold the shift key while positioning the new point to only clip +the line segment to the nearer of the two existing points to 45 degrees. +You can also toggle the 45-degree clipping in the middle of a point +insertion by pressing the <Key>. +If the shift key is not depressed and the 45 degree line clipping mode +is on, both new line segments must be on 45 degree angles - greatly +restricting where the new point may be placed. In some cases this can cause +confusion as to whether an insertion has been started since the two new +lines may be forced to lie parallel on top of the original line until the +pointer is moved far from the end points. + +

Removing objects, changing their size or moving them only applies to objects +that are visible when the command is executed. + +

+ +
+ +


+Next: , +Up: Drawing and Removing + +
+ +

3.5.1 Common Drawing and Removing Methods

+ +

+There are several keystrokes and button events referring to an object +without identifying its type. Here's a list of them: + +

<Btn1> creates (or deletes) an object depending on the +current mode. + +

<Key>BackSpace or <Key>Delete removes the visible +object at the cursor location. When more than one object exists at the +location, the order of removal is: via, line, text, polygon and +element. The drawn layer order also affects the search - whatever is +top - most (except elements) is affected before lower items. Basically +all this means that what is removed is probably just what you expect. +If for some reason it isn't, undo and try again. +Only one object is removed for each keystroke. If two or more +of the same type match, the newest one is removed. + +

Use <Key>s and Shift<Key>s to change the size (width) +of lines, arcs, text objects, pins, pads and vias, or to toggle the style +of polygons (whether pins and vias automatically have clearances). + +

<Key>n changes the name of pins, pads, vias, the +string of a text object, or the currently displayed label of an element. + +

<Key>m moves the line, arc, or polygon under the cross hair to the +active layer if it wasn't on that layer already. + +

<Key>u (undo) recovers from an unlimited number of operations +such as creating, removing, moving, copying, selecting etc. It works like +you'd expect even if you're in the midst of creating something. + +

Shift<Key>r restores the last undone operation provided no other +changes have been made since the undo was performed. + +

<Key>tab changes the board side you are viewing. + +

For a complete list of keystrokes and button events see Translations. + +

+ +


+Next: , +Previous: Common, +Up: Drawing and Removing + +
+ +

3.5.2 Lines

+ +

+To draw new lines you have to be in line-mode. Get there either by +selecting it from the Tool palette or by pressing <Key>F2. +Each successive notify event creates a new line. The +adjustment to 45 degree lines is done automatically if it is selected from the +Display menu. You can toggle the 45 degree mode setting by +pressing the <Key>. (That is the period key). When 45 degree enforcement +is turned on there are three distinct modes of line creation: a single +line on the closest 45 degree vector towards the cross hair (but not necessarily +actually ending at the cross hair), two lines created such that the first leaves +the start point on a 90 degree vector and the second arrives at the cross hair +on a 45 degree vector, and finally two lines created such that the first leaves +the start point on a 45 degree vector and the second arrives at the cross hair +on a 90 degree vector. These last two modes always connect all the way from +the start and end points, and all lines have angles in 45 degree multiples. +The <Key>/ cycles through the three modes. The status line shows a +text icon to indicate which of the modes is active and the lines following +the cross hair motion show the outline of the line(s) that will actually be created. +Press <Key>Escape to leave line-mode. + +

<Key>l, Shift<Key>l and the entries in the +Sizes menu change the initial width of new lines. This width is also +displayed in the status line. + +

+ +


+Next: , +Previous: Lines, +Up: Drawing and Removing + +
+ +

3.5.3 Arcs

+ +

+An Arc is drawn with the arc-tool. Get there either by selecting it +from the Tool palette or by pressing <Key>F8. Press Btn1 to +define the starting point for the arc. Drag the mouse towards the desired +end point along the path you want the arc to follow. The outline of the arc that +will be created is shown on the screen as you move the mouse. Arcs are always +forced to be 90 degrees and have symmetrical length and width ( i.e. they are +a quarter circle). The next Btn1 click creates the arc. It will have +the same width as new lines (displayed in the status line) and appear on the +active layer. The arc leaves the starting point towards the cross hair along +the axis whose distance from the cross hair is largest. Normally this means that +if you drag along the path you want the arc to follow, you'll get what you +want. If the grid is set to the arc radius, then the two distances will be +equal and you won't be able to get all of the possible directions. If this +is thwarting your desires, reduce the grid spacing (!Shift<Key>G) and +try again. + +

+ +


+Next: , +Previous: Arcs, +Up: Drawing and Removing + +
+ +

3.5.4 Polygons and Rectangles

+ +

+A polygon is drawn by defining all of its segments as a series of +consecutive line segments. If the first point matches a new one and if +the number of points is greater than two, then the polygon is closed. +Since matching up with the first point may be difficult, you may use +Shift<Key>p to close the polygon. The Shift<Key>p won't +work if clipping to 45 degree lines is selected +and the final segment cannot match this condition. +I suggest you create simple convex polygons in order to avoid a strong +negative impact on the performance of the connection scanning routines. +The rectangle-mode is just an easy way to generate rectangular polygons. +Polygon-mode also is selected by <Key>F6 whereas +rectangle-mode uses <Key>F4. +Pressing a <Btn1> at two locations creates a rectangle by +defining two of its corners. +<Key>Insert brings you to insert-point-mode which lets you +add additional points to an already existing polygon. +Single points may be removed by moving the cross hair to them and selecting +one of the delete actions (remove-mode, BackSpace, or Delete. This only works +if the remaining polygon will still have three or more corners. +Pressing <Key>u or <Key>p while entering a new polygon +brings you back to the previous corner. Removing a point does not +force clipping to 45 degree angles (because it's not generally possible). +Newly created polygons will not connect to pins or vias +that pierce it unless you create a thermal (using the thermal mode) to make +the connection. If the edge of a polygon gets too close to a pin or via that +lies outside of it, a warning will be issued and the pin will be given a +special color. Increasing the distance between them will remove the warning +color. + +

+ +


+Next: , +Previous: Polygons, +Up: Drawing and Removing + +
+ +

3.5.5 Text

+ +

+Pressing <Key>F5 or clicking one of the text selector buttons +changes to text-mode. +Each successive notify event (<Btn1>) +pops up the input line at the bottom and queries for a string. +Enter it and press <Key>Return to confirm or +<Key>Escape to abort. +The text object is created with its upper left corner at the current pointer +location. +The initial scaling is changed by <Key>t and +Shift<Key>t or from the Sizes menu. + +

Now switch to rotate-mode and press +<Btn1> at the text-objects location. Text objects +on the solder side of the layout are automatically mirrored and +flipped so that they are seen correctly when viewing the solder-side. + +

Use <Key>n to edit the string. + +

TEXT OBJECTS ON COPPER LAYERS CREATE COPPER LINES BUT THEY ARE NOT SCANNED FOR +CONNECTIONS. If they are moved to the silkscreen layer, they +no longer create copper. + +

+ +


+Next: , +Previous: Text, +Up: Drawing and Removing + +
+ +

3.5.6 Vias

+ +

+The initial size of new vias may be changed by <Key>v and +Shift<Key>v or by selecting the appropriate entry from the +Sizes menu. Mod1<Key>v and Mod1 Shift<Key>v do +the same for the drilling hole of the via. +The statusline is updated with the new values. +Creating a via is similar to the other objects. Switch to via-mode +by using either the selector button or <Key>F1 then press +<Key>] or <Btn1> to create one. +<Key>n changes the name of a via. If you want to create a mounting +hole for your board, then you can place a via where you want the hole to +be then convert the via into a hole. The conversion is done by pressing +!Ctrl<Key>h with the cross hair over the via. Conceptually it is +still a via, but it has no copper annulus. If you create such a hole in +the middle of two polygons on different layers, it will short the layers. +Theoretically you could arrange for such a hole not to be plated, but a +metal screw inserted in the hole would still risk shorting the layers. +A good rule is to realize that holes in the board really are vias between +the layers and so place them where they won't interfere with connectivity. +You can convert a hole back into a normal via with the same keystroke used +to convert it in the first place. + +

+ +


+Next: , +Previous: Vias, +Up: Drawing and Removing + +
+ +

3.5.7 Elements

+ +

+Some of the functions related to elements only work if both the package +layer and the pin layer are switched on. + +

Now that you're familiar with many of the basic commands, it is +time to put the first element on the layout. +First of all, you have to load data into the paste buffer. +There are four ways to do this: +

        1) load the data from a library
+        2) load the data from a file
+        3) copy data from an already existing element
+        4) convert objects in the buffer into an element
+
+

We don't have any elements on the screen yet nor anything in the +buffer, so we use number one. + +

Select lsi from the menu in the library window press +<Btn1> twice at the appropriate text-line to get +the MC68030 CPU. +The data is loaded and the mode is switched to pastebuffer-mode. +Each notify event now creates one of these beasts. Leave the mode +by selecting a different one or by <Key>Escape which resets +all modes.. +The cross hair is located at the mark position as defined by +the data file. Rotating the buffer contents is done by selecting +the rotate entry of the Buffer menu or by pressing +Shift<Key>F3. The contents of the buffer +are valid until new data is loaded into it either by a cut-to-buffer +operation, copy-to-buffer operation or by loading a new data file. +There are 5 buffers +available (possibly more or less if changed at compile time +with the MAX_BUFFER variable in globalconfig.h). +Switching between them is done by selecting a menu entry or +by Shift<Key>1..MAX_BUFFER. +Each of the two board sides has its own buffers. + +

The release includes all data files for the circuits that are used +by the demo layout. The elements in the LED example are not found in the library, +but you can lift them from the example itself if you want. +If you have problems with the color of the cross hair, change the resource +cross hairColor setting to a different one. + +

Now load a second circuit, the MC68882 FPU for example. +Create the circuit as explained above. You now have two different unnamed +elements. Unnamed means that the layout-name of the element +hasn't been set yet. Selecting description from the Display +menu displays the description string of the two circuits which +are CPU and FPU. The values of the circuits are set to MC68030 and MC68882. +Each of the names of an element may be changed +by <Key>n at the elements location and editing the old name in +the bottom input line. Naming pins and vias is similar to elements. +You can hide the element name so that it won't appear on the board +silkscreen by pressing <key>h with the cursor over the element. +Doing so again un-hides the element name. + +

Entering :le and selecting an element data file is +the second way to load circuits. + +

The third way to create a new element is to copy an existing one. +Please refer to Moving and Copying. + +

The fourth way to create a new element is to convert a buffer's contents +into an element. Here's how it's done: Select the Via-tool from the +Tool pallet. Set the grid spacing to something appropriate for +the element pin spacing. Now create a series of vias where the pins +go. Create them in pin number order. It is often handy to place a reference +point (!Ctrl<Key>m) in the center of the first pin in order to measure +the location of the other pins. Next make a solder-side layer the active +layer from the active-layer popup menu. Now draw the outline of +the element using lines and arcs. When you're done, select everything that +makes up the element with a box selection (<Btn3Down> drag, +<Btn3Up>). Now select "cut selection to buffer" from the Buffer +menu. Position the cursor over the center of pin 1 and press the left +button to load the data into the buffer. +Finally select "convert buffer to element" from the Buffer menu. +You'll only want to create elements this way if they aren't already in the +library. It's also probably a good idea to do this before starting any of +the other aspects of a layout, but it isn't necessary. + +

To display the pinout of a circuit move to it and press Shift<Key>d +or select show pinout from the Objects menu. A new window +pops up and displays the complete pinout of the element. This display can +be difficult to read if the component has been rotated 90 degrees :-( +therefore, the new window will show an un-rotated view so the pin names +are readable. +<Key>d displays the name of one or all pins/pads inside the +Layout area, this is only for display on-screen, it has no effect on any +printing of the layout. + +

You also may want to change a pin's or pad's current size by pressing +<Key>s to increase or Shift<Key>s to decrease it. While +this is possible, it is not recommended since care was probably taken +to define the element structure in the first place. You can also change the thickness +of the element's silkscreen outline with the same keys. You can +change whether a pin or SMD pad is rounded or square with the <Key>q. +SMD pads should usually have squared ends. Finally, you can change whether +the non-square pins are round or octagonal with the !Ctrl<Key>o. + +

SMD elements and silkscreen objects are drawn in the "invisible object" +color if they are located on the opposite side of the board. + +

For information on element connections refer to Connection Lists. + +

+ +


+Previous: Elements, +Up: Drawing and Removing + +
+ +

3.5.8 Pastebuffer

+ +

+The line-stack and element-buffer of former releases have been replaced +by 5 (possibly more or less if changed at compile time +with the MAX_BUFFER variable in globalconfig.h) +multi-purpose buffers that are selected by +Shift<Key>1..MAX_BUFFER. The status line shows which buffer is +the active one. +You may load data from a file or layout into them. +Cut-and-paste works too. +If you followed the instructions earlier in this chapter you should +now have several objects on the screen. Move the cross hair to one of them +and press <Btn3Down> to toggle its selection flag. (If you drag the +mouse while the button is down, a box selection will be attempted instead +of toggling the selection.) The object +is redrawn in a different color. You also may want to try +moving the pointer while holding the third button down and +release it on a different location. This selects all objects inside the +rectangle and unselects everything else. If you want to add a box selection +to an existing selection, drag with Mod1<Btn3Down> instead. +Dragging Shift Mod1<Btn3Down> unselects objects in a box. +Now change to pastebuffer-mode and select some operations from the +Buffer menu. Copying objects to the buffer is available as +Mod1<Key>c while cutting them uses Mod1<Key>x as +shortcut. Both clear the buffer before new data is added. +If you use the menu entries, you have to supply a cross hair position by +pressing a mouse button. The objects are attached to the pastebuffer +relative to that cross hair location. +Element data or PCB data may be merged into an existing layout by loading +the datafiles into the pastebuffer. Both operations are available from +the File menu or as user commands. + +

+ +


+Next: , +Previous: Drawing and Removing, +Up: Getting Started + +
+ +

3.6 Moving and Copying

+ +

+All objects can be moved including element-names, by +<Btn2Down>, dragging the pointer while holding the button down +and releasing it at the new location of the object. If you use +Mod1<Btn2Down> instead, the object is copied. Copying does not work for +element-names of course. You can move all selected objects with +Shift <Btn1>. This uses the Pastebuffer, so +it will remove whatever was previously in the Pastebuffer. +Please refer to Pastebuffer. +If you want to give a small nudge to an object, but you don't think +that the mouse will give you the fine level of control that you want, +you can position the cursor over the object, press <Key>[, +move it with the arrow keys, then press <Key>] when it's at the +desired position. Remember that all movements are forced onto grid coordinates, so +you may want to change the grid spacing first. + +

To move a trace or group of traces to a different layer, first select +the tracks to be moved. It's easiest to do this if you shut off everything +but that layer first (i.e. silk, pins, other layers, etc). +Now set the current layer to be the new layer. +Press Shift-M to move all the selected tracks to the current layer. +See the MoveToCurrentLayer action for more details. + +

+ +


+Next: , +Previous: Moving and Copying, +Up: Getting Started + +
+ +

3.7 Loading and Saving

+ +

+After your first experience with Pcb you will probably want to save +your work. :s name passes the data to an external program which +is responsible for saving it. For details see saveCommand in +Resources. +Saving also is available from the File menu, either with or +without supplying a filename. Pcb reuses the last +filename if you do not pass a new one to the save routine. + +

To load an existing layout either select load layout data from the +File menu or use :l filename. A file select box pops up if you +don't specify a filename. Merging existing layouts into the new one is +supported either by the File menu or by :m filename. + +

Pcb saves a backup of the current layout at a user specified interval. +The backup filename is created by appending a dash, "-", to the .pcb filename. +For example, if you are editing the layout in projects/board.pcb then the +backup file name will be projects/board.pcb-. If the layout is new and +has not been saved yet, then the backup file name is PCB.####.backup where the "####" +will be replaced by the process ID of the currenting running copy of Pcb. +This default backup file name may be changed at compilation time via the +BACKUP_NAME +variable in globalconfig.h). During critical +sections of the program or when data would be lost it is saved as +PCB.%i.save. This file name may be changed at compile time +with the SAVE_NAME variable in globalconfig.h. + +

+ +


+Next: , +Previous: Loading and Saving, +Up: Getting Started + +
+ +

3.8 Printing

+ +

+Pcb now has support for device drivers, +PostScript, encapsulated PostScript, +and Gerber RS-274X drivers are +available so far. The Gerber RS-274X +driver additionally generates a numerical control (NC) drill file for +automated drilling, +a bill of materials file to assist in materials procurement and +inventory control, and a centroid (X-Y) file which includes the +centroid data needed +by automatic assembly (pick and place) machines. + I recommend the use of GhostScript if you +don't have a PostScript printer for handling the PostScript +output. Printing always generates +a complete set of files for a specified driver. +See the page about +the Print() action for additional information about the filenames. +The control panel offers a number of options. Most of them are not available +for Gerber output because it wouldn't make sense, for example, to scale the gerber output +(you'd get an incorrectly made board!) The options are: + + + + +

device
The top menu button selects from the available device drivers. + +


rotate
Rotate layout 90 degrees counter-clockwise before printing (default). + +


mirror
Mirror layout before printing. Use this option depending +on your production line. + +


color
Created colored output. All colors will be converted to black if this option +is inactive. + +


outline
Add a board outline to the output file. The size is determined by the +maximum board size changeable from the sizes menu. The outline appears +on the top and bottom sides of the board, but not on the internal layers. +An outline can be useful for determining where to shear the board from the +panel, but be aware that it creates a copper line. Thus it has the potential +to cause short circuits if you don't leave enough room from your wiring +to the board edge. Use a viewer to see what the output outline looks like +if you want to know what it looks like. + +


alignment
Additional alignment targets are added to the output. The distances between +the board outline is set by the resource alignmentDistance. Alignment +targets should only be used if you know for certain that YOU WILL BE USING +THEM YOURSELF. It is extremely unlikely that you will want to have alignment +targets if you send gerber files to a commercial pcb manufacture to be made. + +


scaling
It's quite useful to enlarge your printout for checking the layout. +Use the scrollbar to adjust the scaling factor to your needs. + +


media
Select the size of the output media from this menu. The user defined size +may be set by the resource media either from one of the well known +paper sizes or by a X11 geometry specification. +This entry is only available if you use X11R5 or later. +For earlier releases the user defined size or, if not available, A4 +is used. +Well known size are: +
          	A3
+          	A4
+          	A5
+          	letter
+          	tabloid
+          	ledger
+          	legal
+          	executive
+
+


offset
Adjust the offsets of the printout by using the panner at the right side +of the dialog box. +This entry is only available if you use X11R5 or later. A zero +offset is used for earlier releases. + +


8.3 filenames
Select this button to generate DOS compatible filenames for the output files. +The command input area will disappear if selected. + +


commandline
Use this line to enter a command (starts with |) or a filename. +A %f is replaced by the current filename. +The default is set by the resource printCommand. + +
+ +

The created file includes some labels which are guaranteed to stay unchanged +

+
PCBMIN
identifies the lowest x and y coordinates in mil. + +
PCBMAX
identifies the highest x and y coordinates in mil. + +
PCBOFFSET
is set to the x and y offset in mil. + +
PCBSCALE
is a floating point value which identifies the scaling factor. + +
PCBSTARTDATA
PCBENDDATA
all layout data is included between these two marks. You may use them with an +awk script to produce several printouts on one piece of paper by +duplicating the code and putting some translate commands in front. +Note, the normal PostScript units are 1/72 inch. +
+ +
+ +


+Next: , +Previous: Printing, +Up: Getting Started + +
+ +

3.9 Exporting a layout

+ +

+To export a layout choose Export layout from the File menu, then +select the desired exporter. + +

+ +
+ +


+Next: , +Up: Exporting + +
+ +

3.9.1 Bill of materials (bom)

+ +

+Produces a bill of materials (BOM) file and a centroid (XY) file. + +

+ +


+Next: , +Previous: bom, +Up: Exporting + +
+ +

3.9.2 G-code (gcode)

+ +

+The gcode exporter can generate RS274/NGC G-CODE files to be used with a CNC mill to +produce pcb's by mechanically removing copper from the perimeter of all elements. + +

The elements are enlarged in order to compensate for the cutting tool size so +that the remaining copper corresponds to the original size; however all +polygons are left unchanged and will end up being a little smaller; this is not a +problem because the electrical connection is done with traces, which are correctly +enlarged. + +

A .cnc file is generated for every copper layer, with the bottom layer mirrored so +that the milling is done right; of course it's not possible to produce directly +multi-layer (more than 2) pcb's with this method, but the cnc files for +intermediate layers are generated anyways. + +

A drill file is also generated, and it contains all drills regardless of the hole +size; the drilling sequence is optimized in order to require the least amount of +movement. + +

The export function generates an intermediate raster image before extracting the contour +of copper elements, and this image is saved as well (in .png format) for inspection. + +

When the spacing between two elements is less than the tool diameter they will merge +and no isolation will be cut between them; the control image should be checked for +this behaviour. + +

Possible workarounds are: increasing spacing, decreasing the tool size, increasing +the intermediate image resolution. + +

To maximize the chance of producing correct pcb's it would be better to increase +the DRC clearance to at least the tool diameter and use traces as thick as possible; +the rule is: use the largest element that will not prevent the isolation cut. + +

The exporter parameters are: + +

+
basename
base name for generated files + +
dpi
intermediate image resolution; affects precision when extracting contours + +
mill depth
should be the copper depth + +
safe z
Z value when moving between polygons + +
tool radius
copper elements are enlarged by this amount + +
drill depth
depth of drills + +
measurement unit
for all parameters above, can be mm,um,inch,mil; g-code is always mm or inch +
+ +

All .cnc files specify Z values as parameters, so that it's easy to +change them without the need to run the exporter again. + +

Operation was verified with the EMC2 g-code interpreter. + +

Following is a sample layout that is converted with default settings: +

Sample Layout
+ +

The control image shows that the spacing is sufficient: +

Control Image
+ +

The final tool path follows the perimeter of all elements: +

Resulting Tool Path
+ +
+ +


+Next: , +Previous: gcode, +Up: Exporting + +
+ +

3.9.3 Gerber (gerber)

+ +

+Produces RS274-X (a.k.a. gerber) photo plot files and Excellon drill files. + +

+ +


+Next: , +Previous: gerber, +Up: Exporting + +
+ +

3.9.4 Nelma (nelma)

+ +

+Numerical analysis package export. + +

+ +


+Next: , +Previous: nelma, +Up: Exporting + +
+ +

3.9.5 Image (png)

+ +

+Produces GIF/JPEG/PNG image files. + +

+ +


+Next: , +Previous: png, +Up: Exporting + +
+ +

3.9.6 Postscript (ps)

+ +

+Export as postscript. +Can be later converted to pdf. + +

+ +


+Previous: ps, +Up: Exporting + +
+ +

3.9.7 Encapsulated Postscript (eps)

+ +

+Export as eps (encapsulated postscript) for inclusion in other documents. +Can be later converted to pdf. + +

+ +


+Previous: Vendor drill mapping, +Up: Getting Started + +
+ +

3.10 Connection Lists

+ +

+After completing parts of your layout you may want to check if all drawn +connections match the ones you have in mind. This is probably best done +in conjunction with a net-list file: see Rats Nest. +The following examples give more rudimentary ways to examine +the connections. +

         1) create at least two elements and name them
+         2) create some connections between their pins
+         3) optionally add some vias and connections to them
+
+

Now select lookup connection from the Connections menu, +move the cursor to a pin or via and press any mouse button. Pcb +will look for all other pins and/or vias connected to the one you have +selected and display the objects in a different color. +Now try some of the reset options available from the same menu. + +

There also is a way to scan all connections of one element. Select +a single element from the menu and press any button at the +element's location. All connections of this element will be saved +to the specified file. +Either the layout name of the element or its canonical name is used to +identify pins depending on the one which is displayed on the screen +(may be changed by Display menu). + +

An automatic scan of all elements is initiated by choosing +all elements. It behaves in a similar fashion to scanning a single +element except the resource resetAfterElement +is used to determine if connections should be reset before a new element is +scanned. Doing so will produce very long lists because the power lines are +rescanned for every element. By default the resource is set to false +for this reason. + +

To scan for unconnected pins select unused pins from the same +menu. + +

+ +


+Next: , +Previous: Exporting, +Up: Getting Started + +
+ +

3.11 Arrow Tool

+ +

+Some commands mentioned earlier in this chapter also are able to operate on all +selected and visible objects. The Arrow tool is used to select/deselect +objects and also to move objects or selections. If you click and release +on an object with the Arrow tool, it will unselect everything else and +select the object. Selected objects change color to reflect that +they are selected. If you Shift click, it will add the object to +(or remove) the object from the existing selection. If you drag with +the mouse button down with the Arrow tool, one of several things could +happen: if you first pressed the button on a selected object, you +will be moving the selection to where you release the button. If you +first pressed the button on an unselected object, you will be moving +that object. If you first pressed the button over empty space, you +will be drawing a box to select everything inside the box. The Shift +key works the same way with box selections as it does with single objects. + +

Moving a single un-selected object is different from moving a selection. +First of all, you can move the end of line, or a point in a polygon this +way which is impossible by moving selections. Secondly, if rubber banding +is turned on, moving a single object will rubber-band the attached lines. +Finally, it is faster to move a single object this way since there is no need +to select it first. + +

You can select any visible object unless it is locked. If you select an +object, then turn off its visibility with the Layer controls, it won't +be moved if you move the remaining visible selection. + +

If you have not configured to use strokes in the Pcb user interface, then +the middle mouse button is automatically bound to the arrow tool, regardless +of the active tool (which is bound to the first mouse button). So using +the middle button any time is just like using the first mouse button +with the Arrow tool active. + +

The entries of the Selection menu are hopefully self-explanatory. +Many of the Action Commands can take various key words that make +them function on all or some of the selected items. + +

+ +


+Next: , +Previous: Arrow Tool, +Up: Getting Started + +
+ +

3.12 Rats Nest

+ +

+If you have a netlist that corresponds to the layout you are working on, you +can use the rats-nest feature to add rat-lines to the layout. +First you will need to load a netlist file (see :rn, +User Commands). +<Key>w adds rat-lines on the active layer using the current +line thickness shown in the status line (usually you'll want them to be thin lines). +Only those rat-lines that fill in missing connectivity (since you have +probably routed some connections already) are added. +If the layout is already completely wired, nothing will be added, and you will +get a message that the wiring is complete. + +

Rat-lines are lines having the special property that they only connect to pins and +pads at their end points. Rat-lines may be drawn differently to other lines +to make them easier to identify since they have special behavior and cannot +remain in a completed layout. +Rat-lines are added in the minimum length straight-line tree pattern +(always ending on pins or pads) that satisfies the missing connectivity in the circuit. +Used in connection with moves and rotates of the elements, they are extremely useful for +deciding where to place elements on the board. The rat-lines will always automatically +rubberband to the elements whether or not the rubberband mode is on. The only way for +you to move them is by moving the parts they connect to. +This is because it is never desirable to have the rat-lines disconnected from +their element pins. Rat-lines will normally criss-cross +all over which gives rise to the name "rats nest" describing a layout connected with +them. If a SMD pad is unreachable on the active layer, a warning will be issued +about it and the rat-line to that pad will not be generated. + +

A common way to use rats nests is to place some +elements on the board, add the rat-lines, and then use a series of moves/rotates of the +elements until the rats nest appears to have minimum tangling. You may want to iterate this step +several times. Don't worry if the layout looks messy - as long as you can get a sense for whether +the criss-crossing is better or worse as you move things, you're fine. +After moving some elements around, you may want to optimize the rats nest <Key>o +so that the lines are drawn between the closest points (this can change once you've moved components). +Adding rat-lines only to selected pads/pins (Shift<Key>w) +is often useful to layout a circuit a little bit at a time. +Sometimes you'll want to delete all the rat-lines (<Key>e) or +selected rat-lines (Shift<Key>e) in order to reduce confusion. +With a little practice you'll be able to achieve a near optimal component placement with +the use of a rats nest. + +

Rat-lines are not only used for assisting your element placement, they can also help +you to route traces on the board. +Use the <Key>m to convert a rat-line under the cursor into +a normal line on the active layer. +Inserting a point into a rat-line will also cause the two new lines to be normal lines +on the board. +Another way that you can use rat-lines is to +use the <Key>f with the cursor over a pad or pin. All of the pins and +pads and rat-lines belonging to that net will be highlighted. This is a helpful way to +distinguish one net from the rest of the rats nest. You can then route those tracks, +turn off the highlighting (Shift<Key>f) and repeat the process. This will work even +if the layer that the rat-lines reside on is made invisible - so only the pins and pads +are highlighted. +Be sure to erase the rat-lines (<Key>e erases them all) once you've +duplicated their connectivity by adding your own lines. +When in doubt, the <Key>o will delete only those +rat-lines that are no longer needed. + +

If connections exist on the board that are not listed in the netlist when +<Key>w is pressed, warning messages are issued and the affected pins and +pads are drawn in a special warnColor until the next Notify() event. +If the entire layout agrees completely with the netlist, a message informs you that +the layout is complete and no rat-lines will be added (since none are needed). +If the layout is complete, but still has rat-lines then you will be warned +that rat-lines remain. If you get no message at all it's probably because some +elements listed in the net list can't be found and where reported in an earlier +message. +There shouldn't be any rat-lines left in a completed layout, only normal lines. + +

The Shift<Key>w is used to add rat-lines to only those missing connections among +the selected pins and pads. This can be used to add rat-lines in an incremental +manner, or to force a rat-line to route between two points that are not the +closest points within the net. Often it is best to add the rats nest in an incremental fashion, laying +out a sub-section of the board before going further. This is easy to accomplish since +new rat-lines are never added where routed connectivity already makes the necessary +connections. + +

+ +


+Next: , +Previous: Rats Nest, +Up: Getting Started + +
+ +

3.13 Design Rule Checking

+ +

+After you've finished laying out a board, you may want to check +to be certain that none of your interconnections are too closely +spaced or too tenuously touching to be reliably fabricated. The design +rule checking (DRC) function does this for you. Use the command ":DRC()" (without +the quotes of course) to invoke the checker. If there are no problem areas, +you'll get a message to that effect. If any problem is encountered, you will get +a message about it and the affected traces will be highlighted. One part of the +tracks of concern will be selected, while the other parts of concern will have the +"FindConnection" highlighting. The screen will automatically be centered in the +middle of the object having the "FindConnection" (Green) highlighting. The middle of +the object is also the coordinates reported to be "near" the problem. The actual trouble +region will be somewhere on the boundary of this object. If the two parts are +from different nets then there is some place where they approach each +other closer than the minimum rule. If the parts are from the same net, then +there is place where they are only barely connected. Find that place and connect +them better. + +

After a DRC error is found and corrected you must run the DRC again because +the search for errors is halted as soon as the first problem is found. Unless you've +been extremely careless there should be no more than a few design rule errors +in your layout. The DRC checker does not check for minimum spacing rules to +copper text, so always be very careful when adding copper text to a layout. +The rules for the DRC are specified in the application resource file. The minimum +spacing value (in mils) is given by the Settings.Bloat value. The default +is 7 mils. The minimum touching overlap (in mils) is given by the +Settings.Shrink value. This value defaults to 5 mils. Check with your +fabrication process people to determine the values that are right for you. + +

If you want to turn off the highlighting produced by the DRC, perform an +undo (assuming no other changes have been made). To restore the highlighting, +use redo. The redo will restore the highlighting quickly without re-running +the DRC checker. + +

+ +


+Next: , +Previous: Design Rule Checking, +Up: Getting Started + +
+ +

3.14 Trace Optimizer

+ +

+PCB includes a flexible trace optimizer. The trace optimizer can be run +after auto routing or hand routing to clean up the traces. + +

+
Auto-Optimize
Performs debumpify, unjaggy, orthopull, vianudge, and viatrim, in that +order, repeating until no further optimizations are performed. + +
Debumpify
Looks for U shaped traces that can be shortened or eliminated. + +
Unjaggy
Looks for corners which could be flipped to eliminate one or more +corners (i.e. jaggy lines become simpler). + +
Vianudge
Looks for vias where all traces leave in the same direction. Tries to +move via in that direction to eliminate one of the traces (and thus a +corner). + +
Viatrim
Looks for traces that go from via to via, where moving that trace to a +different layer eliminates one or both vias. + +
Orthopull
Looks for chains of traces all going in one direction, with more traces +orthogonal on one side than on the other. Moves the chain in that +direction, causing a net reduction in trace length, possibly eliminating +traces and/or corners. + +
SimpleOpts
Removing unneeded vias, replacing two or more trace segments in a row +with a single segment. This is usually performed automatically after +other optimizations. + +
Miter
Replaces 90 degree corners with a pair of 45 degree corners, to reduce +RF losses and trace length. + +
+ +
+ +


+Next: , +Previous: Trace Optimizer, +Up: Getting Started + +
+ +

3.15 Searching for elements

+ +

+To locate text or a specific element or grouping of similar elements +choose ‘Select by name’ from the Select menu, then choose the +appropriate subsection. At the bottom of the screen the prompt +pattern: appears. Enter the text or Regular Expressions +of the text to be found. Found text will be highlighted. + +

+ +


+Next: , +Previous: Searching for elements, +Up: Getting Started + +
+ +

3.16 Measuring distances

+ +

+To measure distances, for example the pin-to-pin pitch of a part to +validate a footprint, place the cursor at the starting +measurement point, then press !Ctrl<Key>m. This marks the +current location with a X. The X mark is now the zero point +origin for the relative cursor position display. The cursor display +shows both absolute position and position relative to the mark as +the mouse is moved away from the mark. If a mark is already present, +the mark is removed and the cursor display stops displaying relative +cursor coordinates. + +

+ +


+Next: , +Previous: Measuring distances, +Up: Getting Started + +
+ +

3.17 Vendor Drill Mapping

+ +

+Pcb includes support for mapping drill holes to a specified set +of sizes used by a particular vendor. Many PCB manufacturers have a +prefered set of drill sizes and charge extra when others are used. +The mapping can be performed on an existing design and can also be +enabled to automatically map drill holes as vias and elements are +instantiated. + +

The first step in using the vendor drill mapping feature is to create +a resource file describing the capabilities of your vendor. The file +format is the resource file format described in Resource Syntax. +A complete example is given below. + +

     # Optional name of the vendor
+     vendor = "Vendor Name"
+     
+     # units for dimensions in this file.
+     # Allowed values:  mil/inch/mm
+     units = mil
+     
+     # drill table
+     drillmap = {
+        # When mapping drill sizes, select the nearest size
+        # or always round up.  Allowed values:  up/nearest
+        round = up
+     
+        # The list of vendor drill sizes.  Units are as specified
+        # above.
+        20
+        28
+        35
+        38
+        42
+        52
+        59.5
+        86
+       125
+       152
+     
+        # optional section for skipping mapping of certain elements
+        # based on reference designator, value, or description
+        # this is useful for critical parts where you may not
+        # want to change the drill size.  Note that the strings
+        # are regular expressions.
+        skips = {
+           {refdes "^J3$"}  # Skip J3.
+           {refdes "J3"}  # Skip anything with J3 as part of the refdes.
+           {refdes "^U[1-3]$" "^X.*"} # Skip U1, U2, U3, and anything starting with X.
+           {value "^JOHNSTECH_.*"} # Skip all Johnstech footprints based on the value of a part.
+           {descr "^AMP_MICTOR_767054_1$"} # Skip based on the description.
+        }
+     }
+     
+     # If specified, this section will change the current DRC
+     # settings for the design.  Units are as specified above.
+     drc = {
+        copper_space = 7
+        copper_width = 7
+        silk_width = 10
+        copper_overlap = 4
+     }
+
+

The vendor resource is loaded using the LoadVendor action. +This is invoked by entering: +

     :LoadVendor(vendorfile)
+
+

from within Pcb. Substitute the file name of your vendor +resource file for ‘vendorfile’. This action will load the vendor +resource and modify all the drill holes in the design as well as the +default via hole size for the various routing styles. + +

Once a vendor drill map has been loaded, new vias and elements will +automatically have their drill hole sizes mapped to the vendor drill +table. Automatic drill mapping may be disabled under the “Settings” +menu. To re-apply an already loaded vendor drill table to a design, +choose “Apply vendor drill mapping” from the “Connects” menu. + +

See Actions for a complete description of the actions associated +with vendor drill mapping. + +

Note that the expressions used in the skips section are regular +expressions. See Regular Expressions for an introduction to +regular expressions. + + +

+ +


+Next: , +Previous: Getting Started, +Up: Top + +
+ +

4 Autorouter

+ +

+Pcb includes an autorouter which can greatly speed up the +layout of a circuit board. The autorouter is a rectangle-expansion +type of autorouter based on +“A Method for Gridless Routing of Printed Circuit Boards” by +A. C. Finch, K. J. Mackenzie, G. J. Balsdon, and G. Symonds in the +1985 Proceedings of the 22nd ACM/IEEE Design Automation Conference. +This reference is available from the ACM Digital Library at +http://www.acm.org/dl for those with institutional or personal +access to it. It's also available from your local engineering +library. The reference paper is not needed for using the autorouter. + +

Before using the autorouter, all elements need to be loaded into the +layout and placed and the connectivity netlist must be loaded. Once +the elements have been placed and the netlist loaded, the following +steps will autoroute your design. + +

    +
  1. Turn off visibility of any layers that you don't want the router +to use. + +
  2. Turn of via visibility if you don't want the router to use any +new vias. + +
  3. Use only plain rectangles for power/ground planes that you want + the router to use [use the rectangle tool!] + +
  4. Make at least one connection from any plane you want the router to + use to the net you want it to connect to. + +
  5. Draw continuous lines (on all routing layers) to outline keep-out + zones if desired. + +
  6. Use routing styles in the netlist to have per-net routing styles. + Note that the routing style will be used for an entire net. This means + if you have a wide metal setting for a power net you will need to manually + route breakouts from any fine pitch parts on their power pins because + the router will not be able to change to a narrow trace to connect + to the part. + +
  7. Set the current routing style to whatever you'd like the router to + use for any nets not having a defined route style in the netlist. + +
  8. Disable any nets that you don't want the autorouter to route + (double-click them in the netlist window to add/remove the *) + +

    NOTE: If you will be manually routing these later not using + planes, it is usually better to let the autorouter route them then rip + them up yourself afterwards. If you plan to use a ground/power plane + manually, consider making it from one or more pure rectangles and + letting the autorouter have a go at it. + +

  9. Create a fresh rat's nest. ('E' the 'W') + +
  10. Select “show autorouter trials” in the settings menu if you want + to watch what's happening + +
  11. Choose “autoroute all rats” in the connection menu. + +
  12. If you really want to muck with the router because you have a + special design, e.g. all through-hole components you can mess with + layer directional costs by editing the autoroute.c source file and + changing the directional costs in lines 929-940. and try again. Even + more mucking about with costs is possible in lines 4540-4569, but it's + probably not such a good idea unless you really just want to + experiment. + +
+ +

After the design has been autorouted, you may want to run the trace +optimizer. See section Trace Optimizer for more information on +the trace optimizer. + + +

+ +


+Next: , +Previous: Autorouter, +Up: Top + +
+ +

5 User Commands

+ +

The entering of user-commands is initiated by the action routine +Command() (normally bound to the (":") character) which +replaces the bottom statusline with an input area or opens a separate +command window. It is finished by either <Key>Return or +<Key>Escape to confirm or to abort. These two key-bindings +cannot be changed from the resource file. The triggering event, +normally a key press, is ignored. + +

Commands can be entered in one of two styles, command entry syntax: +“Command arg1 arg2” or action script syntax “Action1(arg1, +arg2); Action2(arg1, arg2);”. Quoting arguments works similar to +bash quoting: + +

    +
  • A backslash (\) is the escape character. It preserves the literal +value of the next character that follows. To get a literal '\' use +"\\". + +
  • Enclosing characters in single quotes preserves the literal value of +each character within the quotes. A single quote may not occur +between single quotes, even when preceded by a blackslash. + +
  • Enclosing characters in double quotes preserves the literal value of +all characters within the quotes, with the exception of '\' which +maintains its special meaning as an escape character. +
+ +

There are simple usage dialogs for each command and one for the +complete set of commands. + + + + + +

l [filename]
Loads a new datafile (layout) and, if confirmed, overwrites any existing unsaved data. +The filename and the searchpath (filePath) are passed to the +command defined by fileCommand. +If no filename is specified a file select box will popup. + +


le [filename]
Loads an element description into the paste buffer. +The filename and the searchpath (elementPath) are passed to the +command defined by elementCommand. +If no filename is specified a file select box will popup. + +


m [filename]
Loads an layout file into the paste buffer. +The filename and the searchpath (filePath) are passed to the +command defined by fileCommand. +If no filename is specified a file select box will popup. + +


q[!]
Quits the program without saving any data (after confirmation). +q! doesn't ask for confirmation, it just quits. + +


s [filename]
Data and the filename are passed to the command defined by the resource +saveCommand. It must read the layout data from stdin. +If no filename is entered, either the last one is used +again or, if it is not available, a file select box will pop up. + +


rn [filename]
Reads in a netlist file. If no filename is given +a file select box will pop up. +The file is read via the command defined by the +RatCommand resource. The command must send its output to stdout. + +

Netlists are used for generating rat's nests (see Rats Nest) and for +verifying the board layout (which is also accomplished by the Ratsnest +command). + +


w[q] [filename]
These commands have been added for the convenience of vi users and +have the same functionality as s combined with q. + +


actionCommand
Causes the actionCommand to be executed. This allows you to initiate actions +for which no bindings exist in the resource file. It can be used to initiate any +action with whatever arguments you enter. This makes it possible to do things +that otherwise would be extremely tedious. For example, to change the drilling +hole diameter of all vias in the layout to 32 mils, you could select everything using the +selection menu, then type ":ChangeDrillSize(SelectedVias, 32)". (This will +only work provided the via's diameter is sufficiently large to accommodate a 32 mil hole). +Another example might be to set the grid to 1 mil by typing ":SetValue(Grid, 1)". +Note that some actions use the current cursor location, so be sure to place the cursor +where you want before entering the command. This is one of my favorite new +features in 1.5 and can be a powerful tool. Study the Actions section to +see what actions are available. + +
+ + +
+ + +


+Next: , +Previous: User Commands, +Up: Top + +
+ +

6 Command-Line Options

+ +

+The synopsis of the pcb command is: + +

pcb [OPTION ...] [LAYOUT-FILE.pcb] to start the application in GUI mode, + +

or + +

pcb [-h | -V | --copyright] for a list of options, version, and copyright, + +

or + +

pcb -p [OPTION ...] [LAYOUT-FILE.pcb] to print a layout, + +

or + +

pcb -x HID [OPTION ...] [LAYOUT-FILE.pcb] to export. + +

Possible values for the parameter ‘HID’ are: +

+
bom
Export a bill of materials +
gcode
Export to G-Code +
gerber
Export RS-274X (Gerber) +
nelma
Numerical analysis package export +
png
export GIF/JPEG/PNG +
ps
export postscript +
eps
export encapsulated postscript +
+ +

There are several resources which may be set or reset in addition to the +standard toolkit command-line options. For a complete list refer to +Resources. + + +

+ + + +

6.1 General Options

+ + +
+
--help
Show help on command line options. +
+ +
+
--version
Show version. +
+ +
+
--verbose
Be verbose on stdout. +
+ +
+
--copyright
Show copyright. +
+ +
+
--show-defaults
Show option defaults. +
+ +
+
--show-actions
Show available actions and exit. +
+ +
+
--dump-actions
Dump actions (for documentation). +
+ +
+
--grid-units-mm <string>
Set default grid units. Can be mm or mil. Defaults to mil. +
+ +
+
--backup-interval
Time between automatic backups in seconds. Set to 0 to disable. +The default value is 60. +
+ +
+
--groups <string>
Layer group string. Defaults to "1,c:2:3:4:5:6,s:7:8". +
+ +
+
--route-styles <string>
A string that defines the route styles. Defaults to
+"Signal,1000,3600,2000,1000:Power,2500,6000,3500,1000 + :Fat,4000,6000,3500,1000:Skinny,600,2402,1181,600" +
+ +
+
--element-path <string>
A colon separated list of directories or commands (starts with '|'). +The path is passed to the program specified in --element-command. +
+ +
+
--action-script <string>
If set, this file is executed at startup. +
+ +
+
--action-string <string>
If set, this string of actions is executed at startup. +
+ +
+
--fab-author <string>
Name of author to be put in the Gerber files. +
+ +
+
--layer-stack <string>
Initial layer stackup, for setting up an export. A comma separated list of layer +names, layer numbers and layer groups. +
+ +
+
--save-last-command
If set, the last user command is saved. +
+ +
+
--save-in-tmp
If set, all data which would otherwise be lost are saved in a temporary file +/tmp/PCB.%i.save . Sequence ‘%i’ is replaced by the process ID. +
+ +
+
--reset-after-element
If set, all found connections are reset before a new component is scanned. +
+ +
+
--ring-bell-finished
Execute the bell command when all rats are routed. +
+ +
+ +


+Next: , +Previous: General Options, +Up: Command-Line Options + +
+ +

6.2 General GUI Options

+ + +
+
--pinout-offset-x <num>
Horizontal offset of the pin number display. Defaults to 100mil. +
+ +
+
--pinout-offset-y <num>
Vertical offset of the pin number display. Defaults to 100mil. +
+ +
+
--pinout-text-offset-x <num>
Horizontal offset of the pin name display. Defaults to 800mil. +
+ +
+
--pinout-text-offset-y <num>
Vertical offset of the pin name display. Defaults to -100mil. +
+ +
+
--draw-grid
If set, draw the grid at start-up. +
+ +
+
--clear-line
If set, new lines clear polygons. +
+ +
+
--full-poly
If set, new polygons are full ones. +
+ +
+
--unique-names
If set, you will not be permitted to change the name of an component to match that +of another component. +
+ +
+
--snap-pin
If set, pin centers and pad end points are treated as additional grid points +that the cursor can snap to. +
+ +
+
--all-direction-lines
Allow all directions, when drawing new lines. +
+ +
+
--show-number
Pinout shows number. +
+ +
+ + +


+Next: , +Previous: General GUI Options, +Up: Command-Line Options + +
+ +

6.3 GTK+ GUI Options

+ + +
+
--listen
Listen for actions on stdin. +
+ +
+
--bg-image <string>
File name of an image to put into the background of the GUI canvas. The image must +be a color PPM image, in binary (not ASCII) format. It can be any size, and will be +automatically scaled to fit the canvas. +
+ +
+
--pcb-menu <string>
Location of the gpcb-menu.res file which defines the menu for the GTK+ GUI. +
+ +
+ +


+Next: , +Previous: GTK+ GUI Options, +Up: Command-Line Options + +
+ +

6.4 lesstif GUI Options

+ + +
+
--listen
Listen for actions on stdin. +
+ +
+
--bg-image <string>
File name of an image to put into the background of the GUI canvas. The image must +be a color PPM image, in binary (not ASCII) format. It can be any size, and will be +automatically scaled to fit the canvas. +
+ +
+
--pcb-menu <string>
Location of the pcb-menu.res file which defines the menu for the lesstif GUI. +
+ +
+ +


+Next: , +Previous: lesstif GUI Options, +Up: Command-Line Options + +
+ +

6.5 Colors

+ + +
+
--black-color <string>
Color value for black. Default: ‘#000000’ +
+ +
+
--black-color <string>
Color value for white. Default: ‘#ffffff’ +
+ +
+
--background-color <string>
Background color of the canvas. Default: ‘#e5e5e5’ +
+ +
+
--crosshair-color <string>
Color of the crosshair. Default: ‘#ff0000’ +
+ +
+
--cross-color <string>
Color of the cross. Default: ‘#cdcd00’ +
+ +
+
--via-color <string>
Color of vias. Default: ‘#7f7f7f’ +
+ +
+
--via-selected-color <string>
Color of selected vias. Default: ‘#00ffff’ +
+ +
+
--pin-color <string>
Color of pins. Default: ‘#4d4d4d’ +
+ +
+
--pin-selected-color <string>
Color of selected pins. Default: ‘#00ffff’ +
+ +
+
--pin-name-color <string>
Color of pin names and pin numbers. Default: ‘#ff0000’ +
+ +
+
--element-color <string>
Color of components. Default: ‘#000000’ +
+ +
+
--rat-color <string>
Color of ratlines. Default: ‘#b8860b’ +
+ +
+
--invisible-objects-color <string>
Color of invisible objects. Default: ‘#cccccc’ +
+ +
+
--invisible-mark-color <string>
Color of invisible marks. Default: ‘#cccccc’ +
+ +
+
--element-selected-color <string>
Color of selected components. Default: ‘#00ffff’ +
+ +
+
--rat-selected-color <string>
Color of selected rats. Default: ‘#00ffff’ +
+ +
+
--connected-color <string>
Color to indicate connections. Default: ‘#00ff00’ +
+ +
+
--off-limit-color <string>
Color of off-canvas area. Default: ‘#cccccc’ +
+ +
+
--grid-color <string>
Color of the grid. Default: ‘#ff0000’ +
+ +
+
--layer-color-<n> <string>
Color of layer <n>, where <n> is an integer from 1 to 16. +
+ +
+
--layer-selected-color-<n> <string>
Color of layer <n>, when selected. <n> is an integer from 1 to 16. +
+ +
+
--warn-color <string>
Color of offending objects during DRC. Default value is "#ff8000" +
+ +
+
--mask-color <string>
Color of the mask layer. Default value is "#ff0000" +
+ +
+ +


+Next: , +Previous: Colors, +Up: Command-Line Options + +
+ +

6.6 Layer Names

+ + +
+
--layer-name-1 <string>
Name of the 1st Layer. Default is "top". +
+ +
+
--layer-name-2 <string>
Name of the 2nd Layer. Default is "ground". +
+ +
+
--layer-name-3 <string>
Name of the 3nd Layer. Default is "signal2". +
+ +
+
--layer-name-4 <string>
Name of the 4rd Layer. Default is "signal3". +
+ +
+
--layer-name-5 <string>
Name of the 5rd Layer. Default is "power". +
+ +
+
--layer-name-6 <string>
Name of the 6rd Layer. Default is "bottom". +
+ +
+
--layer-name-7 <string>
Name of the 7rd Layer. Default is "outline". +
+ +
+
--layer-name-8 <string>
Name of the 8rd Layer. Default is "spare". +
+ +
+ +


+Next: , +Previous: Layer Names, +Up: Command-Line Options + +
+ +

6.7 Paths

+ + +
+
--lib-newlib <string>
Top level directory for the newlib style library. +
+ +
+
--lib-name <string>
The default filename for the library. +
+ +
+
--default-font <string>
The name of the default font. +
+ +
+
--file-path <string>
A colon separated list of directories or commands (starts with '|'). The path +is passed to the program specified in --file-command together with the selected +filename. +
+ +
+
--font-path <string>
A colon separated list of directories to search the default font. Defaults to +the default library path. +
+ +
+
--lib-path <string>
A colon separated list of directories that will be passed to the commands specified +by --element-command and --element-contents-command. +
+ +
+ +


+Next: , +Previous: Paths, +Up: Command-Line Options + +
+ +

6.8 Sizes

+ + +

All parameters should be given with an unit. If no unit is given, 1/100 mil +(cmil) will be used. Write units without space to the +number like 3mm, not 3 mm. +Valid Units are: +

+
km
Kilometer +
m
Meter +
cm
Centimeter +
mm
Millimeter +
um
Micrometer +
nm
Nanometer +
in
Inch (1in = 0.0254m) +
mil
Mil (1000mil = 1in) +
cmil
Centimil (1/100 mil) +
+ +
+
--via-thickness <num>
Default diameter of vias. Default value is 60mil. +
+ +
+
--via-drilling-hole <num>
Default diameter of holes. Default value is 28mil. +
+ +
+
--line-thickness <num>
Default thickness of new lines. Default value is 10mil. +
+ +
+
--rat-thickness <num>
Thickness of rats. Values from 1 to 19 are fixed width in screen pixels. +Anything larger means PCB units (i.e. 100 means "1 mil"). Default value +is 10mil. +
+ +
+
--keepaway <num>
Default minimum distance between a track and adjacent copper. +Default value is 10mil. +
+ +
+
--default-PCB-width <num>
Default width of the canvas. Default value is 6000mil. +
+ +
+
--default-PCB-height <num>
Default height of the canvas. Default value is 5000mil. +
+ +
+
--text-scale <num>
Default text scale. This value is in percent. Default value is 100. +
+ +
+
--alignment-distance <num>
Specifies the distance between the board outline and alignment targets. +Default value is 2mil. +
+ +
+
--grid <num>
Initial grid size. Default value is 10mil. +
+ +
+
--minimum polygon area <num>
Minimum polygon area. +
+ +
+ +


+Next: , +Previous: Sizes, +Up: Command-Line Options + +
+ +

6.9 Commands

+ + +

pcb uses external commands for input output operations. These commands can be +configured at start-up to meet local requirements. The command string may include +special sequences %f, %p or %a. These are replaced when the +command is called. The sequence %f is replaced by the file name, +%p gets the path and %a indicates a package name. + +

+
--font-command <string>
Command to load a font. +
+ +
+
--file-command <string>
Command to read a file. +
+ +
+
--element-command <string>
Command to read a footprint.
+Defaults to "M4PATH='%p';export M4PATH;echo 'include(%f)' | m4" +
+ +
+
--print-file <string>
Command to print to a file. +
+ +
+
--lib-command-dir <string>
Path to the command that queries the library. +
+ +
+
--lib-command <string>
Command to query the library.
+Defaults to "QueryLibrary.sh '%p' '%f' %a" +
+ +
+
--lib-contents-command <string>
Command to query the contents of the library.
+Defaults to "ListLibraryContents.sh %p %f" or, +on Windows builds, an empty string (to disable this feature). +
+ +
+
--save-command <string>
Command to save to a file. +
+ +
+
--rat-command <string>
Command for reading a netlist. Sequence %f is replaced by the netlist filename. +
+ +
+ +


+Next: , +Previous: Commands, +Up: Command-Line Options + +
+ +

6.10 DRC Options

+ + +

All parameters should be given with an unit. If no unit is given, 1/100 mil +(cmil) will be used for backward compability. Valid units are given in section +Sizes. + +

+
--bloat <num>
Minimum spacing. Default value is 10mil. +
+ +
+
--shrink <num>
Minimum touching overlap. Default value is 10mil. +
+ +
+
--min-width <num>
Minimum width of copper. Default value is 10mil. +
+ +
+
--min-silk <num>
Minimum width of lines in silk. Default value is 10mil. +
+ +
+
--min-drill <num>
Minimum diameter of holes. Default value is 15mil. +
+ +
+
--min-ring <num>
Minimum width of annular ring. Default value is 10mil. +
+ +
+ +


+Next: , +Previous: DRC Options, +Up: Command-Line Options + +
+ +

6.11 BOM Creation

+ + +
+
--bomfile <string>
Name of the BOM output file. +
+ +
+
--xyfile <string>
Name of the XY output file. +
+ +
+
--xy-unit <unit>
Unit of XY dimensions. Defaults to mil. +
+ +
+ +


+Next: , +Previous: BOM Creation, +Up: Command-Line Options + +
+ +

6.12 Gerber Export

+ + +
+
--gerberfile <string>
Gerber output file prefix. Can include a path. +
+ +
+
--all-layers
Output contains all layers, even empty ones. +
+ +
+
--verbose
Print file names and aperture counts on stdout. +
+ + + +

6.13 Postscript Export

+ + +
+
--psfile <string>
Name of the postscript output file. Can contain a path. +
+ + + +
--drill-helper
Print a centering target in large drill holes. +
+ + + +
--align-marks
Print alignment marks on each sheet. This is meant to ease alignment during exposure. +
+ +
+
--outline
Print the contents of the outline layer on each sheet. +
+ +
+
--mirror
Print mirror image. +
+ +
+
--fill-page
Scale output to make the board fit the page. +
+ +
+
--auto-mirror
Print mirror image of appropriate layers. +
+ +
+
--ps-color
Postscript output in color. +
+ + + +
--ps-bloat <num>
Amount to add to trace/pad/pin edges. +
+ + + +
--ps-invert
Draw objects as white-on-black. +
+ +
+
--media <media-name>
Size of the media, the postscript is fitted to. The parameter +<media-name> can be any of the standard names for paper size: ‘A0’ +to ‘A10’, ‘B0’ to ‘B10’, ‘Letter’, ‘11x17’, +‘Ledger’, ‘Legal’, ‘Executive’, ‘A-Size’, ‘B-size’, +‘C-Size’, ‘D-size’, ‘E-size’, ‘US-Business_Card’, +‘Intl-Business_Card’. +
+ + + +
--psfade <num>
Fade amount for assembly drawings (0.0=missing, 1.0=solid). +
+ +
+
--scale <num>
Scale value to compensate for printer sizing errors (1.0 = full scale). +
+ + + +
--multi-file
Produce multiple files, one per page, instead of a single multi page file. +
+ +
+
--xcalib <num>
Paper width. Used for x-Axis calibration. +
+ +
+
--ycalib <num>
Paper height. Used for y-Axis calibration. +
+ +
+
--drill-copper
Draw drill holes in pins / vias, instead of leaving solid copper. +
+ + + +
--show-legend
Print file name and scale on printout. +
+ +
+ +


+Next: , +Previous: Postscript Export, +Up: Command-Line Options + +
+ +

6.14 Encapsulated Postscript Export

+ + +
+
--eps-file <string>
Name of the encapsulated postscript output file. Can contain a path. +
+ +
+
--eps-scale <num>
Scale EPS output by the parameter ‘num’. +
+ + + +
--as-shown
Export layers as shown on screen. +
+ +
+
--monochrome
Convert output to monochrome. +
+ + + +
--only-visible
Limit the bounds of the EPS file to the visible items. +
+ + + +

6.15 PNG Options

+ + +
+
--outfile <string>
Name of the file to be exported to. Can contain a path. +
+ +
+
--dpi
Scale factor in pixels/inch. Set to 0 to scale to size specified in the layout. +
+ +
+
--x-max
Width of the png image in pixels. No constraint, when set to 0. +
+ +
+
--y-max
Height of the png output in pixels. No constraint, when set to 0. +
+ +
+
--xy-max
Maximum width and height of the PNG output in pixels. No constraint, when set to 0. +
+ +
+
--as-shown
Export layers as shown on screen. +
+ +
+
--monochrome
Convert output to monochrome. +
+ +
+
--only-vivible
Limit the bounds of the exported PNG image to the visible items. +
+ +
+
--use-alpha
Make the background and any holes transparent. +
+ +
+
--format <string>
File format to be exported. Parameter <string> can be ‘PNG’, +‘GIF’, or ‘JPEG’. +
+ +
+
--png-bloat <num><dim>
Amount of extra thickness to add to traces, pads, or pin edges. The parameter +‘<num><dim>’ is a number, appended by a dimension ‘mm’, ‘mil’, or +‘pix’. If no dimension is given, the default dimension is 1/100 mil. +
+ + + +
--photo-mode
Export a photo realistic image of the layout. +
+ +
+
--photo-flip-x
In photo-realistic mode, export the reverse side of the layout. Left-right flip. +
+ +
+
--photo-flip-y
In photo-realistic mode, export the reverse side of the layout. Up-down flip. +
+ +
+ +


+Next: , +Previous: PNG Options, +Up: Command-Line Options + +
+ +

6.16 lpr Printing Options

+ + +
+
--lprcommand <string>
Command to use for printing. Defaults to lpr. This can be used to produce +PDF output with a virtual PDF printer. Example:
+--lprcommand "lp -d CUPS-PDF-Printer". +
+In addition, all Postscript Export options are valid. + +
+ +


+Previous: lpr Printing Options, +Up: Command-Line Options + +
+ +

6.17 nelma Options

+ + +
+
-- basename <string>
File name prefix. +
+ +
+
--dpi <num>
Horizontal scale factor (grid points/inch). +
+ +
+
--copper-height <num>
Copper layer height (um). +
+ +
+
--substrate-height <num>
Substrate layer height (um). +
+ +
+
--substrate-epsilon <num>
Substrate relative epsilon. +
+ + +
+ +


+Next: , +Previous: Command-Line Options, +Up: Top + +
+ +

7 X11 Interface

+ +

+This chapter gives an overview about the additional X11 resources which +are defined by Pcb as well as the defined action routines. + +

+ +
+ +


+Next: , +Up: X11 Interface + +
+ +

7.1 Non-Standard X11 Application Resources

+ +

+In addition to the toolkit resources, Pcb defines the +following resources: + + + + +

absoluteGrid (boolean)
Selects if either the grid is relative to the position where it has changed +last or absolute, the default, to the origin (0,0). + +


alignmentDistance (dimension)
Specifies the distance between the boards outline to the alignment targets. + +


allDirectionLines (boolean)
Enables (default) or disables clipping of new lines to 45 degree angles. + +


backgroundImage (string)
If specified, this image will be drawn as the background for the +board. The purpose of this option is to allow you to use a scan of an +existing layout as a prototype for your new layout. To do this, there +are some limitations as to what this image must be. The image must be +a PPM binary image (magic number ‘P6’). It must have a maximum +pixel value of 255 or less (i.e. no 16-bit images). It must represent +the entire board, as it will be scaled to fit the board dimensions +exactly. Note that it may be scaled unevenly if the image doesn't +have the same aspect ratio of your board. You must ensure that the +image does not use more colors than are available on your system +(mostly this is for pseudo-color displays, like old 8-bit displays). +For best results, I suggest the following procedure using The Gimp: +Load your image (any type). Image->Scale if needed. +Image->Colors->Curves and for each of Red, Green, and Blue channel +move the lower left point up to about the 3/4 line (value 192). This +will make your image pale so it doesn't interfere with the traces +you'll be adding. Image->Mode->Indexed and select, say, 32 colors +with Normal F-S dithering. File->Save As, file type by extension, +use .ppm as the extension. Select Raw formatting. + +


backupInterval (int)
Pcb has an automatic backup feature which saves the current data +every n seconds. The default is 300 seconds. A value of zero disables +the feature. The backup file is named /tmp/PCB.%i.backup by +default (this may have been changed at compilation time via the +BACKUP_NAME +variable in globalconfig.h). +%i is replaced by the process ID. +See also, the command-line option –backup-interval. + +


Bloat (dimension)
Specifies the minimum spacing design rule in mils. + +


connectedColor (color)
All pins, vias, lines and rectangles which are selected during a connection +search are drawn with this color. The default value is determined by +XtDefaultForeground. + +


cross hairColor (color)
This color is used to draw the cross hair cursor. The color is a result of +a XOR operation with the contents of the Layout area. The result +also depends on the default colormap of the X11 server because only +the colormap index is used in the boolean operation and Pcb doesn't +create its own colormap. The default setting is XtDefaultForeground. + +


elementColor (color)
elementSelectedColor (color)
The elements package part is drawn in these colors, for normal and selected +mode, respectively, which both default to XtDefaultForeground. + +


elementCommand (string)
Pcb uses a user defined command to read element files. This resources +is used to set the command which is executed by the users default shell. +Two escape sequences are defined to pass the selected filename (%f) and the +current search path (%p). The command must write the element data +to its standard output. The default value is +
              M4PATH="%p";export M4PATH;echo 'include(%f)' | m4
+
+

Using the GNU version of m4 is highly recommended. +See also, the command-line option –element-command. + +


elementPath (string)
A colon separated list of directories or commands (starts with '|'). +The path is passed to the program specified in elementCommand together +with the selected element name. A specified command will be executed in order +to create entries for the fileselect box. It must write its results to +stdout one entry per line. +See also, the user-command le[!]. + +


fileCommand (string)
The command is executed by the user's default shell whenever existing layout +files are loaded. Data is read from the command's standard output. +Two escape sequences may be specified to pass the selected filename (%f) +and the current search path (%p). The default value is: +
              cat %f
+
+

See also, the command-line option –file-command. + +


filePath (string)
A colon separated list of directories or commands (starts with '|'). +The path is passed to the program specified in fileCommand together +with the selected filename. A specified command will be executed in order +to create entries for the fileselect box. It must write its results to +stdout one entry per line. +See also, the user-command l[!]. + +


fontCommand (string)
Loading new symbol sets also is handled by an external command. You again +may pass the selected filename and the current search path by passing +%f and %p in the command string. Data is read from the commands standard +output. This command defaults to +
              cat %f
+
+

See also, the command-line option –font-command. + +


fontFile (string)
The default font for new layouts is read from this file which is searched +in the directories as defined by the resource fontPath. +Searching is only performed if the filename does not contain a directory +component. +The default filename is default_font. + +


fontPath (string)
This resource, a colon separated list of directories, defines the searchpath +for font files. See also, the resource fontFile. + +


grid (int)
This resources defines the initial value of one cursor step. It defaults +to 100 mil and any changes are saved together with the layout data. + +


gridColor (color)
This color is used to draw the grid. The color is a result of +a INVERT operation with the contents of the Layout area. The result +also depends on the default colormap of the X11 server because only +the colormap index is used in the boolean operation and Pcb doesn't +create its own colormap. The default setting is XtDefaultForeground. + +


invisibleObjectsColor (color)
Elements located on the opposite side of the board are drawn in this color. +The default is XtDefaultForeground. + +


layerColor1..MAX_LAYER (color)
layerSelectedColor1..MAX_LAYER (color)
These resources define the drawing colors of the different layers in +normal and selected state. All values are preset to XtDefaultForeground. + +


layerGroups (string)
The argument to this resource is a colon separated list of comma separated +layer numbers (1..MAX_LAYER). All layers within one group are switched on/off +together. The default setting is 1:2:3:...:MAX_LAYER which means +all layers are handled separately. Grouping layers one to three looks like +1,2,3:4:...:MAX_LAYER + +


layerName1..MAX_LAYER (string)
The default name of the layers in a new layout are determined by these +resources. The defaults are empty strings. + +


libraryCommand (string)
Pcb uses a command to read element data from libraries. +The resources is used to set the command which is executed by the users +default shell. Three escape sequences are defined to pass the selected +filename (%f), the current search path (%p) as well (%a) as the three +parameters template, value and package to the command. +It must write the element data to its standard output. The default value is +
              NONE/share/pcb/oldlib/QueryLibrary.sh %p %f %a
+
+


libraryContentsCommand (string)
Similar to libraryCommand, Pcb uses the command specified +by this resource to list the contents of a library. +
          	NONE/share/pcb/oldlib/ListLibraryContents.sh %p %f
+
+

is the default. + +


libraryFilename (string)
The resource specifies the name of the library. The default value is +pcblib unless changed at compile time +with the LIBRARYFILENAME variable in globalconfig.h. + +


libraryPath (string)
A colon separated list of directories that will be passed to the commands +specified by elementCommand and elementContentsCommand. + +


lineThickness (dimension)
The value, in the range [1..250] (the range may be changed at compile +time with the MIN_LINESIZE and MAX_LINESIZE variables in +globalconfig.h), defines the +initial thickness of new lines. The value is preset to ten mil. + +


media (<predefined> | <width>x<height>+-<left_margin>+-<top_margin>)
The default (user defined) media of the PostScript device. Predefined +values are a3, a4, a5, letter, tabloit, +ledger, legal, and executive. +The second way is to specify the medias width, height and margins in mil. +The resource defaults to a4 size unless changed at compile time +with the DEFAULT_MEDIASIZE variable in globalconfig.h. + +


offLimitColor (color)
The area outside the current maximum settings for width and height is drawn +with this color. The default value is determined by XtDefaultBackground. + +


pinColor (color)
pinSelectedColor(color)
This resource defines the drawing color of pins and pads in both states. +The values are preset to XtDefaultForeground. + +


pinoutFont (string)
This fonts are used to display pin names. There is one font for each zoom +value. The values are preset to XtdefaultFont. + +


pinoutNameLength (int)
This resource limits the number of characters which are displayed for +pin names in the pinout window. By default the string length is limited +to eight characters per name. + +


pinoutOffsetX (int)
pinoutOffsetY (int)
These resources determine the offset in mil of the circuit from the +upper left corner of the window when displaying pinout information. +Both default to 100 mil. + +


pinoutTextOffsetX (int)
pinoutTextOffsetY (int)
The resources determine the distance in mil between the drilling hole of a pin +to the location where its name is displayed in the pinout window. +They default to X:50 and Y:0. + +


pinoutZoom (int)
Sets the zoom factor for the pinout window according to the formula: +scale = 1:(2 power value). Its default value is two which results in +a 1:4 scale. + +


printCommand (string)
Default file for printouts. If the name starts with a '|' the output +is piped through the command. A %f is replaced by the current filename. +There is no default file or command. + +


raiseLogWindow (boolean)
The log window will be raised when new messages arrive if this resource +is set true, the default. + +


ratCommand (string)
Default command for reading a netlist. A %f is replaced by the netlist +filename. Its default value is "cat %f". + +


ratPath (string)
Default path to look for netlist files. It's default value is "." + +


resetAfterElement (boolean)
If set to true, all found connections will be reset before a new +element is scanned. This will produce long lists when scanning the whole +layout for connections. The resource is set to false by default. +The feature is only used while looking up connections of all elements. + +


ringBellWhenFinished (boolean)
Whether to ring the bell (the default) when a possibly lengthy operation +has finished or not. +See also, the command-line option –ring-bell-finished. + +


routeStyle (string)
Default values for the menu of routing styles (seen in the sizes menu). +The string is a comma separated list of name, line thickness, +via diameter, and via drill size. +e.g. "Fat,50,100,40:Skinny,8,35,20:75Ohm,110,110,20" +See also, the command-line option –route-styles and Sizes Menu + +


rubberBandMode (boolean)
Whether rubberband move and rotate (attached lines stretch like +rubberbands) is enabled (the default). + +


saveCommand (string)
This command is used to save data to a layout file. The filename may be +indicated by placing %f in the string. It must read the data from +its standard input. The default command is: +
              cat - > %f
+
+

See also, the command-line option –save-command. + +


saveInTMP (boolean)
Enabling this resource will save all data which would otherwise be lost +in a temporary file /tmp/PCB.%i.save. The file name may +be changed at compile time +with the EMERGENCY_NAME variable in globalconfig.h. +. +%i is replaced by the process ID. +As an example, loading a new layout when the old one hasn't been saved would +use this resource. +See also, the command-line option –save-in-tmp. + +


saveLastCommand (boolean)
Enables the saving of the last entered user command. The option is +disabled by default. +See also, the command-line option –save-last-command. + +


Shrink (dimension)
Specifies the minimum overlap (touching) design rule in mils. + +


size (<width>x<height>)
Defines the width and height of a new layout. The default is +7000x5000 unless changed at compile time +with the DEFAULT_SIZE variable in globalconfig.h. + +


stipllePolygons (boolean)
Determines whether to display polygons on the screen with a stippled +pattern. Stippling can create some amount of transparency so that +you can still (to some extent) see layers beneath polygons. +It defaults to False. + +


textScale (dimension)
The font scaling in percent is defined by this resource. The default is +100 percent. + +


useLogWindow (boolean)
Several subroutines send messages to the user if an error occurs. +This resource determines if they appear inside the log window or as a separate +dialog box. See also, the resource raiseLogWindow and the command line +option -loggeometry. +The default value is true. + +


viaColor (color)
viaSelectedColor (color)
This resource defines the drawing color of vias in both states. +The values are preset to XtDefaultForeground. + +


viaThickness (dimension)
viaDrillingHole (dimension)
The initial thickness and drilling hole of new vias. The values must be in the +range [30..400] (the range may be changed at compile +time with the MIN_PINORVIASIZE and MAX_PINEORVIASIZE variables in +globalconfig.h), with at least 20 +mil of copper. +The default thickness is 40 mil and the default drilling hole is +20 mil. + +


volume (int)
The value is passed to XBell() which sets the volume of the X +speaker. +The value lies in the range -100..100 and it defaults to the maximum volume of +100. + +


warnColor (color)
This resources defines the color to be used for drawing pins and pads when +a warning has been issued about them. + +


zoom (int)
The initial value for output scaling is set according to the following +formula: scale = 1:(2 power value). It defaults to three which results +in an output scale of 1:8. + +
+ +

Refer also to Command-Line Options. + +

+ +


+Next: , +Previous: Resources, +Up: X11 Interface + +
+ +

7.2 Actions

+ +

+All user accessible commands may be bound to almost any X event. Almost +no default binding for commands is done in the binaries, so it is vital for the +application that at least a system-wide application resource file exists. +This file normally resides in the share/pcb directory and +is called Pcb. The bindings to which the manual refers to are the +ones as defined by the shipped resource file. Besides binding an action to +an X11 event, you can also execute any action command using a ":" command +(see User Commands). + +

Take special care about translations related to the functions keys and the +pointer buttons because most of the window managers use them too. +Change the file according to your hardware/software environment. +You may have to replace all occurances of baseTranslations to +translations if you use a X11R4 server. + +

Passing Object as an argument to an action routine causes the object +at the cursor location to be changed, removed or whatever. If more than +one object is located at the cross hair position the smallest type is used. +If there are two of the same type the newer one is taken. +SelectedObjects will handle all selected and visible objects. + + + + + + +

AddRats(AllRats|SelectedRats)
Adds rat-lines to the layout using the loaded netlist file (see the :rn, +User Commands.). Rat lines are added on the active layer using the current +line thickness shown in the status line. +Only missing connectivity is added by the +AddRats command so if, for example, the layout is complete nothing will be added. +Rat lines may be drawn different to other lines on the screen +to make them easier to identify since they cannot appear in a completed layout. +The rat-lines are added in the minimum length straight-line tree pattern +(always ending on pins or pads) that satisfies the missing connectivity in the circuit. +If a SMD pad is unreachable on the active layer, a warning will be issued +about it and the rat-line to that pad will not be generated. +If connections exist on the board which are not listed in the netlist while +AllRats are being added, warning messages will be issued and the affected pins and +pads will be drawn in a special warnColor until the next Notify() event. +If the entire layout agrees completely with the net-list a message informs you that +the layout is complete and no rat-lines are added (since none are needed). +If SelectedRats +is passed as the argument, only those missing connections that might connect among +the selected pins and pads are drawn. +Default: +
          None<Key>w:	AddRats(AllRats)
+          !Shift<Key>w:	AddRats(SelectedRats)
+          None<Key>o:	DeleteRats(AllRats) AddRats(AllRats)
+          !Shift<Key>o:	DeleteRats(SelectedRats) AddRats(SelectedRats)
+
+


ApplyVendor()
Applies an already loaded vendor drill map to the design. +
          ApplyVendor()
+
+


Atomic(Save|Restore|Block|Close)
Controls the undo grouping of sequences of actions. Before the first action +in a group, Atomic(Save) should be issued. After each action that might +be undoable, Atomic(Restore) should be issued. Atomic(Block) concludes +and save the undo grouping if there was anything in the group to undo. +Atomic(Close) concludes and save the undo grouping even if nothing was +actually done. Thus it might produce an "empty" undo. This can be useful +when you want to use undo in a group of actions. + +


Bell([-100..100])
Rings the bell of your display. If no value is passed the setting +of the resource volume will be used. + +


ChangeClearSize(Object, value[, unit])
ChangeClearSize(SelectedPins|SelectedVias, value[, unit])
The effect of this action depends on if the soldermask display is presently +turned on or off. If soldermask is displayed, then the soldermask +relief size will be changed. If soldermask display is turned off, +then the clearance to polygons will be changed. +unit is "mil" or "mm". If not specified the units will default +to the internal unit of 0.01 mil. +
          !Mod1<Key>k:      ChangeClearSize(Object, +2, mil)
+          !Mod1 Shift<Key>k: ChangeClearSize(Object, -2, mil)
+
+


ChangeDrillSize(Object, value[, unit])
ChangeDrillSize(SelectedPins|SelectedVias, value[, unit])
This action routine changes the drilling hole of pins and vias. +If value starts with + or -, then it adds (or subtracts) +value from the current hole diameter, otherwise it sets the +diameter to the value. +unit is "mil" or "mm". If not specified the units will default +to the internal unit of 0.01 mil. +Default: +
          !Mod1<Key>s:       Change2ndSize(Object, +5, mil)
+          !Mod1 Shift<Key>s: Change2ndSize(Object, -5, mil)
+
+

ChangeFlag(Object|SelectElements|SelectedPins|SelectedVias|Selected,thermal|octagon|square,0|1)
Sets/clears the indicated flag. This adds/removes thermals, adds/removes the flag +which indicates a pin/pad should be square, or adds/removes the flag which +indicates a pin/pad should be octagonal. +
          :ChangeFlag(SelectedVias,thermal,1)
+          :ChangeFlag(SelectedPads,square,0)
+
+


ChangeHole(Object|SelectedVias)
This action routine converts a via to and from a hole. A hole is +a via that has no copper annulus. The drill size for the via +determines the hole diameter. +
          !Ctrl<Key>h:	ChangeHole(Object)
+
+


ChangeName(Object)
ChangeName(Layer|Layout)
Changes the name of the visible object at the cursor location. A text object +doesn't have a name therefore the text string itself is changed. +The element name currently used for display is always the one changed with this +command. +See Display(Description|NameOnPCB|Value) for details. +Passing Layer changes the current layers name. +Default: +
          None<Key>n: ChangeName(Object)
+
+

ChangeOctagon(Object|SelectElements|SelectedPins|SelectedVias|Selected)
Toggles what shape the affected pin(s) or via(s) will be drawn when they +are not square. The shape will either be round or octagonal. +Default: +
          !Ctrl<Key>o: ChangeOctagon(Object)
+
+


ChangePinName(ElementName, PinNumber, PinName)
Changes the name for a specified pin or pad number on a specified element. +This action is typically used to forward annotate pin/pad names from a schematic +to the layout. +
          ChangePinName(U1, 14, VDD)
+
+


ChangeSize(Object, value[, unit])
ChangeSize(SelectedLines|SelectedPins|SelectedVias, value[, unit])
ChangeSize(SelectedPads|SelectedTexts|SelectedNames, value[, unit])
ChangeSize(SelectedElements, value[, unit])
To change the size of an object you have to bind these action to some +X event (or use :ChangeSize(...)). If value begins with +a + or - then the value will be added (or subtracted) from the current +size, otherwise the size is set equal to value. Range checking is +done to insure that none of the maximum/minimums of any size are violated. +If Object is passed then a single object at the cursor location is +changed. If any of the Selected arguments are passed then all selected +and visible objects of that type are changed. If the type being modified is +an element, then the thickness of the silkscreen lines defining the element +is changed. +unit is "mil" or "mm". If not specified the units will default +to the internal unit of 0.01 mil. +Default: +
          None<Key>s:   ChangeSize(Object, +5)
+          !Shift<Key>s: ChangeSize(Object, -5)
+
+


ChangeSquare(Object|SelectedElements|SelectedPins)
Toggles the setting of the square flag. The flag is used to identify a +certain pin, normally the first one, of circuits. It is also used to +make SMD pads have square ends. +
          None<Key>q:   ChangeSquare(Object)
+
+

ClrFlag(Object|SelectElements|SelectedPins|SelectedVias|Selected,thermal|octagon|square)
Clears the indicated flag. This removes thermals, removes the flag +which indicates a pin/pad should be square, or removes the flag which +indicates a pin/pad should be octagonal. +
          :ClrFlag(SelectedVias,thermal)
+
+


Command()
Calling Command() pops up an input line at the bottom of the window +which allows you to enter commands. Including all action commands! +The dialog ends when None<Key>Return +to confirm or None<Key>Escape to abort is entered. +Default: +
          <Key>colon: Command()
+
+


Connection(Find)
Connection(ResetFoundLinesAndRectangles|ResetPinsViasAndPads|Reset)
The Connection() action is used to mark all connections from one pin, +line or via to others. +The ResetFoundLinesAndRectangles, ResetFoundPinsAndVias and +Reset arguments may be used to reset all marked lines and rectangles, +vias and pins or all of them. The search starts with the pin or via +at the cursor position. All found objects are drawn with the color +defined by the resource connectedColor. +See also, Display(Description|NameOnPCB|Value). +Default: +
          !Shift<Key>c: Connection(Reset)
+          None<Key>f:   Connection(Find)
+          !Shift<Key>f: Connection(Reset)
+
+


DeleteRats(AllRats|SelectedRats)
This routine deletes either all rat-lines in the layout, or only +the selected and visible ones. Non-rat-lines and other layout +objects are unaffected. +Default: +
          None<Key>e:   DeleteRats(AllRats)
+          !Shift<Key>e: DeleteRats(SelectedRats)
+
+


DisableVendor()
Disables automatic drill size mapping to the loaded vendor drill table. +
          DisableVendor()
+
+


DisperseElements(All|Selected)
Disperses either all elements or only the selected elements in the +layout. This action should be used at the +start of a design to spread out all footprints before any placement or +routing is done. +
          DisperseElements(All)
+
+


Display(Description|NameOnPCB|Value)
Display(Toggle45Degree|CycleClip)
Display(Grid|ToggleGrid)
Display(ToggleRubberBandMode)
Display(Center|ClearAndRedraw|Redraw)
Display(Pinout|PinOrPadName)
This action routines handles some output related settings. It is +used to center the display around the cursor location and to redraw the +output area optionally after clearing the window. +Centering is done with respect to the grid setting. Displaying the +grid itself may be switched on and off by Grid but only if +the distance between two pixels exceeds 4 pixels. +Pcb is able to handle several labels of an element. One of them +is a description of the functionality (eg resistor), the second should be +a unique identifier (R1) whereas the last one is a value (100k). +The Display() action selects which of the names is displayed. +It also controls which name will be affected by the ChangeName command. +If ToggleGrid is passed, Pcb changes between relative +('rel' in the statusline) and absolute grid (an 'abs' in the statusline). +Relative grid means the pointer position when the command is issued is +used as the grid origin; while (0,0) is used in the absolute grid case. +Passing Pinout displays the pinout of the element at the current +cursor location whereas PinOrPadName toggles displaying of the +pins or pads name under the cursor. If none of them matches but the cursor +is inside of an element, the flags is toggled for all of its pins and pads. +For details about rubberbands see also the details about Mode. +Default: +
          None<Key>c:  Display(Center)
+          None<Key>d:  Display(PinOrPadName)
+          !Shift<Key>d: Display(Pinout)
+          None<Key>r:  Display(ClearAndRedraw)
+          None<Key>.:  Display(Toggle45Degree)
+          None<Key>/:  Display(CycleClip)
+
+


DRC()
Initiates design rule checking of the entire layout. Must be repeated +until no errors are found. + +

ExecuteFile(filename)
Executes the PCB actions contained in the specified file. +This can be used to automate a complex sequence of operations. +
          :ExecuteFile(custom.cmd)
+
+

The command file contains a list of PCB actions. Blank lines +are ignored and lines starting with a # are treated as comment +lines. For example +

          # This is a comment line
+          Display(Grid)
+          SetValue(Zoom,2)
+          DRC()
+
+


EditLayerGroups()
Pops up a dialog box to edit the layergroup setting. The function is also +available from the Objects menu. +There are no defaults. + +


EnableVendor()
Enables automatic drill size mapping to the loaded vendor drill table. +
          EnableVendor()
+
+


Load(ElementToBuffer|Layout|LayoutToBuffer|Nelist)
This routine pops up a fileselect box to load layout, element data, +or netlist. +The passed filename for layout data is saved and may be reused. +ElementToBuffer and LayoutToBuffer load the data into the +current buffer. +There are no defaults. + +


LoadVendor(vendorfile)
Loads the specified vendor resource file. +
          LoadVendor(myvendor.res)
+
+


MarkCrosshair()
This routine marks the current cursor location with an X, and then +the cursor display shows both absolute position and position relative to +the mark. If a mark is already present, this routine removes it and +stops displaying relative cursor coordinates. +Defaults: +
          !Ctrl<key>m:	MarkCrosshair()
+
+


Mode(Copy|InsertPoint|Line|Move|None|PasteBuffer|Polygon|Thermal)
Mode(Remove|Rectangle|RubberbandMove|Text|Via)
Mode(Cycle)
Mode(Notify)
Mode(Save|Restore)
Switches to a new mode of operation. The active mode is displayed by a thick +line around the matching mode selector button. +Most of the functionality of Pcb is implemented by selecting a mode +and calling Mode(Notify). The arguments Line, Polygon, +Rectangle, Text and Via are used to create the +appropriate object whenever Mode(Notify) is called. Some of them, +such as Polygon, need more than one call for one object to be created. +InsertPoint adds points to existing polygons or lines. +Save and Restore are used to temporarily save the mode, switch +to another one, call Mode(Notify) and restore the saved one. Have +a look at the application resource file for examples. +Copy and Move modes are used to change an object's location and, +optionally, to create a new one. The first call of Mode(Notify) attaches +the object at the pointer location to the cross hair whereas the second +one drops it to the layout. The rubberband version of move performs the +move while overriding the current rubberband mode. +Passing PasteBuffer attaches the contents of the currently selected +buffer to the cross hair. Each call to Mode(Notify) pastes this contents +to the layout. Mode(Cycle) cycles through the modes available in the +mode-button pallet. +Mode(None) switches all modes off. +Default: +
          <Key>Escape:             Mode(None)
+          <Key>space:              Mode(Cycle)
+          None<Key>BackSpace:      Mode(Save) Mode(Remove) Mode(Notify) Mode(Restore)
+          None<Key>Delete:         Mode(Save) Mode(Remove) Mode(Notify) Mode(Restore)
+          None<Key>F1:             Mode(Via)
+          None<Key>F2:             Mode(Line)
+          None<Key>F3:             Mode(PasteBuffer)
+          None<Key>F4:             Mode(Rectangle)
+          None<Key>F5:             Mode(Text)
+          None<Key>F6:             Mode(Polygon)
+          None<Key>F7:             Mode(Thermal)
+          None<Key>F8:		 Mode(Arc)
+          None<Key>Insert:         Mode(InsertPoint)
+          None<Key>[:              Mode(Save) Mode(Move) Mode(Notify)
+          None<Key>]:              Mode(Notify) Mode(Restore)
+          None<Btn1>:          Mode(Notify)
+          !Shift Ctrl<Btn1>:   Mode(Save) Mode(Remove) Mode(Notify) Mode(Restore)
+          None<Btn2Down>:          Mode(Save) Mode(Move) Mode(Notify)
+          None<Btn2Up>:            Mode(Notify) Mode(Restore)
+          !Mod1<Btn2Down>:       Mode(Save) Mode(Copy) Mode(Notify)
+          !Mod1<Btn2Up>:         Mode(Notify) Mode(Restore)
+          Shift BTNMOD<Btn2Down>: Mode(Save) Mode(RubberbandMove) Mode(Notify)
+
+


MovePointer(delta_x, delta_y)
With this function it is possible to move the cross hair cursor by using the +cursor keys. The X server's pointer follows because the necessary +events are generated by Pcb. All movements are performed with respect +to the currently set grid value. +Default: +
          None<Key>Up:      MovePointer(0, -1)
+          !Shift<Key>Up:    MovePointer(0, -10)
+          None<Key>Down:    MovePointer(0, 1)
+          !Shift<Key>Down:  MovePointer(0, 10)
+          None<Key>Right:   MovePointer(1, 0)
+          !Shift<Key>Right: MovePointer(10, 0)
+          None<Key>Left:    MovePointer(-1, 0)
+          !Shift<Key>Left:  MovePointer(-10, 0)
+
+


MoveToCurrentLayer(Object|SelectedObjects)
The function moves a single object at the cross hair location or all selected +objects to the current layer. Elements are not movable by this function. +They have to be deleted and replaced on the other side. +If a line segment is moved and the movement would result in a loss of +connectivity to another segment then via(s) are automatically added to +maintain the connectivity. +
          None<Key>m:       MoveToCurrentLayer(Object)
+          !Shift<Key>m:     MoveToCurrentLayer(SelectedObjects)
+
+


New()
Clear the current layout and starts a new one after entering its name. +Refer to the resource backup for more information. +No defaults. + +


PasteBuffer(AddSelected|Clear|1..5)
PasteBuffer(Rotate, 1..3)
PasteBuffer(Convert)
This action routine controls and selects the pastebuffer as well as all +cut-and-paste operations. Passing a buffer number selects one in of the +range 1..5. The statusline is updated with the new number. +Rotate performs a number of 90 degree counter clockwise rotations +of the buffer contents. AddSelected as first argument copies all +selected and visible objects into the buffer. Passing Clear removes +all objects from the currently selected buffer. Convert causes +the contents of the buffer (lines, arc, vias) to be converted into an +element definition. Refer to Pastebuffer +for examples. +Default: +
          !Ctrl<Key>x:       PasteBuffer(Clear) PasteBuffer(AddSelected)
+          		   Mode(PasteBuffer)
+          !Shift Ctrl<Key>x: PasteBuffer(Clear) PasteBuffer(AddSelected)
+          		   RemoveSelected() Mode(PasteBuffer)
+          !Mod1<Key>c:       PasteBuffer(Clear) PasteBuffer(AddSelected)
+          !Mod1<key>x:       PasteBuffer(Clear) PasteBuffer(AddSelected)
+          		   RemoveSelected()
+          !Shift<Key>1:      PasteBuffer(1)
+          !Shift<Key>2:      PasteBuffer(2)
+          !Shift<Key>3:      PasteBuffer(3)
+          !Shift<Key>4:      PasteBuffer(4)
+          !Shift<Key>5:      PasteBuffer(5)
+          None<Key>F3:       Mode(PasteBuffer)
+
+


Polygon((Close|PreviousPoint)
Polygons need a special action routine to make life easier. Calling +Polygon(PreviousPoint) resets the newly entered corner to the +previous one. The Undo action will call Polygon(PreviousPoint) +when appropriate to do so. Close creates the final +segment of the polygon. This may fail if clipping to 45 degree +lines is switched on, in which case a warning is issued. +Default: +
          None<Key>p:             Polygon(Close)
+          !Shift<Key>p:           Polygon(Close)
+
+


Print()
Pops up a print control box that lets you select the output +device, scaling and many more options. Each run creates all +files that are supported by the selected device. These are +mask files as well as drilling files, silk screens and so on. The table +shows the filenames for all possible files: +
          	POSIX (extension)             8.3 filename
+          		---------------------------------------------
+          		*_componentmask.*             cmsk.*
+          		*_componentsilk.*             cslk.*
+          		*_soldermask.*                smsk.*
+          		*_soldersilk.*                sslk.*
+          		*_drill.*                     dril.*
+          		*_groundplane.*               gpl.*
+          		*_group[1..8].*     [..8].*
+
+

The output may be sent to a post-processor by starting the filename with the +pipe ("|") character. Any "%f" in a command is replaced +with the current filename. The function is available from the file menu. +There are no defaults. + +


Quit()
Quits the application after confirming the operation. +Default: +
          <Message>WM_PROTOCOLS: Quit()
+
+


Redo()
This routine allows you to recover from the last undo command. +You might want to do this if you thought that undo was going to +revert something other than what it actually did (in case you +are confused about which operations are un-doable), or if you +have been backing up through a long undo list and over-shoot +your stopping point. Any change that is made since the undo +in question will trim the redo list. For example if you add +ten lines, then undo three of them you could use redo to put +them back, but if you move a line on the board before performing +the redo, you will lose the ability to "redo" the three "undone" lines. +Default: +
          !Shift<Key>r:	Redo()
+
+


RemoveSelected()
This routine removes all visible and selected objects. +There are no defaults. + +


Report(Object|DrillReport)
This routine pops up a dialog box describing the various +characteristics of an object (or piece of an object such as a pad or pin) +in the layout at the cursor position, or a report about all of the +drill holes in the layout. +There are no defaults. + +


RouteStyle(1|2|3|4)
This routine copies the sizes corresponding to the numbered route style +into the active line thickens, via diameter, and via drill size. +Defaults: +
          !Ctrl<Key>1: RouteStyle(1)
+          ...
+          !Ctrl<Key>NUM_STYLES: RouteStyle(NUM_STYLES)
+
+

The variable NUM_STYLES is set at compile time in +globalconfig.h. + +


Save(Layout|LayoutAs)
Save(AllConnections|AllUnusedPins|ElementConnections)
Passing Layout saves the layout using the file from which it was +loaded or, if it is a new layout, calls Save(LayoutAs) which queries +the user for a filename. +The values: AllConnections, AllUnusedPins and +ElementConnections start a connection scan and save all connections, +all unused pins or the connections of a single element to a file. +There are no defaults. + +


Select(All|Block|Connection|ToggleObject)
Select(ElementByName|ObjectByName|PadByName|PinByName)
Select(TextByName|ViaByName)
Toggles either the selection flag of the object at the cross hair position +(ToggleObject) or selects all visible objects, all inside a +rectangle or all objects which have been found during the last connection +scan. The ByName functions use a Regular Expressions search, +always case insensitive, to select the objects. +Default: +
          None<Btn3Down>:  Select(ToggleObject)
+          None<Btn3Down>,None<Btn3Motion>: See resource file - this is complex
+
+

SetFlag(Object|SelectElements|SelectedPins|SelectedVias|Selected,thermal|octagon|square)
Sets the indicated flag. This adds thermals, sets the flag +which indicates a pin/pad should be square, or sets the flag which +indicates a pin/pad should be octagonal. +
          :SetFlag(Selected,thermal)
+
+


SetValue(Grid|LineSize|TextScale|ViaDrillingHole|ViaSize|Zoom, value)
Some internal values may be changed online by this function. +The first parameter specifies which data has to be changed. The other one +determines if the resource is set to the passed value, if value is +specified without sign, or increments/decrements if it is specified with +a plus or minus sign. +The function doesn't change any existing object only the initial values of +new objects. Use the ChangeSize() and ChangeDrillSize() +to change existing objects. +Default: +
          None<Key>g:        SetValue(Grid, +5)
+          !Shift<Key>g:      SetValue(Grid, -5)
+          None<Key>l:        SetValue(LineSize, +5)
+          !Shift<Key>l:      SetValue(LineSize, -5)
+          None<Key>t:        SetValue(TextScale, +10)
+          !Shift<Key>t:      SetValue(TextScale, -10)
+          None<Key>v:        SetValue(ViaSize, +5)
+          !Shift<Key>v:      SetValue(ViaSize, -5)
+          !Mod1<Key>v:       SetValue(ViaDrillingHole, +5)
+          !Mod1 Shift<Key>v: SetValue(ViaDrillingHole, -5)
+          None<Key>z:        SetValue(Zoom, -1)
+          !Shift<Key>z:      SetValue(Zoom, +1)
+
+


SwapSides()
This routine changes the board side you are viewing. +Default: +
          None<Key>Tab:      SwapSides()
+
+


SwitchDrawingLayer(value)
Makes layer number 1..MAX_LAYER the current one. +Default: +
          None<Key>1:        SwitchDrawingLayer(1)
+          ...
+          None<Key>MAX_LAYER:        SwitchDrawingLayer(MAX_LAYER)
+
+


ToggleHideName(Object|SelectedElements)
Toggles whether the element's name is displayed or hidden. If it +is hidden you won't see it on the screen and it will not appear +on the silk layer when you print the layout. +
          None<Key>h:	ToggleHideName(Object)
+          !Shift<Key>h:	ToggleHideName(SelectedElements)
+
+


ToggleVendor()
Toggles automatic drill size mapping to the loaded vendor drill table. +
          ToggleVendor()
+
+


ToggleVisibility(Layer)
Toggles the visibility of the layer. +
          Mod1<Key>1:	ToggleVisibility(1)
+          Mod1<Key>2:	ToggleVisibility(2)
+          Mod1<Key>3:	ToggleVisibility(3)
+          Mod1<Key>4:	ToggleVisibility(4)
+
+


Undo()
Undo(ClearList)
The unlimited undo feature of Pcb allows you to recover +from most operations that materially affect you work. +Calling Undo() without any parameter recovers +from the last (non-undo) operation. ClearList is used to release the +allocated memory. ClearList is called whenever a new layout is started +or loaded. See also Redo. +Default: +
          None<Key>u:        Undo()
+          !Shift Ctrl<Key>u: Undo(ClearList)
+
+


UnloadVendor()
Unloads the loaded vendor drill table. +
          UnloadVendor()
+
+


Unselect(All|Block|Connection)
Unselects all visible objects, all inside a rectangle or all objects which +have been found during the last connection scan. +Default: +
          !Shift <Btn3Down>: Mode(Save) Mode(None) Unselect(Block)
+          !Shift <Btn3Up>:   Unselect(Block) Mode(Restore)
+
+
+ +
+ +


+Previous: Actions, +Up: X11 Interface + +
+ +

7.3 Default Translations

+ +

+This section covers some default translations of key and button events as +defined in the shipped default application resource file. Most of them have +already been listed in Actions. Pcb makes use of a nice X11 +feature; calling several action routines for one event. + + + + + + +

None<Key>BackSpace:
None<key>Delete:
!Shift<Key>BackSpace:
!Shift Ctrl<Btn1>:
The object at the cursor location is removed by None<Key>BackSpace or +Shift Ctrl<Btn1> whereas Shift<Key>BackSpace also removes +all other objects that are fully-connected to the one at the cursor location. + +


!Mod1 Ctrl<Key>Left:
!Mod1 Ctrl<Key>Right:
!Mod1 Ctrl<Key>Up:
!Mod1 Ctrl<Key>Down:
Scroll one page in one of the four directions. + +


None<Key>Left:, !Shift<Key>Left:
None<Key>Right:, !Shift<Key>Right:
None<Key>Up:, !Shift<Key>Up:
None<Key>Down:, !Shift<Key>Down:
Move cross hair either one or ten points in grid. + +


None<Key>Return:
Finished user input, selects the 'default' button of dialogs. + +


None<Key>Escape:
Mode(Reset), aborts user input, selects the 'abort' button of +dialogs or resets all modes. + +


None<Btn2Down>, Btn2<Motion>, None<Btn2Up>:
!Mod1<Btn2Down>, Btn2<Motion>, !Mod1<Btn2Up>:
The first sequence moves the object or element name at the cursor location. +The second one copies the objects. Copying isn't available for +element names. + +
+ + +
+ +


+Next: , +Previous: X11 Interface, +Up: Top + +
+ +

8 File Formats

+ +

+All files used by Pcb are read from the standard output of a command +or written to the standard input of one as plain seven bit ASCII. This +makes it possible to use any editor to change the contents of a layout file. +It is the only way for element or font description files to be created. +To do so you'll need to study the example files example/* and +default_font which are shipped with Pcb. +For an overview refer to Intro. + +

The following sections provide the necessary information about the syntax of +the files. +Netlist files are not created by Pcb, but it does use them. For information +on the format of a netlist file see the :rn, +User Commands. +The commands described allow you to add almost any additional +functionality you may need. Examples are compressed read and write access as +well as archives. The commands themselves are defined by the resources +elementCommand, fileCommand, fontCommand, +libraryCommand, libraryContentsCommand and saveCommand. +Note that the commands are not saved along with the data. +It is considered an advantage to have the layout file contain all necessary +information, independent of any other files. + +

One thing common to all files is they may include comments, newlines, +and carriage returns at any place except within quoted strings. + +

+ +
+ +


+Next: , +Up: File Formats + +
+ +

8.1 Pad and Line Representation

+ +

+Pads and lines (copper traces, silk screen lines, etc) are represented by the +line end points and the aperture used to draw the line. It is important to +understand this when creating the pads for a new footprint. The following figure +illustrates a pad or line which is drawn using a square aperture. The end +points (X0,Y0), (X1,Y1) specify the center of the aperture. The size parameter +specifies the size of the aperture. + +

Pad Layout
+ +

Pads and lines are represented in this way because this is how lines are +specified in RS-274X (Gerber) files which are used for creating +the masks used in board manufacturing. In fact, older mask making +equipment created lines in precisely this fashion. A physical aperture was +used to pass light through onto a photosensitive film. + +

+ +


+Next: , +Previous: Pad and Line Representation, +Up: File Formats + +
+ +

8.2 Layout File Format

+ +

+The layout file describes a complete layout including symbols, vias, +elements and layers with lines, rectangles and text. This is the most +complex file of all. As Pcb has evolved, the file format has +changed several times to accommodate new features. Pcb has +always been able to read all older versions of the .pcb file. +This allows the migration of older designs to newer versions of the +program. Obviously older versions of Pcb will not be able +to properly read layout files stored in newer versions of the file +format. + +

In practice it is very common for footprint libraries to contain +elements which have been defined in various versions of the Pcb +file format. When faced with trying to understand an element file or +layout file which includes syntax not defined here, the best approach +is to examine the file src/parse_y.y which is the definitive +definition of the file format. + +

The PCB layout file contains the following contents, in this order (individual items +are defined in File Syntax: + +

+
PCB
This names the board and sets its size + +
Grid
Optional. + +
Cursor
Optional. + +
Flags
Optional. + +
Groups
Optional. + +
Styles
Optional. + +
Symbols
Optional. + +
Vias, Rats, Layers, and Elements
These may occur in any order, at this point in the file. + +
Netlists
Optional. + +
+ +
+ +


+Next: , +Previous: Layout File, +Up: File Formats + +
+ +

8.3 Element File Format

+ +

+Element files are used to describe one component which then may be used +several times within one or more layouts. You will normally split the +file into two parts, one for the pinout and one for the package description. +Using m4 allows you to define pin names as macros in one file and +include a package description file which evaluates the macros. See +the resource elementCommand for more information. The pins (and pads) +must appear in sequential order in the element file (new in 1.5) so that +pin 1 must be the first PIN(...) in the file. + +

Doing things this way makes it possible to use one package file for several +different circuits. See the sample files dil*. + +

The lowest x and y coordinates of all sub-objects of an element are +used as an attachment point for the cross hair cursor of the main +window, unless the element has a mark, in which case that's the +attachment point. + +

+ +


+Next: , +Previous: Element File, +Up: File Formats + +
+ +

8.4 Font File Format

+ +

+A number of user defined Symbols are called a font. There is only one per +layout. All symbols are made of lines. See the file default_font +as an example. + +

The lowest x and y coordinates of all lines of a font are transformed to (0,0). + +

+ +


+Next: , +Previous: Font File, +Up: File Formats + +
+ +

8.5 Netlist File Format

+ +

+Netlists read by Pcb must have this simple text form: + +

     netname [style] NAME-PINNUM NAME2-PINNUM2 NAME3-PINNUM3 ... [\]
+
+

for each net on the layout. +where "netname" is the name of the net which must be unique for each +net, [style] is an optional route-style name, +NAME is the layout-name name given to an element, +and PINNUM is the (usually numeric) +pin number of the element that connects to the net +(for details on pin numbering see Element Objects). +Spaces or tabs separate the fields. +If the line ends with a "\" the +net continues on the next line and the "\" is treated exactly as if it +were a space. If a NAME ends with a lower-case letter, +all lower-case letters are stripped from the end of the NAME to determine the +matching layout-name name. For example: + +

          Data U1-3 U2abc-4 FLOP1a-7 Uabc3-A9
+
+

specifies that the net called "Data" should have +pin 3 of U1 connected to pin 4 of U2, to pin 7 of +FLOP1 and to pin A9 of Uabc3. Note that element name and +pin number strings are case-sensitive. +It is up to you to name the elements so that their layout-name names +agrees with the netlist. + +

+ +


+Next: , +Previous: Netlist File, +Up: File Formats + +
+ +

8.6 Library Contents File Format

+ +

+There is nothing like a special library format. The ones that have been +introduced in 1.4.1 just use some nice (and time consuming) features of GNU +m4. The only predefined format is the one of the contents file +which is read during startup. It is made up of two basic line types: + +

     menu entry      = "TYPE="name
+     contents line   = template":"package":"value":"description
+     name            = String
+     template        = String
+     package         = String
+     value           = String
+     description     = String
+     String          = <anything except ":", "\n" and "\r">
+
+

No leading white spaces or comments are allowed in this file. If you need +either one, define a command that removes them before loading. Have a look +to the libraryContentsCommand resource. + +

The menu entry will appear in the selection menu at the top and of the +library window. + +

+ +


+Next: , +Previous: Library Contents File, +Up: File Formats + +
+ +

8.7 Library File Format

+ +

+This section provides an overview about the existing m4 definitions +of the elements. There are basically two different types of files. One +to define element specific data like the pinout, package and so on, the +other to define the values. For example the static RAM circuits 43256 and +62256 are very similar. They therefore share a common definition in the +macro file but are defined with two different value labels. + +

The macro file entry: +

     define(`Description_43256_dil', `SRAM 32Kx8')
+     define(`Param1_43256_dil', 28)
+     define(`Param2_43256_dil', 600)
+     define(`PinList_43256_dil', ``pin1', `pin2', ...')
+
+

And the list file: +

     43256_dil:N:43256:62256
+
+

The macro must define a description, the pin list and up to two additional +parameters that are passed to the package definitions. The first one is +the number of pins whereas the second one defines for example the width +of a package. + +

It is very important to select a unique identifier for each macro. In +the example this would be 43256_dil which is also the templates name. +It is required by some low-level macros that +Description_, Param1_, Param2_ and PinList_ are perpended. + +

The list file uses a syntax: +

     template:package:value[:more values]
+
+

This means that the shown example will create two element entries with the +same package and pinout but with different names. + +

A number of packages are defined in common.m4. Included are: + +

     DIL packages with suffix D, DW, J, JD, JG, N, NT, P
+     PLCC
+     TO3
+     generic connectors
+     DIN 41.612 connectors
+     zick-zack (SD suffix)
+     15 pin multiwatt
+
+

If you are going to start your own library please take care about m4 +functions. Be aware of quoting and so on and, most important check your +additional entry by calling the macro: + +

     CreateObject(`template', `value', `package suffix')
+
+

If quoting is incorrect an endless loop may occur (broken by a out-of-memory +message). + +

The scripts in the lib directory handle the creation of libraries +as well as of their contents files. Querying is also supported. + +

I know quite well that this description of the library implementation is +not what some out there expect. But in my opinion it's much more useful to +look at the comments and follow the macros step by step. + +

+ +


+Next: , +Previous: Library File, +Up: File Formats + +
+ +

8.8 File Syntax

+ +

+ + + +

A special note about units: Older versions of pcb used mils +(1/1000 inch) as the base unit; a value of 500 in the file meant +half an inch. Newer versions uses a "high resolution" syntax, +where the base unit is 1/100 of a mil (0.000010 inch); a value of 500 in +the file means 5 mils. As a general rule, the variants of each entry +listed below which use square brackets are the high resolution formats +and use the 1/100 mil units, and the ones with parentheses are the older +variants and use 1 mil units. Note that when multiple variants +are listed, the most recent (and most preferred) format is the first +listed. + +

Symbolic and numeric flags (SFlags and NFlags) are described in +Object Flags. + +

+ +
+ +


+Next: , +Up: File Syntax + +
+ +

8.8.1 Arc

+ + +

+
Arc [X Y Width Height Thickness Clearance StartAngle DeltaAngle SFlags]
+Arc (X Y Width Height Thickness Clearance StartAngle DeltaAngle NFlags)
+Arc (X Y Width Height Thickness StartAngle DeltaAngle NFlags)
+
+
+ +

+
X Y
Coordinates of the center of the arc. +
Width Height
The width and height, from the center to the edge. The bounds of the +circle of which this arc is a segment, is thus 2*Width by +2*Height. +
Thickness
The width of the copper trace which forms the arc. +
Clearance
The amount of space cleared around the arc when the line passes +through a polygon. The clearance is added to the thickness to get the +thickness of the clear; thus the space between the arc and the polygon +is Clearance/2 wide. +
StartAngle
The angle of one end of the arc, in degrees. In PCB, an angle of zero +points left (negative X direction), and 90 degrees points down +(positive Y direction). +
DeltaAngle
The sweep of the arc. This may be negative. Positive angles sweep +counterclockwise. +
SFlags
Symbolic or numeric flags. +
NFlags
Numeric flags. +
+ + +
+ +


+Next: , +Previous: Arc syntax, +Up: File Syntax + +
+ +

8.8.2 Attribute

+ + +

+
Attribute ("Name" "Value")
+
+
+ +

Attributes allow boards and elements to have arbitrary data attached +to them, which is not directly used by PCB itself but may be of use by +other programs or users. + +

+
Name
The name of the attribute + +
Value
The value of the attribute. Values are always stored as strings, even +if the value is interpreted as, for example, a number. + +
+ + +
+ +


+Next: , +Previous: Attribute syntax, +Up: File Syntax + +
+ +

8.8.3 Connect

+ + +

+
Connect ("PinPad")
+
+
+ +

+
PinPad
The name of a pin or pad which is included in this net. Pin and Pad +names are named by the refdes and pin name, like "U14-7" for +pin 7 of U14, or "T4-E" for pin E of T4. +
+ + +
+ +


+Next: , +Previous: Connect syntax, +Up: File Syntax + +
+ +

8.8.4 Cursor

+ + +

+
Cursor [X Y Zoom]
+Cursor (X Y Zoom)
+
+
+ +

+
X Y
Location of the cursor when the board was saved. +
Zoom
The current zoom factor. Note that a zoom factor of "0" means 1 mil +per screen pixel, N means 2^N mils per screen pixel, etc. The +first variant accepts floating point numbers. The special value +"1000" means "zoom to fit" +
+ + +
+ +


+Next: , +Previous: Cursor syntax, +Up: File Syntax + +
+ +

8.8.5 DRC

+ + +

+
DRC [Bloat Shrink Line Silk Drill Ring]
+DRC [Bloat Shrink Line Silk]
+DRC [Bloat Shrink Line]
+
+
+ +

+
Bloat
Minimum spacing between copper. +
Shrink
Minimum copper overlap to guarantee connectivity. +
Line
Minimum line thickness. +
Silk
Minimum silk thickness. +
Drill
Minimum drill size. +
Ring
Minimum width of the annular ring around pins and vias. +
+ + +
+ +


+Next: , +Previous: DRC syntax, +Up: File Syntax + +
+ +

8.8.6 Element

+ + +

+
Element [SFlags "Desc" "Name" "Value" MX MY TX TY TDir TScale TSFlags] (
+Element (NFlags "Desc" "Name" "Value" MX MY TX TY TDir TScale TNFlags) (
+Element (NFlags "Desc" "Name" "Value" TX TY TDir TScale TNFlags) (
+Element (NFlags "Desc" "Name" TX TY TDir TScale TNFlags) (
+Element ("Desc" "Name" TX TY TDir TScale TNFlags) (
+   ... contents ...
+)
+
+
+ +

+
SFlags
Symbolic or numeric flags, for the element as a whole. +
NFlags
Numeric flags, for the element as a whole. +
Desc
The description of the element. This is one of the three strings +which can be displayed on the screen. +
Name
The name of the element, usually the reference designator. +
Value
The value of the element. +
MX MY
The location of the element's mark. This is the reference point +for placing the element and its pins and pads. +
TX TY
The upper left corner of the text (one of the three strings). +
TDir
The relative direction of the text. 0 means left to right for +an unrotated element, 1 means up, 2 left, 3 down. +
TScale
Size of the text, as a percentage of the “default” size of of the +font (the default font is about 40 mils high). Default is 100 (40 +mils). +
TSFlags
Symbolic or numeric flags, for the text. +
TNFlags
Numeric flags, for the text. +
+ +

Elements may contain pins, pads, element lines, element arcs, +attributes, and (for older elements) an optional mark. Note that +element definitions that have the mark coordinates in the element +line, only support pins and pads which use relative coordinates. The +pin and pad coordinates are relative to the mark. Element definitions +which do not include the mark coordinates in the element line, may +have a Mark definition in their contents, and only use pin and pad +definitions which use absolute coordinates. + + +

+ +


+Next: , +Previous: Element syntax, +Up: File Syntax + +
+ +

8.8.7 ElementArc

+ + +

+
ElementArc [X Y Width Height StartAngle DeltaAngle Thickness]
+ElementArc (X Y Width Height StartAngle DeltaAngle Thickness)
+
+
+ +

+
X Y
Coordinates of the center of the arc. These are relative to the +Element's mark point for new element formats, or absolute for older +formats. +
Width Height
The width and height, from the center to the edge. The bounds of the +circle of which this arc is a segment, is thus 2*Width by +2*Height. +
StartAngle
The angle of one end of the arc, in degrees. In PCB, an angle of zero +points left (negative X direction), and 90 degrees points down +(positive Y direction). +
DeltaAngle
The sweep of the arc. This may be negative. Positive angles sweep +counterclockwise. +
Thickness
The width of the silk line which forms the arc. +
+ + +
+ +


+Next: , +Previous: ElementArc syntax, +Up: File Syntax + +
+ +

8.8.8 ElementLine

+ + +

+
ElementLine [X1 Y1 X2 Y2 Thickness]
+ElementLine (X1 Y1 X2 Y2 Thickness)
+
+
+ +

+
X1 Y1 X2 Y2
Coordinates of the endpoints of the line. These are relative to the +Element's mark point for new element formats, or absolute for older +formats. +
Thickness
The width of the silk for this line. +
+ + +
+ +


+Next: , +Previous: ElementLine syntax, +Up: File Syntax + +
+ +

8.8.9 FileVersion

+ + +

+
FileVersion[Version]
+
+
+ +

+
Version
File format version. This version number represents the date when the pcb file +format was last changed. +
+ +

Any version of pcb build from sources equal to or newer +than this number should be able to read the file. If this line is not present +in the input file then file format compatibility is not checked. + + +

+ +


+Next: , +Previous: FileVersion syntax, +Up: File Syntax + +
+ +

8.8.10 Flags

+ + +

+
Flags(Number)
+
+
+ +

+
Number
A number, whose value is normally given in hex, individual bits of which +represent pcb-wide flags as defined in PCBFlags. + +
+ + +
+ +


+Next: , +Previous: Flags syntax, +Up: File Syntax + +
+ +

8.8.11 Grid

+ + +

+
Grid [Step OffsetX OffsetY Visible]
+Grid (Step OffsetX OffsetY Visible)
+Grid (Step OffsetX OffsetY)
+
+
+ +

+
Step
Distance from one grid point to adjacent points. This value may be a +floating point number for the first two variants. +
OffsetX OffsetY
The "origin" of the grid. Normally zero. +
Visible
If non-zero, the grid will be visible on the screen. +
+ + +
+ +


+Next: , +Previous: Grid syntax, +Up: File Syntax + +
+ +

8.8.12 Groups

+ + +

+
Groups("String")
+
+
+ +

+
String
+Encodes the layer grouping information. Each group is separated by a +colon, each member of each group is separated by a comma. Group +members are either numbers from 1..N for each layer, and +the letters c or s representing the component side and +solder side of the board. Including c or s marks that +group as being the top or bottom side of the board. + +
          Groups("1,2,c:3:4:5,6,s:7,8")
+
+
+ + +
+ +


+Next: , +Previous: Groups syntax, +Up: File Syntax + +
+ +

8.8.13 Layer

+ + +

+
Layer (LayerNum "Name") (
+   ... contents ...
+)
+
+
+ +

+
LayerNum
The layer number. Layers are numbered sequentially, starting with 1. +The last two layers (9 and 10 by default) are solder-side silk and +component-side silk, in that order. +
Name
The layer name. +
contents
The contents of the layer, which may include attributes, lines, arcs, rectangles, +text, and polygons. +
+ + +
+ +


+Next: , +Previous: Layer syntax, +Up: File Syntax + +
+ +

8.8.14 Line

+ + +

+
Line [X1 Y1 X2 Y2 Thickness Clearance SFlags]
+Line (X1 Y1 X2 Y2 Thickness Clearance NFlags)
+Line (X1 Y1 X2 Y2 Thickness NFlags)
+
+
+ +

+
X1 Y1 X2 Y2
The end points of the line +
Thickness
The width of the line +
Clearance
The amount of space cleared around the line when the line passes +through a polygon. The clearance is added to the thickness to get the +thickness of the clear; thus the space between the line and the +polygon is Clearance/2 wide. +
SFlags
Symbolic or numeric flags +
NFlags
Numeric flags. +
+ + +
+ +


+Next: , +Previous: Line syntax, +Up: File Syntax + +
+ +

8.8.15 Mark

+ + +

+
Mark [X Y]
+Mark (X Y)
+
+
+ +

+
X Y
Coordinates of the Mark, for older element formats that don't have +the mark as part of the Element line. +
+ + +
+ +


+Next: , +Previous: Mark syntax, +Up: File Syntax + +
+ +

8.8.16 Net

+ + +

+
Net ("Name" "Style") (
+   ... connects ...
+)
+
+
+ +

+
Name
The name of this net. +
Style
The routing style that should be used when autorouting this net. +
+ + +
+ +


+Next: , +Previous: Net syntax, +Up: File Syntax + +
+ +

8.8.17 Netlist

+ + +

+
Netlist ( ) (
+   ... nets ...
+)
+
+
+ + +

+ +


+Next: , +Previous: Netlist syntax, +Up: File Syntax + +
+ +

8.8.18 Pad

+ + +

+
Pad [rX1 rY1 rX2 rY2 Thickness Clearance Mask "Name" "Number" SFlags]
+Pad (rX1 rY1 rX2 rY2 Thickness Clearance Mask "Name" "Number" NFlags)
+Pad (aX1 aY1 aX2 aY2 Thickness "Name" "Number" NFlags)
+Pad (aX1 aY1 aX2 aY2 Thickness "Name" NFlags)
+
+
+ +

+
rX1 rY1 rX2 rY2
Coordinates of the endpoints of the pad, relative to the element's +mark. Note that the copper extends beyond these coordinates by half +the thickness. To make a square or round pad, specify the same +coordinate twice. +
aX1 aY1 aX2 aY2
Same, but absolute coordinates of the endpoints of the pad. +
Thickness
width of the pad. +
Clearance
add to thickness to get clearance width. +
Mask
width of solder mask opening. +
Name
name of pin +
Number
number of pin +
SFlags
symbolic or numerical flags +
NFlags
numerical flags only +
+ + +
+ +


+Next: , +Previous: Pad syntax, +Up: File Syntax + +
+ +

8.8.19 PCB

+ + +

+
PCB ["Name" Width Height]
+PCB ("Name" Width Height]
+PCB ("Name")
+
+
+ +

+
Name
Name of the PCB project +
Width Height
Size of the board +
+ +

If you don't specify the size of the board, a very large default is +chosen. + + +

+ +


+Next: , +Previous: PCB syntax, +Up: File Syntax + +
+ +

8.8.20 Pin

+ + +

+
Pin [rX rY Thickness Clearance Mask Drill "Name" "Number" SFlags]
+Pin (rX rY Thickness Clearance Mask Drill "Name" "Number" NFlags)
+Pin (aX aY Thickness Drill "Name" "Number" NFlags)
+Pin (aX aY Thickness Drill "Name" NFlags)
+Pin (aX aY Thickness "Name" NFlags)
+
+
+ +

+
rX rY
coordinates of center, relative to the element's mark +
aX aY
absolute coordinates of center. +
Thickness
outer diameter of copper annulus +
Clearance
add to thickness to get clearance diameter +
Mask
diameter of solder mask opening +
Drill
diameter of drill +
Name
name of pin +
Number
number of pin +
SFlags
symbolic or numerical flags +
NFlags
numerical flags only +
+ + +
+ +


+Next: , +Previous: Pin syntax, +Up: File Syntax + +
+ +

8.8.21 PolyArea

+ + +

+
PolyArea [Area]
+
+
+ +

+
Area
Minimum area of polygon island to retain. If a polygon has clearances that cause an isolated island to be created, then will only be retained if the area exceeds this minimum area. +
+ + +
+ +


+Next: , +Previous: PolyArea syntax, +Up: File Syntax + +
+ +

8.8.22 Polygon

+ + +

+
Polygon (SFlags) (
+   ... (X Y) ...
+   ... [X Y] ...
+   Hole (
+      ... (X Y) ...
+      ... [X Y] ...
+   )
+   ...
+)
+
+
+ +

+
SFlags
Symbolic or numeric flags. +
X Y
Coordinates of each vertex. You must list at least three coordinates. +
Hole (...)
Defines a hole within the polygon's outer contour. There may be zero or more such sections. +
+ + +
+ +


+Next: , +Previous: Polygon syntax, +Up: File Syntax + +
+ +

8.8.23 Rat

+ + +

+
Rat [X1 Y1 Group1 X2 Y2 Group2 SFlags]
+Rat (X1 Y1 Group1 X2 Y2 Group2 NFlags)
+
+
+ +

+
X1 Y1 X2 Y2
The endpoints of the rat line. +
Group1 Group2
The layer group each end is connected on. +
SFlags
Symbolic or numeric flags. +
NFlags
Numeric flags. +
+ + +
+ +


+Next: , +Previous: Rat syntax, +Up: File Syntax + +
+ +

8.8.24 Styles

+ + +

+
Styles("String")
+
+
+ +

+
String
+Encodes the four routing styles pcb knows about. The four styles +are separated by colons. Each style consists of five parameters as follows: + +
+
Name
The name of the style. +
Thickness
Width of lines and arcs. +
Diameter
Copper diameter of pins and vias. +
Drill
Drill diameter of pins and vias. +
Keepaway
Minimum spacing to other nets. If omitted, 10 mils is the default. + +
+ +
+ +
     Styles("Signal,10,40,20:Power,25,60,35:Fat,40,60,35:Skinny,8,36,20")
+     Styles["Logic,1000,3600,2000,1000:Power,2500,6000,3500,1000:
+        Line,4000,6000,3500,1000:Breakout,600,2402,1181,600"]
+
+

Note that strings in actual files cannot span lines; the above example +is split across lines only to make it readable. + + +

+ +


+Next: , +Previous: Styles syntax, +Up: File Syntax + +
+ +

8.8.25 Symbol

+ + +

+
Symbol [Char Delta] (
+Symbol (Char Delta) (
+   ... symbol lines ...
+)
+
+
+ +

+
Char
The character or numerical character value this symbol represents. +Characters must be in single quotes. +
Delta
Additional space to allow after this character. +
+ + +
+ +


+Next: , +Previous: Symbol syntax, +Up: File Syntax + +
+ +

8.8.26 SymbolLine

+ + +

+
SymbolLine [X1 Y1 X2 Y1 Thickness]
+SymbolLine (X1 Y1 X2 Y1 Thickness)
+
+
+ +

+
X1 Y1 X2 Y2
The endpoints of this line. +
Thickness
The width of this line. +
+ + +
+ +


+Next: , +Previous: SymbolLine syntax, +Up: File Syntax + +
+ +

8.8.27 Text

+ + +

+
Text [X Y Direction Scale "String" SFlags]
+Text (X Y Direction Scale "String" NFlags)
+Text (X Y Direction "String" NFlags)
+
+
+ +

+
X Y
The location of the upper left corner of the text. +
Direction
0 means text is drawn left to right, 1 means up, 2 means right to left +(i.e. upside down), and 3 means down. +
Scale
Size of the text, as a percentage of the “default” size of of the +font (the default font is about 40 mils high). Default is 100 (40 +mils). +
String
The string to draw. +
SFlags
Symbolic or numeric flags. +
NFlags
Numeric flags. +
+ + +
+ +


+Next: , +Previous: Text syntax, +Up: File Syntax + +
+ +

8.8.28 Thermal

+ + +

+
Thermal [Scale]
+
+
+ +

+
Scale
Relative size of thermal fingers. A value of 1.0 makes the finger +width twice the clearance gap width (measured across the gap, not +diameter). The normal value is 0.5, which results in a finger width +the same as the clearance gap width. +
+ + +
+ +


+Previous: Thermal syntax, +Up: File Syntax + +
+ +

8.8.29 Via

+ + +

+
Via [X Y Thickness Clearance Mask Drill "Name" SFlags]
+Via (X Y Thickness Clearance Mask Drill "Name" NFlags)
+Via (X Y Thickness Clearance Drill "Name" NFlags)
+Via (X Y Thickness Drill "Name" NFlags)
+Via (X Y Thickness "Name" NFlags)
+
+
+ +

+
X Y
coordinates of center +
Thickness
outer diameter of copper annulus +
Clearance
add to thickness to get clearance diameter +
Mask
diameter of solder mask opening +
Drill
diameter of drill +
Name
string, name of via (vias have names?) +
SFlags
symbolic or numerical flags +
NFlags
numerical flags only +
+ + + +
+ +


+Next: , +Previous: File Syntax, +Up: File Formats + +
+ +

8.9 Object Flags

+ +

Note that object flags can be given numerically (like 0x0147) +or symbolically (like "found,showname,square". Some numeric +values are reused for different object types. The table below lists +the numeric value followed by the symbolic name. + +

+
0x0001 pin
If set, this object is a pin. This flag is for internal use only. +
0x0002 via
Likewise, for vias. +
0x0004 found
If set, this object has been found by FindConnection(). +
0x0008 hole
For pins and vias, this flag means that the pin or via is a hole +without a copper annulus. +
0x0010 rat
If set for a line, indicates that this line is a rat line instead of a +copper trace. +
0x0010 pininpoly
For pins and pads, this flag is used internally to indicate that the +pin or pad overlaps a polygon on some layer. +
0x0010 clearpoly
For polygons, this flag means that pins and vias will normally clear +these polygons (thus, thermals are required for electrical +connection). When clear, polygons will solidly connect to pins and +vias. +
0x0010 hidename
For elements, when set the name of the element is hidden. +
0x0020 showname
For elements, when set the names of pins are shown. +
0x0020 clearline
For lines and arcs, the line/arc will clear polygons instead of +connecting to them. +
0x0020 fullpoly
For polygons, the full polygon is drawn (i.e. all parts instead of only the biggest one). +
0x0040 selected
Set when the object is selected. +
0x0080 onsolder
For elements and pads, indicates that they are on the solder side. +
0x0080 auto
For lines and vias, indicates that these were created by the +autorouter. +
0x0100 square
For pins and pads, indicates a square (vs round) pin/pad. +
0x0200 rubberend
For lines, used internally for rubber band moves. +
0x0200 warn
For pins, vias, and pads, set to indicate a warning. +
0x0400 usetherm
Obsolete, indicates that pins/vias should be drawn with thermal +fingers. +
0x0400
Obsolete, old files used this to indicate lines drawn on silk. +
0x0800 octagon
Draw pins and vias as octagons. +
0x1000 drc
Set for objects that fail DRC. +
0x2000 lock
Set for locked objects. +
0x4000 edge2
For pads, indicates that the second point is closer to the edge. For +pins, indicates that the pin is closer to a horizontal edge and thus +pinout text should be vertical. +
0x8000 marker
Marker used internally to avoid revisiting an object. +
0x10000 nopaste
For pads, set to prevent a solderpaste stencil opening for the +pad. Primarily used for pads used as fiducials. +
+ + +
+ +


+Previous: Object Flags, +Up: File Formats + +
+ +

8.10 PCBFlags

+ +
+
0x00001
Pinout displays pin numbers instead of pin names. +
0x00002
Use local reference for moves, by setting the mark at the beginning of +each move. +
0x00004
When set, only polygons and their clearances are drawn, to see if +polygons have isolated regions. +
0x00008
Display DRC region on crosshair. +
0x00010
Do all move, mirror, rotate with rubberband connections. +
0x00020
Display descriptions of elements, instead of refdes. +
0x00040
Display names of elements, instead of refdes. +
0x00080
Auto-DRC flag. When set, PCB doesn't let you place copper that +violates DRC. +
0x00100
Enable 'all-direction' lines. +
0x00200
Switch starting angle after each click. +
0x00400
Force unique names on board. +
0x00800
New lines/arc clear polygons. +
0x01000
Crosshair snaps to pins and pads. +
0x02000
Show the solder mask layer. +
0x04000
Draw with thin lines. +
0x08000
Move items orthogonally. +
0x10000
Draw autoroute paths real-time. +
0x20000
New polygons are full ones. +
0x40000
Names are locked, the mouse cannot select them. +
0x80000
Everything but names are locked, the mouse cannot select anything else. +
0x100000
New polygons are full polygons. +
0x200000
When set, element names are not drawn. +
+ + +
+ +


+Next: , +Previous: File Formats, +Up: Top + +
+ +

9 Library Creation

+ +

+This chapter provides a detailed look at how footprint libraries are +created and used. The chapter is split into two section, the first +section covers the "old" style libraries which use the m4 macro +processor and the second section covers the "new" style libraries. + +

Despite the names "old" and "new", both styles of libraries are useful +and the "old" style should not be discounted because of its name. The +advantage of the old style libraries is that one can define a family of +footprints, say a DIP package, and then quickly produce all the members +of that family. Because the individual packages make use of a base +definition, corrections made to the base definition propagate to all the +members of a family. The primary drawback to using this library +approach is that the effort to create a single footprint is more than a +graphical interface and may take even longer if the user has not used +the m4 macro language previously. + +

The new style of footprint libraries stores each footprint in its own +file. The footprints are created graphically by placing pads and then +converting a group of pads to a component. This library method has the +advantage of being quick to learn and it is easily to build single +footprints quickly. If you are building a family of parts, however, the +additional effort in creating each one individually makes this approach +undesirable. In addition, creating a part with a large pin count +can be quite tedious when done by hand. + +

9.1 Old Style (m4) Libraries

+ +

The old style libraries for pcb use the m4 macro processor to +allow the definition of a family of parts. There are several files +associated with the old style library. The file common.m4 is the +top level file associated with the library. common.m4 defines a +few utility macros which are used by other portions of the library, +and then includes a predefined set of library files (the lines like +include(geda.inc)). + +

9.1.1 Overview of Oldlib Operation

+ +

The big picture view of the old style library system is that the library +is simply a collection of macro definitions. The macros are written in +the m4 macro language. An example of a macro and what it expands +to is the following. One of the predefined footprints in the library +which comes with PCB is the PKG_SO8 macro. Note that all the +footprint macros begin with PKG_. For this particular example, +PKG_SO8 is a macro for an 8-pin small outline surface mount +package. All of the footprint macros take 3 arguments. The first is the +canonical name of the footprint on the board. In this case "SO8" is an +appropriate name. The second argument is the reference designator on +the board such as "U1" or "U23". The third and final argument is the +value. For an integrated circuit this is usually the part number such +as "MAX4107" or "78L05" and for a component such as a resistor or +capacitor it is the resistance or capacitance. The complete call to the +macro in our example is ‘PKG_SO8(SO8, U1, MAX4107)’. When +processed by m4 using the macros defined in the PCB library, this +macro expands to +

     Element(0x00 "SO8" "U1" "MAX4107" 146 50 3 100 0x00)
+     (
+     	Pad(10 25 38 25 20 "1" 0x00)
+     	Pad(10 75 38 75 20 "2" 0x100)
+     	Pad(10 125 38 125 20 "3" 0x100)
+     	Pad(10 175 38 175 20 "4" 0x100)
+     	Pad(214 175 242 175 20 "5" 0x100)
+     	Pad(214 125 242 125 20 "6" 0x100)
+     	Pad(214 75 242 75 20 "7" 0x100)
+     	Pad(214 25 242 25 20 "8" 0x100)
+     	ElementLine(0 0 151 0 10)
+     	ElementArc(126 0 25 25 0 180 10)
+     	ElementLine(101 0 252 0 10)
+     	ElementLine(252 0 252 200 10)
+     	ElementLine(252 200 0 200 10)
+     	ElementLine(0 200 0 0 10)
+     	Mark(29 25)
+     )
+
+

which is the actual definition of the footprint that the PCB program +works with. As a user of PCB the only time you will need or want to run +m4 directly is when you are debugging a new library addition. In +normal operation, the calls to m4 are made by helper scripts that +come with PCB. + +

Tools such as gsch2pcb (used to interface the gEDA schematic +capture program to PCB layout) will call m4 to produce an initial +PCB layout that includes all the components on a schematic. In +addition, when manually instantiating parts from within PCB, m4 +will be called by PCB's helper scripts to produce the footprints. + +

9.1.2 The Library Scripts

+ +

There are several scripts that are used for processing the m4 +libraries. This section briefly describes these scripts and details how +they are used by PCB. + +

9.1.2.1 Scripts Used During Compilation
+ +

The scripts described in this section are used during compilation of +PCB. They are run automatically by the build system, but are described +here to help document the complete library processing that occurs. +During the build of PCB, the following actions are taken. The +CreateLibrary.sh script is run to produce an M4 "frozen file". +This frozen file is simply a partially processed M4 input file which can +be loaded by M4 more quickly than the original input file. + +

A typical call to CreateLibrary.sh used during the compilation of +PCB is: +

     ./CreateLibrary.sh -I . pcblib ./common.m4 TTL_74xx_DIL.m4
+     connector.m4 crystal.m4 generic.m4 genericsmt.m4 gtag.m4
+     jerry.m4 linear.m4 logic.m4 lsi.m4 memory.m4 optical.m4 pci.m4
+     resistor_0.25W.m4 resistor_adjust.m4 resistor_array.m4
+     texas_inst_amplifier.m4 texas_inst_voltage_reg.m4
+     transistor.m4 geda.m4
+
+

The ‘-I .’ says to search in the current directory for the +.m4 files. The output frozen file is pcblib. The main +common.m4 file is listed as well as all of the *.m4 files +which define the components in the library. + +

In addition, a library contents file is created during the build with +the CreateLibraryContents.sh script. +A typical call to CreateLibrary.sh used during the compilation of +PCB is: +

     ./CreateLibraryContents.sh -I . ./common.m4 TTL_74xx_DIL.list
+     connector.list crystal.list generic.list genericsmt.list gtag.list
+     jerry.list linear.list logic.list lsi.list memory.list optical.list
+     pci.list resistor_0.25W.list resistor_adjust.list resistor_array.list
+     texas_inst_amplifier.list texas_inst_voltage_reg.list transistor.list
+     geda.list > pcblib.contents
+
+

The pcblib.contents file is used by the PCB program to define the +libraries and components which will be displayed when you bring up +the library window from within PCB. An example of part of the +pcblib.contents file is: +

     TYPE=~TTL 74xx DIL
+     7400_dil:N:7400:4 dual-NAND
+     7401_dil:N:7401:4 dual-NAND OC
+     7402_dil:N:7402:4 dual-NOR
+     TYPE=~geda
+     geda_DIP6:DIP6:DIP6:Dual in-line package, narrow (300 mil)
+     geda_DIP8:DIP8:DIP8:Dual in-line package, narrow (300 mil)
+     geda_DIP14:DIP14:DIP14:Dual in-line package, narrow (300 mil)
+     geda_ACY300:ACY300:ACY300:Axial non-polar component,
+
+

The TYPE= lines define the library name that will show up in the +library window in PCB. The other lines define the actual components in +the library. + +

9.1.2.2 Scripts Used by PCB at Runtime
+ +

When PCB is first executed, it makes a call to the +ListLibraryContents.sh script. This script provides the PCB +program with the contents of the library contents file created when PCB +was compiled. A typical call to ListLibraryContents.sh is +

     ../lib/ListLibraryContents.sh .:/tmp/pcb-20030903/src/../lib pcblib
+
+

This command says to search the path +‘.:/tmp/pcb-20030903/src/../lib’ for a file called +pcblib.contents (the .contents part is added +automatically) and display the contents of the file. +PCB parses this output and generates the library window entries. + +

When you pick a library component from the library window, PCB calls the +QueryLibrary.sh script to actually pull the footprint into the +layout. For example, when the ACY300 component is selected from the +~geda library, the generated call may be: + +

     /tmp/pcb-20030903/src/../lib/QueryLibrary.sh
+     .:/tmp/pcb-20030903/src/../lib pcblib geda_ACY300 ACY300
+     ACY300
+
+

If you were to run this command by hand you would see the PCB code for +the element: +

     Element(0x00 "Axial non-polar component," "" "ACY300" 245 70 0 100 0x00)
+     (
+     	Pin(0 25 50 20 "1" 0x101)
+     	Pin(300 25 50 20 "2" 0x01)
+     
+     	ElementLine(0 25 75 25 10)
+     	ElementLine(225 25 300 25 10)
+     
+     	ElementLine(75 0 225 0 10)
+     	ElementLine(225 0 225 50 10)
+     	ElementLine(225 50 75 50 10)
+     	ElementLine(75 50 75 0 10)
+     
+     #       ElementArc(X1 Y 50 50 270 180 10)
+     #       ElementArc(X2 Y 50 50 90 180 10)
+     
+     	Mark(75 25)
+     )
+
+

9.1.3 Creating an Oldlib Footprint

+ +

This section provides a complete example of defining a family of +footprints using the M4 style library. As a vehicle for this example, a +family of footprints for surface mount resistors and capacitors will be +developed. The file example.inc should have been installed on +your system as $prefix/share/examples/oldlib/example.inc where +$prefix is often times /usr/local. + +

The example.inc file defines a macro called +COMMON_PKG_RCSMT which is a generic definition for a surface +mount footprint with two identical, rectangular pads. This macro will +be called with different parameters to fill out the family of parts. +The arguments to the COMMON_PKG_RCSMT are: +

     # -------------------------------------------------------------------
+     # the definition for surface mount resistors and capacitors
+     # $1: canonical name
+     # $2: name on PCB
+     # $3: value
+     # $4: pad width   (in direction perpendicular to part)
+     # $5: pad length  (in direction parallel with part)
+     # $6: pad spacing (center to center)
+     # $7: distance from edge of pad to silk (in direction
+     #     perpendicular to part)
+     # $8: distance from edge of pad to silk (in direction parallel
+     #     with part)
+     # $9: Set to "no" to skip silk screen on the sides of the part
+
+
     define(`COMMON_PKG_RCSMT',
+     	`define(`XMIN', `eval( -1*`$6'/2 - `$5'/2 - `$8')')
+     	define(`XMAX', `eval(  `$6'/2 + `$5'/2 + `$8')')
+     	define(`YMIN', `eval(-1*`$4'/2 - `$7')')
+     	define(`YMAX', `eval(   `$4'/2 + `$7')')
+     Element(0x00 "$1" "$2" "$3" eval(XMIN+20) eval(YMAX+20) 0 100 0x00)
+     (
+     	ifelse(0, eval($4>$5),
+     	# Pads which have the perpendicular pad dimension less
+     	# than or equal to the parallel pad dimension
+     	Pad(eval(-1*(   $6 + $5 - $4)/2) 0
+     	    eval((-1*$6 + $5 - $4)/2) 0 eval($4) "1" 0x100)
+     	Pad(eval(-1*(-1*$6 + $5 - $4)/2) 0
+     	    eval((   $6 + $5 - $4)/2) 0 eval($4) "2" 0x100)
+     	,
+     	# Pads which have the perpendicular pad dimension greater
+     	# than or equal to the parallel pad dimension
+     	Pad(eval(-1*$6/2) eval(-1*($4 - $5)/2)
+     	    eval(-1*$6/2)  eval(($4 - $5)/2) eval($5) "1" 0x100)
+     	Pad(eval(   $6/2) eval(-1*($4 - $5)/2)
+     	    eval(   $6/2)  eval(($4 - $5)/2) eval($5) "2" 0x100)
+     	)
+     
+     	# silk screen
+     	# ends
+     	ElementLine(XMIN YMIN XMIN YMAX 10)
+     	ElementLine(XMAX YMAX XMAX YMIN 10)
+     	# sides
+     ifelse($9,"no",
+     	#skip side silk
+     	,
+     	ElementLine(XMIN YMIN XMAX YMIN 10)
+     	ElementLine(XMAX YMAX XMIN YMAX 10)
+     )
+     	Mark(0 0)
+     )')
+
+

Note that the part has been defined with the mark located at +(0,0) and that the pads have been placed with the mark at the +common centroid of the footprint. While not a requirement, this is +highly desirable when developing a library that will need to interface +with a pick and place machine used for factory assembly of a board. + +

The final part of example.inc defines particular versions of the +generic footprint we have created. These particular versions correspond +to various industry standard package sizes. +

     # 0402 package
+     #
+     # 30x30 mil pad, 15 mil metal-metal spacing=>
+     # 15 + 15 + 15 = 45 center-to-center
+     define(`PKG_RC0402',
+       `COMMON_PKG_RCSMT(`$1', `$2', `$3', 30, 30, 45, 0, 10, "no")')
+     
+     # 0603 package
+     #
+     # 40x40 mil pad, 30 mil metal-metal spacing=>
+     #  30 + 20 + 20 = 70 center-to-center
+     define(`PKG_RC0603',
+       `COMMON_PKG_RCSMT(`$1', `$2', `$3', 40, 40, 70, 10, 10)')
+     
+     # 1206 package
+     #
+     # 40x60 mil pad, 90 mil metal-metal spacing=>
+     #  90 + 20 + 20 = 130 center-to-center
+     define(`PKG_RC1206',
+       `COMMON_PKG_RCSMT(`$1', `$2', `$3', 60, 40, 130, 10, 10)')
+
+

At this point, the example.inc file could be used by third party +tools such as gsch2pcb. However to fully integrate our +footprints into PCB we need to create the example.m4 and +example.list files. The example.m4 file defines +descriptions for the new footprints. +

     define(`Description_my_RC0402',
+       ``Standard SMT resistor/capacitor (0402)'')
+     define(`Description_my_RC0603',
+       ``Standard SMT resistor/capacitor (0603)'')
+     define(`Description_my_RC1206',
+       ``Standard SMT resistor/capacitor (1206)'')
+
+

Finally we need to create the example.list file. +

     my_RC0402:RC0402:RES0402
+     my_RC0402:RC0402:CAP0402
+     my_RC0603:RC0603:RES0603
+     my_RC0603:RC0603:CAP0603
+     my_RC1206:RC1206:RES1206
+     my_RC1206:RC1206:CAP1206
+
+

The first field in the list file has the name corresponding to the +Description definitions in example.m4. The second field is the +template name which corresponds to the macros PKG_* we defined in +example.inc with the leading PKG_ removed. It is the +second field which controls what footprint will actually appear on the +board. The final +field is the name of the part type on the board. The first line in our +example.list file will produce a menu entry in the library window +that reads: +

     CAP0402, Standard SMT resistor/capacitor (0402)
+
+

The CAP0402 portion comes directly from the third field in +example.list and the longer description comes from descriptions +macros in example.m4. Please note that any extra white space +at the end of a line in the .list files will cause them to +not work properly. + +

9.1.4 Troubleshooting Old Style Libraries

+ +

A powerful technique to help debug problems with libraries is to invoke +the m4 processor directly. This approach will provide error +output which is not visible from within PCB. The following example +shows how one might try to debug an 8 pin small outline (SO8) package. The +macro name for the package is PKG_SO8. In this example, the +canonical name that is to be associated with the part is SO8, the +reference designator is U1, and the value is MAX4107 (the part number). + +

     echo "PKG_SO8(SO8, U1, MAX4107)" | \
+        gm4 common.m4 - | \
+        awk '/^[ \t]*$/ {next} {print}' | \
+        more
+
+

The awk call simply removes blank lines which make the output +hard to read. + +

For this particular example, the output is: +

     Element(0x00 "SO8" "U1" "MAX4107" 146 50 3 100 0x00)
+     (
+     	Pad(10 25 38 25 20 "1" 0x00)
+     	Pad(10 75 38 75 20 "2" 0x100)
+     	Pad(10 125 38 125 20 "3" 0x100)
+     	Pad(10 175 38 175 20 "4" 0x100)
+     	Pad(214 175 242 175 20 "5" 0x100)
+     	Pad(214 125 242 125 20 "6" 0x100)
+     	Pad(214 75 242 75 20 "7" 0x100)
+     	Pad(214 25 242 25 20 "8" 0x100)
+     	ElementLine(0 0 151 0 10)
+     	ElementArc(126 0 25 25 0 180 10)
+     	ElementLine(101 0 252 0 10)
+     	ElementLine(252 0 252 200 10)
+     	ElementLine(252 200 0 200 10)
+     	ElementLine(0 200 0 0 10)
+     	Mark(29 25)
+     )
+
+

9.2 New Style Libraries

+ +

Footprints for the new style library are created graphically using the +PCB program. A single footprint is saved in each file. + +

9.2.1 Creating Newlib Footprints

+ +

To create +

    +
  1. Start PCB with an empty layout. +
  2. Make the component layer active. +
  3. For a leaded part, select the via tool and place vias where the +pads for the part should go. For surface mount pads, draw line +segments. Note that until the footprint is completed, the surface +mount pads will remain rounded. Currently a rectangle or polygon +may not be used as a pad. +
  4. For each via and line segment which will become a pad, select it +and press 'n' to be able to enter a name. Enter +the pin number and press enter. +
  5. Make the silk layer active. +
  6. Using the line and arc tools, draw a silk screen outline for the +part. +
  7. Using the selection tool, select all of the pins and silk screen +for the part. +
  8. Place the pointer above the reference point for the part. This is +typically the common centroid. Keeping the pointer there, shift-right-click +to bring up the popup menu and choose "convert +selection to element". +
  9. At this point, the vias, line segments, and silk screen will have +been converted to an element. To change any of the line segments to +have square ends rather than round ends, select the pads by holding +down the shift key and clicking each pad with the center mouse button. +Now under the Select menu, "Change square-flag of selected objects" +section, choose "Pins". +
  10. Select the element, shift-right-click to bring up the popup menu, and +choose "Copy Selection to Buffer". Now left-click on the center of +the new element. +
  11. Under the buffer menu, choose "save buffer elements to file" to +save the new footprint to a file. +
  12. Press ESC to exit from buffer mode. +
+ +

9.2.2 Modifying Newlib Footprints

+ +
    +
  1. In the Pcb program, instantiate the footprint you wish to modify. +
  2. Using the selection tool, select the footprint. +
  3. Now left-click on the selected element, this brings up a popup menu, choose +"Cut Selection to Buffer" from the popup menu. +
  4. Under the buffer menu, choose "break buffer element to pieces", +and then left-click to place the broken apart footprint to an open area of +the layout. Note that you must use the items under the buffer menu, the +items with the same names in the popup menu do not work. +
  5. Make your desired modifications to the footprint and then convert +the pieces back to an element using the same procedure as when starting +from scratch on a new footprint. +
+ + +
+ +


+Next: , +Previous: Library Creation, +Up: Top + +
+ +

10 Schematic Capture for PCB

+ +

+When designing a circuit board of any complexity, a schematic capture +front-end for the design is highly desired. Any schematic capture +program which is able to generate a netlist in a user defined format as +well as a bill of materials can be made to work with PCB. Currently, we +are aware of two freely available schematic capture programs which can +interface with PCB. This chapter shows how a design can be taken from +start to finish using either of these two tools for schematic capture +and PCB for layout. + +

+ +
+ +


+Next: , +Up: Schematic Frontends + +
+ +

10.1 gEDA

+ +

+This section shows how to use gEDA as the schematic capture front-end for +a PCB design. This section is not intended to be complete documentation +on gEDA and it is assumed that the user has at least some familiarity +with the gEDA suite of programs. + +

The basic steps in a gEDA + PCB design flow are: +

    +
  1. Set up project directories +
  2. Set up gEDA (gschem/gnetlist) config files +
  3. Set up gsch2pcb config files +
  4. Capture schematics using gschem (part of gEDA) +
  5. Create any unique PCB footprints needed for the design +
  6. Generate initial PCB design using gsch2pcb (part of gEDA) +
  7. Layout circuit board using pcb +
  8. Make any additional schematic changes with gschem and +forward annotate to PCB with gsch2pcb +
  9. Generate photoplot files (RS-274X, also known as "Gerber") for +board vendor +
+ +

10.1.1 Set Up Project Directories

+ +

Although not required, a typical project directory will contain the +schematics and board layout at the top level. +Schematic symbols and circuit board footprints which are unique to this +project are stored in subdirectories. For this example, sym +contains the project specific schematic symbols and pkg contains +the project specific footprints. Set up the project subdirectory and +subdirectories by executing: +

     mkdir ~/myproj
+     cd ~/myproj
+     mkdir sym
+     mkdir pkg
+     mkdir pkg/newlib
+     mkdir pkg/m4
+
+

10.1.2 Set Up gEDA Config Files

+ +

The gEDA tools, specifically gschem and gnetlist, use +configuration files to set the search path for symbol libraries in +addition to other user preferences. Create a file in the top level +project directory called gschemrc. Add the following lines to +that file: +

     
+     ;; list libraries here.  Order matters as it sets the
+     ;; search order
+     (component-library "./sym")
+     
+
+

This sets the local search path for the schematic capture program +gschem. Now the netlister, gnetlist, must also be +configured. This can be done by copying the file gschemrc to +gnetlistrc by running ‘cp gschemrc gnetlistrc’. +Alternatively, you can create a soft link so only a single file needs to +be updated if additional symbol paths are added. The link is created by +running ‘ln -s gschemrc gnetlistrc’. + +

10.1.3 Set Up gsch2pcb Config Files

+ +

The program gsch2pcb, not to be confused with the older +gschem2pcb script, is used to link the schematic to layout. +gsch2pcb is responsible for creating the netlist used to provide +connectivity information to PCB as well creating an initial layout with +all components instantiated in the design. Forward annotation of +schematic changes to the layout is also done using gsch2pcb. +gsch2pcb uses a project file to set up the schematic file names, +PCB library locations, and output file names. Create a project file +called project using the following as an example: +

     
+     # List all the schematics to be netlisted
+     # and laid out on the pc board.
+     schematics      first.sch second.sch third.sch
+     
+     # For an output-name of foo, gsch2pcb generates files
+     # foo.net, foo.pcb, and foo.new.pcb.  If there is no
+     # output-name specified, the file names are derived from
+     # the first listed schematic, i.e. first.net, etc.
+     output-name  preamp
+     
+
+

10.1.4 Capture Schematics Using gschem

+ +

This section is fairly brief and assumes familiarity with using the +gschem schematic capture program. As you are creating your +schematics, be sure to observe the following rules: +

    +
  • Make sure that each component in the schematic has a +footprint attribute that corresponds to a footprint in the PCB +library or a footprint you plan on creating. +
  • Make sure all reference designators are unique. One way to ensure +this is to run the refdes_renum script (part of gEDA) after the +schematics are created. +
+ +

10.1.5 Create Any Unique PCB Footprints

+ +

Create the new footprints you design needs using either the m4 style or +newlib style of PCB libraries. Refer to Library Creation for details on this +process. For m4 style footprints, store them in the pkg/m4 +subdirectory and for newlib footprints, store them in the +pkg/newlib subdirectory. + +

10.1.6 Generate Initial PCB Design Using gsch2pcb

+ +

The gsch2pcb program connects the schematic and layout. It basic +operation is to call gnetlist to generate the connectivity +netlist that PCB used to verify connectivity and to instantiate all +elements found in the schematic to a new layout. +The default, as of gsch2pcb version 0.9, is to use any found m4 +style parts first and then search for newlib style if no old style part +was found. By using the --use-files or -f flag to gsch2pcb +priority is given to newlib style parts even if m4 style are found. You +may wish to verify this in the gsch2pcb documentation in case +this changes in the future. +To start your layout, +run ‘gsch2pcb project’ where project is the project file +created previously. This will create a new netlist file, +preamp.net, and a new layout file, preamp.pcb. + +

10.1.7 Layout Circuit Board

+ +

Run PCB on the new layout by running ‘pcb preamp.pcb’. +Load the netlist file by selecting "load netlist file" from the "file" +menu. In the file selection dialog box, choose preamp.net. This +loads connectivity information into PCB. + +

Using the selection tool, grab and move apart the various footprints +with the middle mouse button. Once the parts are moved apart from each +other, choose "optimize rats-nest" from the "Connects" menu. This menu +choice will display and optimize the rats nest. Use the rats nest to +help guide placement of the parts. You may wish to re-run the "optimize +rats-nest" command after moving parts around. + +

After the placement is complete, use the line tool to add traces to the +board. As traces are added, the corresponding rats line will disappear. + +

10.1.8 Forward Annotation of Schematic Changes

+ +

If schematic changes are made after the layout has started, +gsch2pcb can be used to forward annotate these changes to the +layout. To forward annotate schematic changes, run ‘gsch2pcb +project’. This command will create the files preamp.new.pcb, +preamp.net, and modify the file preamp.pcb. The +modifications to preamp.pcb include forward annotation of +schematic component value changes, adds any new components, and removes +any deleted components. + +

10.1.9 Generate Photoplot Files (RS-274X)

+ +

After the layout is complete, choose "edit layer-groupings" from the +"Settings" menu. The LayerGroups form lets you specify which layers +will appear in each output layer group. For example, in the default +form, layer group 1 has "front" and "front side" in it. The +output file 1.gbr if DOS file names are used, or +somename_front.gbr if long file names are used will contain the +"front" and "front side" layers in it. Usually the defaults are +sufficient, but this form is still a useful reference. + +

Choose "print layout..." from the "File" menu. In the print dialog box, +select "Gerber/RS-274X" for the device +driver. Select the "outline", "alignment", and "drillhelper" options. +To get DOS compatible file names, select the "DOS (8.3) names" option, +otherwise enter "preamp" for the filename. Press "OK". + +

The following output files should have been created in the project directory. +The names in parentheses correspond to the DOS compatible output file names. +

+
preamp_frontsilk.gbr (csilk.gbr)
Top side silk screen. +
preamp_frontmask.gbr (cmask.gbr)
Top side soldermask relief. +
preamp_front.gbr (1.gbr)
Top copper. +
preamp_backmask.gbr (smask.gbr)
Bottom side soldermask relief. +
preamp_back.gbr (2.gbr)
Bottom Copper. +
preamp_fab.gbr (fab.gbr)
Fabrication drawing. Also known as the drill drawing. This drawing is +used for reference by the board vendor but is not directly used in the +fabrication process. +
preamp_plated-drill.cnc (pdrill.cnc)
NC Drill format file for the plated through holes. +
preamp_unplated-drill.cnc (udrill.cnc)
NC Drill format file for the unplated through holes. +
preamp_bom.txt (bom.txt)
A bill of materials for the layout. +
preamp_xy.txt (xy.txt)
Centroid (X-Y) data for driving automated assembly equipment. +
+ + + +
+ +


+Previous: gEDA, +Up: Schematic Frontends + +
+ +

10.2 xcircuit

+ +

+If anyone cares to contribute this section, it will get added. Please +submit changes to the bug tracking system for PCB which can be found from +the PCB homepage at http://pcb.gpleda.org. + + +

+ +


+Next: , +Previous: Schematic Frontends, +Up: Top + +
+ +

Appendix A Installation and Troubleshooting

+ +

Compiling and installing the package should be straightforward. If any problems +occur, please contact the author Thomas.Nau@rz.uni-ulm.de, or the +current maintainer haceaton@aplcomm.jhuapl.edu to find +a solution and include it into the next release. + +

+ +
+ +


+Next: , +Up: Installation + +
+ +

A.1 Compiling and Installing

+ +

+This section covers the steps which are necessary to compile the package. + +

+ +
+ +


+Next: , +Up: compiling + +
+ +

A.1.1 Quick Start

+ +

+Starting with version 2.0, Pcb has switched to a GNU +autoconf/automake build system. Installation of Pcb consists of +three steps: configuration, building, and installing. +In a typical installation, these steps are as simple as +

     ./configure
+     make
+     make install
+
+
+ +


+Previous: quickstart, +Up: compiling + +
+ +

A.1.2 Running the configure Script

+ +

+The configure script accepts all of the standard GNU configure +options. For a complete list of configuration options, run +./configure --help. + + + +

INFOLIBDIR
must be set to the directory where your GNU info files are located. + +


PCBLIBDIR
is the path of a directory where the font files will be installed. + +


DEFAULTFONT
the name of the default font file. + +


DEFAULTLIBRARY
the name of the default library. + +


GNUM4
the name of GNUs m4 version. + +


BTNMOD
If your window manager has already bound Mod1 together with some +function keys you may want to change this setting. This is true for HP-VUE. + +
+ +

If you find things which must be changed to compile on your system, +please add the appropriate autoconf tests (if you are familiar with +that) and mail a copy to the maintainer, harry eaton, at +haceaton@aplcomm.jhuapl.edu. + +

If you do not have the appropriate permissions you should run +./pcbtest.sh in the src directory to run Pcb from +the installation directory. + +

+ +


+Previous: compiling, +Up: Installation + +
+ +

A.2 Troubleshooting

+ +

+There are some known problems. Most of them are related to +missing parts of a standard X11 distribution. Some others are caused by +third party applications such as X servers. To make this list more +complete please mail your problems and, if available, solutions to the author. +The mail address may be found at the beginning of this chapter. +In any case, read X11. + +

By the way, you MUST HAVE AN ANSI COMPILER to make Pcb work. + +

Another source of problems are older versions of flex and bison. +Pcb definitely works with flex-2.4.7 and bison-1.22 or +later. The problems will result in a syntax error while parsing files. +This should only be a problem if you have modified the flex or +bison input files. + +

The following list gives you just an idea because I'm not able to test +all Pcb releases on all platforms. + +

+ +
+ +


+Next: , +Up: problems + +
+ +

A.2.1 HP Series 700 and 800

+ +

+You have to install several X11 include files +or, better, install a complete X11R5 release. Hewlett-Packard doesn't +support the Athena Widgets. So the header files and libraries are missing +from the application media, but they are available as a patch. +They also do not ship the ANSI compiler with the normal operating +system release so you have to buy one or use GCC. +Some of the tools are available as patches. + +

In addition, Pcb has been successfully tested on these platforms with +HPUX 9.*, 10.* running self-compiled X11R5. + +

+ +


+Next: , +Previous: HP, +Up: problems + +
+ +

A.2.2 Sun SPARC architecture

+ +

+There are no known problems with Sun machines if they use X11R5 instead +of OpenWindows. Pcb compiled successfully with all kinds of +SPARCstations Solaris-2.[345]. + +

For problems with OpenWindows refer to X11. + +

+ +


+Next: , +Previous: Sun, +Up: problems + +
+ +

A.2.3 Silicon Graphics

+ +

+Pcb has been tested on some boxes running either IRIX-4.0.5 or +IRIX-5.3. The former one uses a X11R4 server. +There are no problems. +For known problems +with X11R4, see X11. + +

+ +


+Next: , +Previous: SGI, +Up: problems + +
+ +

A.2.4 DEC Alpha

+ +

+Pcb compiled and runs without problems on DEC UNIX V3.2c. + +

+ +


+Next: , +Previous: DEC Alpha, +Up: problems + +
+ +

A.2.5 SCO Unix

+ +

+John DuBois <spcecdt@deeptht.armory.com> wrote: +

     SCO-ODT-3.0 requires the latest version of tls003, the Athena
+     widget library (available from sosco.sco.com). The main problems
+     I have encountered are it core dumps fairly often, especially
+     while loading/dropping elements...
+
+

I'll see what I am able to do as soon as I have access to an SCO system. + +

+ +


+Next: , +Previous: SCO, +Up: problems + +
+ +

A.2.6 Linux

+ +

+Since the X11 version of Pcb has been developed on a Linux +system here are no known problems. + +

+ +


+Next: , +Previous: Linux, +Up: problems + +
+ +

A.2.7 FreeBSD and NetBSD

+ +

+Pcb has been tested on NetBSD and works without any problems. +You may also be able to find a NetBSD package at +ftp://ftp.netbsd.org/pub/NetBSD/packages/cad/pcb/README.html or a +FreeBSD port at +http://www.freebsd.org/cgi/url.cgi?ports/cad/pcb/pkg-descr. + +

+ +


+Next: , +Previous: BSD, +Up: problems + +
+ +

A.2.8 Problems related to X11

+ +

+There are a some problems related to X11R4 or systems derived from +X11 such as OpenWindows. See Sun. You at least have to change +all occurances of baseTranslations in the resource files to +translations if you are using a X11R4 server. Look at the +X11R5 Intrinsics manual for details. + +

The panner widget (print dialog box) appears only in release X11R5 and +later. It really simplifies adjusting the offsets. +With earlier releases the printout will always appear in the center of the +page. + +

You may have some problems in a mixed X11-OpenWindows +environment. + +

Pcb has been tested successfully with X11R6 under Linux 1.1.59 +and later. + +

+ +


+Previous: X11, +Up: problems + +
+ +

A.2.9 Problems related to TeX

+ +

+If your TeX installation complains about a missing texinfo.tex +file copy the one included in this release (directory doc +to your TeX macro directory. +Note, there are probably newer versions of this file available from some +FTP sites. +TeX-3.0 failed, TeX-3.14 worked just fine. Check our FTP server +ftp.uni-ulm.de for ready-to-print versions of the manuals. + + +

+ +


+Next: , +Previous: Installation, +Up: Top + +
+ +

Appendix B Customizing the Menus

+ +

The menu system is driven off a data file that contains +resources. A resource is a hierarchical description of a data +tree which, in this case, is mapped to the hierarchical menus used by +Pcb. + +

+ +
+ +


+Next: , +Up: Custom Menus + +
+ +

B.1 Resource Syntax

+ +

A resource file is a simple text file. It contains curly braces to +group things, spaces between things, and double quotes when strings +need to include spaces. There are four fundamental ways of adding +data to a resource. + +

First, a string (either a single word or a quoted string with spaces, +we call both “strings” in this appendix) can be added all by itself, +to add a string resource to the current resource. This is used, for +example, to define the string printed on a menu button. In this +example, four strings are added to the File resource: + +

     File = {
+       Sample
+       "longer sample"
+       some text
+     }
+
+

Second, a named string may be added by giving two strings separated by +an equals sign. This is used to specify X resources and a few other +optional parameters of menus, for example. Note that a string all by +itself is thus an “unnamed” string. + +

     {"Layer groups" foreground=red sensitive=false}
+
+

Third, an unnamed subresource may be added. This is used to create +submenus and menu buttons. To add a subresource, simply group other +things in curly braces. This example describes a resource containing +one string and three subresources: + +

     {File
+       {New do_new()}
+       {Save do_save()}
+       {Quit do_quit()}
+     }
+
+

Lastly, a named subresource may be added by prefixing an unnamed +subresource with a string and an equals sign, just as when naming +strings. This syntax is used to name the resources used for the main +menu and popup menus: + +

     MainMenu = {
+       ...
+       }
+
+

Additionally, the menu parser allows for “hooks” whereby portions of +the menu system can be programmatically created at runtime by the +application. These hooks are invoked by a single word proceeded by an +at sign, such as this example where most of the Sizes menu is created +automatically: + +

     {Sizes
+         @sizes
+         {"Adjust active sizes ..." AdjustStyle(0)}
+         }
+
+

In addition to all that, any unquoted pound sign (#) begins a +comment. Commented text continues until the end of the containing +line. Comments may begin at the beginning of a line, or after other +text on the line: + +

     # This is a comment
+     MainMenu = { # This is also a comment
+
+
+ +


+Next: , +Previous: Resource Syntax, +Up: Custom Menus + +
+ +

B.2 Menu Definitions

+ +

To best understand this section, you should find the +pcb-menu.res file that your Pcb uses and refer to it for +examples (see Menu Files and Defaults). Note that the lesstif +GUI uses pcb-menu.res and the GTK+ GUI uses gpcb-menu.res. +The file format is identical however and if so desired, one can make +one file be a soft link to the other. + +

A resource defines a menu when it meets certain semantic requirements. +The menu hierarchy is reflected as a hierarchy of unnamed +subresources, with the first string of each subresource defining the +label used for the menu button. A subresource that itself contains +subresources becomes a submenu, a subresource that does not becomes a +button. + +

A submenu should only contain subresources for the buttons or submenus +within that submenu. Two exceptions are allowed: an initial string +sets the label, and the string “-” (a single dash) will create a +separator. + +

A button should not contain subresources, but will contain many +strings, named and unnamed. The first member shall be an unnamed +string which is the label for the button. Any other unnamed strings +within the button's resource will be used as actions (much like the +.Xdefaults action strings), which are functions that will be called +when the button is pressed (or popped up, or created, depending on the +action). As a convenience, if a left parenthesis is seen, the current +“word” will continue at least until the matching right parenthesis. +This allows you to pass strings with spaces as arguments to actions +without needing to quote the action. + +

Named resources in button resources will be used as X resources. Such +resources can be used to set the font, color, and spacing of buttons. +As a convenience, “fg” can be used as an abbreviation for “foreground”. + +

Within the menu's resource file, Pcb will look for a few key named +subresources. At the moment, the only one it looks for is one called +MainMenu. This will be used for the main menu bar. In the +future, other named subresources will be used for popup resources. + +

Given all this, a small sample pcb-menu.res would be: + +

     MainMenu = {
+       {File
+         {"Load layout" Load(Layout)}
+         -
+         {"Quit Program" Quit() fg=red font=10x20}
+       }
+     }
+
+

Within the Pcb sources are specially crafted comments that mark all +the actions, flags, menu hooks, and whatnot that Pcb offers. Read the +file src/gather-actions in the Pcb source tree for +documentation for these comments. + +

+ +


+Previous: Menu Definitions, +Up: Custom Menus + +
+ +

B.3 Menu Files and Defaults

+ +

Pcb will look for a file which defines its menus, trying the following +names (the example is for the lesstif GUI, the GTK+ GUI has “gpcb-menu.res” +in place of “pcb-menu.res”): + +

     ./pcb-menu.res
+     $HOME/.pcb-menu.res
+     $PCBLIBDIR/pcb-menu.res
+     <internal>
+
+

Note that pcblibdir defaults to /usr/local/share/pcb +(hence, /usr/local/share/pcb/pcb-menu.res). The +<internal> entry refers to a menu definition within the Pcb +application itself. The master file for all this is the file +src/pcb-menu.res in the Pcb source tree. This master source is +used to create the internal menu definition as well as being installed +in $pcblibdir. + + +

+ +


+Next: , +Previous: Custom Menus, +Up: Top + +
+ +

Appendix C Element Search/Regular Expressions

+ +

+ +

C.1 Element Search/Regular Expressions

+ +

Pcb's search is based on POSIX 1003.2 Regular Expressions. Full POSIX +Regular Expressions are supported by Pcb if the regex library was +available when Pcb was built. One difference from the regular +expressions found in tools like awk or grep is that PCB implicitly +adds a “^” to the begining of a regular expression and “$” to the +end of the regular expression. For example, if you enter “C1”, the +actual regular expression used internally is “^C1$”. Another difference +is that search patterns in pcb are not case sensitive. That is, “CON” is +treated the same as “con”. + +

It is easier to show by example how to search than explain +POSIX 1003.2. With regular expressions most characters are just +themselves, but some are special: + +

+
*
Matches 0 or more instances of preceding character. + +
+
Matches 1 or more instances of preceding character. + +
?
Matches 0 or 1 instances of preceding character. + +
.
Matches any single character other than the newline character. + +
|
The vertical bar is the alternation operator. It combines two +regular expressions. The result matches if either of them matches. + +
\
A backslash indicates the next character should not be interpreted literally +if it normally is, and should be interpreted literally if it normally isn't. + +
{n}
An integer n enclosed in curly brackets matches the preceding item if +it occurs exactly n times. + +
[ ]
A pair of square brackets matches every character they contain. Characters +may be given explicitly, or as ranges. + +
-
A hyphen in the context of square brackets denotes the range between the +preceding and the following character. E.g., the range of digits is +“0-9” . The range of letters from C to K is “C-K” . + +
\^ inside square brackets
Inside square brackets the caret is an anti operator. Its presence makes +the square prackets match anything except the contents of the brackets. + +
( )
Round parenthesis group parts of a regular expression. This is very much +like they do in math formulars. + +
+ +

If you need a special character literally, you can escape it with a +backslash. + +

The following examples illustrate how regular expressions can be used to +specify element names (reference designators) to search for. +

+
C5
Select the element whose name is exactly “C5”. + +
C5 | R3
Select C5 and R3. + +
C.*
Select all elements whose name start with the letter “C”, such as C5, or +C42, or CF1. + +
C.*1
Select all elements that start with “C” and end with “1”, such as C1, +or C51 or C5/9B71. + +
R10?
Search for R1 or R10, but will not select R100 or R105. The question mark +is a quantifier for the character “0”. + +
R128+
Selects R128, R1288, R12888, etc. + +
TB.
Select all terminal blocks having exactly one character designator after +“TB” such as TB1, TBA, or TBx but not TB. + +
TB..
Select all terminal blocks having a two character designator such as TB21 or +TB1a. + +
TB.*
Select all terminal blocks with any designator. + +
.*31
Select all items, whose name ends with “31” such as Q31, or R31, or R531. + +
Q[12]
Select Q1 and Q2. + +
[A-D].*
Select all items, whose name starts with “A”, “B”, “C”, or “D”. + +
.*N{2}.*
Select all items, whose name contains two “N” in a row such as +CONN23, or connA, but not CON5 + +
[^D].*
Select all items that do not start with the letter “D”, such as C2, or +R34, but not D34 + +
+ + +
+ +


+Next: , +Previous: Regular Expressions, +Up: Top + +
+ +

Appendix D Standard Drill Size Tables

+ +

+ +

D.1 American Standard Wire Size Drills

+ + + +

Drill Diameter Drill Diameter Drill Diameter +
Size (inches) Size (inches) Size (inches) + +


97 .0059 96 .0063 95 .0067 +
94 .0071 93 .0075 92 .0079 +
91 .0083 90 .0087 89 .0091 +
88 .0095 87 .0100 86 .0105 +
85 .0110 84 .0115 83 .0120 +
82 .0125 81 .0130 80 .0135 +
79 .0145 78 .0160 77 .0180 +
76 .0200 75 .0210 74 .0225 +
73 .0240 72 .0250 71 .0260 +
70 .0280 69 .0292 68 .0310 +
67 .0320 66 .0330 65 .0350 +
64 .0360 63 .0370 62 .0380 +
61 .0390 60 .0400 59 .0410 +
58 .0420 57 .0430 56 .0465 +
55 .0520 54 .0550 53 .0595 +
52 .0635 51 .0670 50 .0700 +
49 .0730 48 .0760 47 .0785 +
46 .0810 45 .0820 44 .0860 +
43 .0890 42 .0935 41 .0960 +
40 .0980 39 .0995 38 .1015 +
37 .1040 36 .1065 35 .1100 +
34 .1110 33 .1130 32 .1160 +
31 .1200 30 .1285 29 .1360 +
28 .1405 27 .1440 26 .1470 +
25 .1495 24 .1520 23 .1540 +
22 .1570 21 .1590 20 .1610 +
19 .1660 18 .1695 17 .1730 +
16 .1770 15 .1800 14 .1820 +
13 .1850 12 .1890 11 .1910 +
10 .1935 9 .1960 8 .1990 +
7 .2010 6 .2040 5 .2055 +
4 .2090 3 .2130 2 .2210 +
1 .2280 +
+ +

D.2 American Standard Letter Size Drills

+ + + +

Drill Diameter Drill Diameter Drill Diameter +
Size (inches) Size (inches) Size (inches) + +


A .2340 B .2380 C .2420 +
D .2460 E .2500 F .2570 +
G .2610 H .2660 I .2720 +
J .2770 K .2810 L .2900 +
M .2950 N .3020 O .3160 +
P .3230 Q .3320 R .3390 +
S .3480 T .3580 U .3680 +
V .3770 W .3860 X .3970 +
Y .4040 Z .4130 +
+ +

D.3 Fractional Inch Size Drills

+ + + +

Drill Diameter Drill Diameter Drill Diameter +
Size (inches) Size (inches) Size (inches) + +


1/64 .0156 1/32 .0313 3/64 .0469 +
1/16 .0625 5/64 .0781 3/32 .0938 +
7/64 .1094 1/8 .1250 9/64 .1406 +
5/32 .1562 11/64 .1719 3/16 .1875 +
13/64 .2031 7/32 .2188 15/64 .2344 +
1/4 .2500 17/64 .2656 9/32 .2812 +
19/64 .2969 5/16 .3125 21/64 .3281 +
11/32 .3438 23/64 .3594 3/8 .3750 +
25/64 .3906 13/32 .4062 27/64 .4219 +
7/16 .4375 29/64 .4531 15/32 .4688 +
31/64 .4844 1/2 .5000 33/64 .5156 +
17/32 .5313 35/64 .5469 9/16 .5625 +
37/64 .5781 19/32 .5938 39/64 .6094 +
5/8 .6250 41/64 .6406 21/32 .6562 +
43/64 .6719 11/16 .6875 45/64 .7031 +
23/32 .7188 47/64 .7344 3/4 .7500 +
49/64 .7656 25/32 .7812 51/64 .7969 +
13/16 .8125 53/64 .8281 27/32 .8438 +
55/64 .8594 7/8 .8750 57/64 .8906 +
29/32 .9062 59/64 .9219 15/16 .9375 +
61/64 .9531 31/32 .9688 63/64 .9844 +
1 1.0000 +
+ +

D.4 Metric Drills

+ + + +

Drill Diameter Drill Diameter Drill Diameter +
Size (inches) Size (inches) Size (inches) + +


0.20 mm .00787 0.25 mm .00984 0.30 mm .0118 +
0.35 mm .0138 0.40 mm .0158 0.45 mm .0177 +
0.50 mm .0197 0.55 mm .0217 0.60 mm .0236 +
0.65 mm .0256 0.70 mm .0276 0.75 mm .0295 +
0.80 mm .0315 0.85 mm .0335 0.90 mm .0354 +
0.95 mm .0374 1.00 mm .0394 1.05 mm .0413 +
1.10 mm .0433 1.15 mm .0453 1.20 mm .0472 +
1.25 mm .0492 1.30 mm .0512 1.35 mm .0531 +
1.40 mm .0551 1.45 mm .0571 1.50 mm .0591 +
1.55 mm .0610 1.60 mm .0630 1.65 mm .0650 +
1.70 mm .0669 1.75 mm .0689 1.80 mm .0709 +
1.85 mm .0728 1.90 mm .0748 1.95 mm .0768 +
2.00 mm .0787 2.05 mm .0807 2.10 mm .0827 +
2.15 mm .0846 2.20 mm .0866 2.25 mm .0886 +
2.30 mm .0906 2.35 mm .0925 2.40 mm .0945 +
2.45 mm .0965 2.50 mm .0984 2.55 mm .1004 +
2.60 mm .1024 2.65 mm .1043 2.70 mm .1063 +
2.75 mm .1083 2.80 mm .1102 2.85 mm .1122 +
2.90 mm .1142 2.95 mm .1161 3.00 mm .1181 +
3.10 mm .1220 3.15 mm .1240 3.20 mm .1260 +
3.25 mm .1280 3.30 mm .1299 3.40 mm .1339 +
3.50 mm .1378 3.60 mm .1417 3.70 mm .1457 +
3.75 mm .1476 3.80 mm .1496 3.90 mm .1535 +
4.00 mm .1575 4.10 mm .1614 4.20 mm .1654 +
4.25 mm .1673 4.30 mm .1693 4.40 mm .1732 +
4.50 mm .1772 4.60 mm .1811 4.70 mm .1850 +
4.75 mm .1870 4.80 mm .1890 4.90 mm .1929 +
5.00 mm .1969 5.10 mm .2008 5.20 mm .2047 +
5.25 mm .2067 5.30 mm .2087 5.40 mm .2126 +
5.50 mm .2165 5.60 mm .2205 5.70 mm .2244 +
5.75 mm .2264 5.80 mm .2283 5.90 mm .2323 +
6.00 mm .2362 6.10 mm .2402 6.20 mm .2441 +
6.25 mm .2461 6.30 mm .2480 6.40 mm .2520 +
6.50 mm .2559 6.60 mm .2598 6.70 mm .2638 +
6.75 mm .2657 6.80 mm .2677 6.90 mm .2717 +
7.00 mm .2756 7.10 mm .2795 7.20 mm .2835 +
7.25 mm .2854 7.30 mm .2874 7.40 mm .2914 +
7.50 mm .2953 7.60 mm .2992 7.70 mm .3031 +
8.00 mm .3150 8.10 mm .3189 8.20 mm .3228 +
8.25 mm .3248 8.30 mm .3268 8.40 mm .3307 +
8.50 mm .3346 8.60 mm .3386 8.70 mm .3425 +
8.75 mm .3445 8.80 mm .3465 8.90 mm .3504 +
9.00 mm .3543 9.10 mm .3583 9.20 mm .3622 +
9.25 mm .3642 9.30 mm .3661 9.40 mm .3701 +
9.50 mm .3740 9.60 mm .3780 9.70 mm .3819 +
9.75 mm .3839 9.80 mm .3858 9.90 mm .3898 +
10.00 mm .3937 10.10 mm .3976 10.20 mm .4016 +
10.25 mm .4035 10.30 mm .4055 10.40 mm .4094 +
10.50 mm .4134 10.60 mm .4173 10.70 mm .4213 +
10.80 mm .4252 10.90 mm .4291 11.00 mm .4331 +
11.10 mm .4370 11.20 mm .4409 11.25 mm .4429 +
11.30 mm .4449 11.40 mm .4488 11.50 mm .4528 +
11.60 mm .4567 11.70 mm .4606 11.75 mm .4626 +
11.80 mm .4646 11.90 mm .4685 12.00 mm .4724 +
12.50 mm .4921 13.00 mm .5118 13.50 mm .5315 +
14.00 mm .5512 14.50 mm .5709 15.00 mm .5906 +
15.50 mm .6102 16.00 mm .6299 16.50 mm .6496 +
17.00 mm .6693 17.50 mm .6890 18.00 mm .7087 +
18.50 mm .7283 19.00 mm .7480 19.50 mm .7677 +
20.00 mm .7874 20.50 mm .8071 21.00 mm .8268 +
21.50 mm .8465 22.00 mm .8661 22.50 mm .8858 +
23.00 mm .9055 23.50 mm .9252 24.00 mm .9449 +
24.50 mm .9646 25.00 mm .9843 +
+ + +

+ +


+Next: , +Previous: Standard Drill Sizes, +Up: Top + +
+ +

Appendix E Centroid (X-Y) File Format

+ +

+ +

E.1 Overview

+ +

E.2 File Format

+ +

The centroid output file is in a standard comma seperated values (CSV) +format. Comment lines begin with a “#”. The output file contains a +header with an RCS Id tag (useful for those who will check the file +into a version control system), a version number for the file format, +some comments containing the author and title of the board, and a +comment describing the remainder of the file format. + +

An example centroid file is shown below. + +

     
+     # $Id$
+     # PcbXY Version 1.0
+     # Date: Fri Jul 22 03:40:08 2005 UTC
+     # Author: PCB User
+     # Title: MyBoard - PCB X-Y
+     # RefDes, Description, Value, X, Y, rotation, top/bottom
+     # X,Y in mils.  rotation in degrees.
+     # --------------------------------------------
+     R61,"0603","10",2610.00,3560.00,90,top
+     J5,"AMPHENOL_ARFX1231","unknown",2390.00,4220.00,180,top
+     C13,"0402","0.01u",2340.00,3014.00,270,top
+     
+
+

E.3 Computation of Centroid and Rotation

+ +

The center of each element is found by averaging the (X,Y) coordinates +for the center of each pin and pad in the element. For example if an +element has 2 pins, 1 at (1,0) and another at (1,4) then the centroid +will be at (1,2). + +

The calculation of rotation is a bit more complex. Currently a +rotation is not stored for each element but rather the rotated element +is stored. In other words if the element from the library has a pin +at (0,0) and (0,2) and it has been rotated by 90 degrees, then the +.pcb file will store (0,0) and (2,0) for the pin locations with +no indication that they have been rotated from the original. + +

In the event that the element has only 1 pin, then the rotation is set +to zero. If the element has only one pad (as opposed to a +through-hole pin), then the rotation of the pad is used. + +

When the element has multiple pins, the location of pin #1 is placed +in the coordinate system which has the centroid of the part at (0,0). +Then which quadrant pin #1 falls in determines the rotation. Zero +degrees of rotation is defined as pin #1 being in the upper left +quadrant. Increasing angles correspond to counterclockwise rotation so a +rotation of 90 degrees places pin #1 in the lower left quadrant. +Currently, the only allowed rotations are 0, 90, 180, and 270 degrees. + +

If pin #1 happens to be at the centroid of the part, then pin #2 is +examined to see which quadrant it is located in. The same rules apply +for the definitions of rotation. In other words, when pin #1 is at +the centroid of the part and pin #2 is in the upper left quadrant, the +rotation is declared to be zero degrees. + + +

+ +


+Next: , +Previous: Centroid File Format, +Up: Top + +
+ +

Appendix F Action Reference

+ +

+ + + +

Many actions take a delta parameter as the last parameter, +which is an amount to change something. That delta may include +units, as an additional parameter, such as Action(Object,5,mm). +If no units are specified, the default is PCB's native units +(currently 1/100 mil). Also, if the delta is prefixed by + or +-, the size is increased or decreased by that amount. +Otherwise, the size size is set to the given amount. + +

     Action(Object,5,mil)
+     Action(Object,+0.5,mm)
+     Action(Object,-1)
+
+

Actions which take a delta parameter which do not accept all +these options will specify what they do take. + + + + +

Many actions act on indicated objects on the board. They will have +parameters like ToggleObject or SelectedVias to indicate +what group of objects they act on. Unless otherwise specified, these +parameters are defined as follows: + +

+
Object
ToggleObject
Affects the object under the mouse pointer. If this action is invoked +from a menu or script, the user will be prompted to click on an +object, which is then the object affected. + +
Selected
SelectedObjects
+Affects all objects which are currently selected. At least, all +selected objects for which the given action makes sense. + +
SelectedPins
SelectedVias
SelectedType
etc
Affects all objects which are both selected and of the Type specified. + +
+ + + +
+ +


+Next: , +Up: Action Reference + +
+ +

F.1 Core actions

+ + +
+ +


+Next: , +Up: core actions + +
+ +

F.1.1 AddRats

+ + +

+
AddRats(AllRats|SelectedRats|Close)
+
+ +

Add one or more rat lines to the board. + + +

+
AllRats
Create rat lines for all loaded nets that aren't already connected on +with copper. + +
SelectedRats
Similarly, but only add rat lines for nets connected to selected pins +and pads. + +
Close
Selects the shortest unselected rat on the board. + +
+ +
+ +


+Next: , +Previous: AddRats Action, +Up: core actions + +
+ +

F.1.2 ApplyVendor

+ + +

+
ApplyVendor()
+
+ +

Applies the currently loaded vendor drill table to the current design. + + +This will modify all of your drill holes to match the list of allowed +sizes for your vendor. + +

+ +


+Next: , +Previous: ApplyVendor Action, +Up: core actions + +
+ +

F.1.3 Atomic

+ + +

+
Atomic(Save|Restore|Close|Block)
+
+ +

Save or restore the undo serial number. + + +

This action allows making multiple-action bindings into an atomic +operation that will be undone by a single Undo command. For example, +to optimize rat lines, you'd delete the rats and re-add them. To +group these into a single undo, you'd want the deletions and the +additions to have the same undo serial number. So, you Save, +delete the rats, Restore, add the rats - using the same serial +number as the deletes, then Block, which checks to see if the +deletions or additions actually did anything. If not, the serial +number is set to the saved number, as there's nothing to undo. If +something did happen, the serial number is incremented so that these +actions are counted as a single undo step. + +

+
Save
Saves the undo serial number. + +
Restore
Returns it to the last saved number. + +
Close
Sets it to 1 greater than the last save. + +
Block
Does a Restore if there was nothing to undo, else does a Close. + +
+ +
+ +


+Next: , +Previous: Atomic Action, +Up: core actions + +
+ +

F.1.4 Attributes

+ + +

+
Attributes(Layout|Layer|Element)
+Attributes(Layer,layername)
+
+ +

Let the user edit the attributes of the layout, current or given +layer, or selected element. + + +

This just pops up a dialog letting the user edit the attributes of the +pcb, an element, or a layer. + +

+ +


+Next: , +Previous: Attributes Action, +Up: core actions + +
+ +

F.1.5 AutoPlaceSelected

+ + +

+
AutoPlaceSelected()
+
+ +

Auto-place selected components. + + +

Attempts to re-arrange the selected components such that the nets +connecting them are minimized. Note that you cannot undo this. + +

+ +


+Next: , +Previous: AutoPlaceSelected Action, +Up: core actions + +
+ +

F.1.6 AutoRoute

+ + +

+
AutoRoute(AllRats|SelectedRats)
+
+ +

Auto-route some or all rat lines. + + +

+
AllRats
Attempt to autoroute all rats. + +
SelectedRats
Attempt to autoroute the selected rats. + +
+ +

Before autorouting, it's important to set up a few things. First, +make sure any layers you aren't using are disabled, else the +autorouter may use them. Next, make sure the current line and via +styles are set accordingly. Last, make sure "new lines clear +polygons" is set, in case you eventually want to add a copper pour. + +

Autorouting takes a while. During this time, the program may not be +responsive. + +

+ +


+Next: , +Previous: AutoRoute Action, +Up: core actions + +
+ +

F.1.7 ChangeClearSize

+ + +

+
ChangeClearSize(Object, delta)
+ChangeClearSize(SelectedPins|SelectedPads|SelectedVias, delta)
+ChangeClearSize(SelectedLines|SelectedArcs, delta
+ChangeClearSize(Selected|SelectedObjects, delta)
+
+ +

Changes the clearance size of objects. + + +

If the solder mask is currently showing, this action changes the +solder mask clearance. If the mask is not showing, this action +changes the polygon clearance. + +

+ +


+Next: , +Previous: ChangeClearSize Action, +Up: core actions + +
+ +

F.1.8 ChangeDrillSize

+ + +

+
ChangeDrillSize(Object, delta)
+ChangeDrillSize(SelectedPins|SelectedVias|Selected|SelectedObjects, delta)
+
+ +

Changes the drilling hole size of objects. + + +

+ +


+Next: , +Previous: ChangeDrillSize Action, +Up: core actions + +
+ +

F.1.9 ChangeFlag

+ + +

+
ChangeFlag(Object|Selected|SelectedObjects, flag, value)
+ChangeFlag(SelectedLines|SelectedPins|SelectedVias, flag, value)
+ChangeFlag(SelectedPads|SelectedTexts|SelectedNames, flag, value)
+ChangeFlag(SelectedElements, flag, value)
+flag = square | octagon | thermal | join
+value = 0 | 1
+
+ +

Sets or clears flags on objects. + + +

Toggles the given flag on the indicated object(s). The flag may be +one of the flags listed above (square, octagon, thermal, join). The +value may be the number 0 or 1. If the value is 0, the flag is +cleared. If the value is 1, the flag is set. + +

+ +


+Next: , +Previous: ChangeFlag Action, +Up: core actions + +
+ +

F.1.10 ChangeHole

+ + +

+
ChangeHole(ToggleObject|Object|SelectedVias|Selected)
+
+ +

Changes the hole flag of objects. + + +

The "hole flag" of a via determines whether the via is a +plated-through hole (not set), or an unplated hole (set). + +

+ +


+Next: , +Previous: ChangeHole Action, +Up: core actions + +
+ +

F.1.11 ChangeJoin

+ + +

+
ChangeJoin(ToggleObject|SelectedLines|SelectedArcs|Selected)
+
+ +

Changes the join (clearance through polygons) of objects. + + +

The join flag determines whether a line or arc, drawn to intersect a +polygon, electrically connects to the polygon or not. When joined, +the line/arc is simply drawn over the polygon, making an electrical +connection. When not joined, a gap is drawn between the line and the +polygon, insulating them from each other. + +

+ +


+Next: , +Previous: ChangeJoin Action, +Up: core actions + +
+ +

F.1.12 ChangeName

+ + +

+
ChangeName(Object)
+ChangeName(Layout|Layer)
+
+ +

Sets the name of objects. + + +

+
Object
Changes the name of the element under the cursor. + +
Layout
Changes the name of the layout. This is printed on the fab drawings. + +
Layer
Changes the name of the currently active layer. + +
+ +
+ +


+Next: , +Previous: ChangeName Action, +Up: core actions + +
+ +

F.1.13 ChangeOctagon

+ + +

+
ChangeOctagon(Object|ToggleObject|SelectedObjects|Selected)
+ChangeOctagon(SelectedElements|SelectedPins|SelectedVias)
+
+ +

Changes the octagon-flag of pins and vias. + + +

Pins, pads, and vias can have various shapes. All may be round. Pins +and pads may be square (obviously "square" pads are usually +rectangular). Pins and vias may be octagonal. When you change a +shape flag of an element, you actually change all of its pins and +pads. + +

Note that the square flag takes precedence over the octagon flag, +thus, if both the square and octagon flags are set, the object is +square. When the square flag is cleared, the pins and pads will be +either round or, if the octagon flag is set, octagonal. + +

+ +


+Next: , +Previous: ChangeOctagon Action, +Up: core actions + +
+ +

F.1.14 ChangePaste

+ + +

+
ChangePaste(ToggleObject|Object|SelectedPads|Selected)
+
+ +

Changes the no paste flag of objects. + + +

The "no paste flag" of a pad determines whether the solderpaste + stencil will have an opening for the pad (no set) or if there wil be + no solderpaste on the pad (set). This is used for things such as + fiducial pads. + +

+ +


+Next: , +Previous: ChangePaste Action, +Up: core actions + +
+ +

F.1.15 ChangePinName

+ + +

+
ChangePinName(ElementName,PinNumber,PinName)
+
+ +

Sets the name of a specific pin on a specific element. + + +

This can be especially useful for annotating pin names from a +schematic to the layout without requiring knowledge of the pcb file +format. + +

     ChangePinName(U3, 7, VCC)
+
+
+ +


+Next: , +Previous: ChangePinName Action, +Up: core actions + +
+ +

F.1.16 ChangeSize

+ + +

+
ChangeSize(Object, delta)
+ChangeSize(SelectedObjects|Selected, delta)
+ChangeSize(SelectedLines|SelectedPins|SelectedVias, delta)
+ChangeSize(SelectedPads|SelectedTexts|SelectedNames, delta)
+ChangeSize(SelectedElements, delta)
+
+ +

Changes the size of objects. + + +

For lines and arcs, this changes the width. For pins and vias, this +changes the overall diameter of the copper annulus. For pads, this +changes the width and, indirectly, the length. For texts and names, +this changes the scaling factor. For elements, this changes the width +of the silk layer lines and arcs for this element. + +

+ +


+Next: , +Previous: ChangeSize Action, +Up: core actions + +
+ +

F.1.17 ChangeSquare

+ + +

+
ChangeSquare(ToggleObject)
+ChangeSquare(SelectedElements|SelectedPins)
+ChangeSquare(Selected|SelectedObjects)
+
+ +

Changes the square flag of pins and pads. + + +

Note that Pins means both pins and pads. + +

Pins, pads, and vias can have various shapes. All may be round. Pins +and pads may be square (obviously "square" pads are usually +rectangular). Pins and vias may be octagonal. When you change a +shape flag of an element, you actually change all of its pins and +pads. + +

Note that the square flag takes precedence over the octagon flag, +thus, if both the square and octagon flags are set, the object is +square. When the square flag is cleared, the pins and pads will be +either round or, if the octagon flag is set, octagonal. + +

+ +


+Next: , +Previous: ChangeSquare Action, +Up: core actions + +
+ +

F.1.18 ClearOctagon

+ + +

+
ClearOctagon(ToggleObject|Object|SelectedObjects|Selected)
+ClearOctagon(SelectedElements|SelectedPins|SelectedVias)
+
+ +

Clears the octagon-flag of pins and vias. + + +

Pins, pads, and vias can have various shapes. All may be round. Pins +and pads may be square (obviously "square" pads are usually +rectangular). Pins and vias may be octagonal. When you change a +shape flag of an element, you actually change all of its pins and +pads. + +

Note that the square flag takes precedence over the octagon flag, +thus, if both the square and octagon flags are set, the object is +square. When the square flag is cleared, the pins and pads will be +either round or, if the octagon flag is set, octagonal. + +

+ +


+Next: , +Previous: ClearOctagon Action, +Up: core actions + +
+ +

F.1.19 ClearSquare

+ + +

+
ClearSquare(ToggleObject|SelectedElements|SelectedPins)
+
+ +

Clears the square-flag of pins and pads. + + +

Note that Pins means pins and pads. + +

Pins, pads, and vias can have various shapes. All may be round. Pins +and pads may be square (obviously "square" pads are usually +rectangular). Pins and vias may be octagonal. When you change a +shape flag of an element, you actually change all of its pins and +pads. + +

Note that the square flag takes precedence over the octagon flag, +thus, if both the square and octagon flags are set, the object is +square. When the square flag is cleared, the pins and pads will be +either round or, if the octagon flag is set, octagonal. + +

+ +


+Next: , +Previous: ClearSquare Action, +Up: core actions + +
+ +

F.1.20 ClrFlag

+ + +

+
ClrFlag(Object|Selected|SelectedObjects, flag)
+ClrFlag(SelectedLines|SelectedPins|SelectedVias, flag)
+ClrFlag(SelectedPads|SelectedTexts|SelectedNames, flag)
+ClrFlag(SelectedElements, flag)
+flag = square | octagon | thermal | join
+
+ +

Clears flags on objects. + + +

Turns the given flag off, regardless of its previous setting. See +ChangeFlag. + +

     ClrFlag(SelectedLines,join)
+
+
+ +


+Next: , +Previous: ClrFlag Action, +Up: core actions + +
+ +

F.1.21 Connection

+ + +

+
Connection(Find|ResetLinesAndPolygons|ResetPinsAndVias|Reset)
+
+ +

Searches connections of the object at the cursor position. + + +

Connections found with this action will be highlighted in the +“connected-color” color and will have the “found” flag set. + +

+
Find
The net under the cursor is “found”. + +
ResetLinesAndPolygons
Any “found” lines and polygons are marked “not found”. + +
ResetPinsAndVias
Any “found” pins and vias are marked “not found”. + +
Reset
All “found” objects are marked “not found”. + +
+ +
+ +


+Next: , +Previous: Connection Action, +Up: core actions + +
+ +

F.1.22 Delete

+ + +

+
Delete(Object|Selected)
+Delete(AllRats|SelectedRats)
+
+ +

Delete stuff. + + +

+ +


+Next: , +Previous: Delete Action, +Up: core actions + +
+ +

F.1.23 DeleteRats

+ + +

+
DeleteRats(AllRats|Selected|SelectedRats)
+
+ +

Delete rat lines. + + +

+ +


+Next: , +Previous: DeleteRats Action, +Up: core actions + +
+ +

F.1.24 DisableVendor

+ + +

+
DisableVendor()
+
+ +

Disables automatic drill size mapping. + + +

+When drill mapping is enabled, new instances of pins and vias will +have their drill holes mapped to one of the allowed drill sizes +specified in the currently loaded vendor drill table. + +

+ +


+Next: , +Previous: DisableVendor Action, +Up: core actions + +
+ +

F.1.25 DisperseElements

+ + +

+
DisperseElements(All|Selected)
+
+ +

Disperses elements. + + +

Normally this is used when starting a board, by selecting all elements +and then dispersing them. This scatters the elements around the board +so that you can pick individual ones, rather than have all the +elements at the same 0,0 coordinate and thus impossible to choose +from. + +

+ +


+Next: , +Previous: DisperseElements Action, +Up: core actions + +
+ +

F.1.26 Display

+ + +

+
Display(NameOnPCB|Description|Value)
+Display(Grid|Redraw)
+Display(CycleClip|CycleCrosshair|Toggle45Degree|ToggleStartDirection)
+Display(ToggleGrid|ToggleRubberBandMode|ToggleUniqueNames)
+Display(ToggleMask|ToggleName|ToggleClearLine|ToggleFullPoly|ToggleSnapPin)
+Display(ToggleThindraw|ToggleThindrawPoly|ToggleOrthoMove|ToggleLocalRef)
+Display(ToggleCheckPlanes|ToggleShowDRC|ToggleAutoDRC)
+Display(ToggleLiveRoute|LockNames|OnlyNames)
+Display(Pinout|PinOrPadName)
+
+ +

Several display-related actions. + + +

+
NameOnPCB
Description
Value
Specify whether all elements show their name, description, or value. + +
Redraw
Redraw the whole board. + +
Toggle45Degree
When clear, lines can be drawn at any angle. When set, lines are +restricted to multiples of 45 degrees and requested lines may be +broken up according to the clip setting. + +
CycleClip
Changes the way lines are restricted to 45 degree increments. The +various settings are: straight only, orthogonal then angled, and angled +then orthogonal. If AllDirections is set, this action disables it. + +
CycleCrosshair
Changes crosshair drawing. Crosshair may accept form of 4-ray, +8-ray and 12-ray cross. + +
ToggleRubberBandMode
If set, moving an object moves all the lines attached to it too. + +
ToggleStartDirection
If set, each time you set a point in a line, the Clip toggles between +orth-angle and angle-ortho. + +
ToggleUniqueNames
If set, you will not be permitted to change the name of an element to +match that of another element. + +
ToggleSnapPin
If set, pin centers and pad end points are treated as additional grid +points that the cursor can snap to. + +
ToggleLocalRef
If set, the mark is automatically set to the beginning of any move, so +you can see the relative distance you've moved. + +
ToggleThindraw
If set, objects on the screen are drawn as outlines (lines are drawn +as center-lines). This lets you see line endpoints hidden under pins, +for example. + +
ToggleThindrawPoly
If set, polygons on the screen are drawn as outlines. + +
ToggleShowDRC
If set, pending objects (i.e. lines you're in the process of drawing) +will be drawn with an outline showing how far away from other copper +you need to be. + +
ToggleLiveRoute
If set, the progress of the autorouter will be visible on the screen. + +
ToggleAutoDRC
If set, you will not be permitted to make connections which violate +the current DRC and netlist settings. + +
ToggleCheckPlanes
If set, lines and arcs aren't drawn, which usually leaves just the +polygons. If you also disable all but the layer you're interested in, +this allows you to check for isolated regions. + +
ToggleOrthoMove
If set, the crosshair is only allowed to move orthogonally from its +previous position. I.e. you can move an element or line up, down, +left, or right, but not up+left or down+right. + +
ToggleName
Selects whether the pinouts show the pin names or the pin numbers. + +
ToggleLockNames
If set, text will ignore left mouse clicks and actions that work on +objects under the mouse. You can still select text with a lasso (left +mouse drag) and perform actions on the selection. + +
ToggleOnlyNames
If set, only text will be sensitive for mouse clicks and actions that +work on objects under the mouse. You can still select other objects +with a lasso (left mouse drag) and perform actions on the selection. + +
ToggleMask
Turns the solder mask on or off. + +
ToggleClearLine
When set, the clear-line flag causes new lines and arcs to have their +“clear polygons” flag set, so they won't be electrically connected +to any polygons they overlap. + +
ToggleFullPoly
When set, the full-poly flag causes new polygons to have their +“full polygon” flag set, so all parts of them will be displayed +instead of only the biggest one. + +
ToggleGrid
Resets the origin of the current grid to be wherever the mouse pointer +is (not where the crosshair currently is). If you provide two numbers +after this, the origin is set to that coordinate. + +
Grid
Toggles whether the grid is displayed or not. + +
Pinout
Causes the pinout of the element indicated by the cursor to be +displayed, usually in a separate window. + +
PinOrPadName
Toggles whether the names of pins, pads, or (yes) vias will be +displayed. If the cursor is over an element, all of its pins and pads +are affected. + +
+ +
+ +


+Next: , +Previous: Display Action, +Up: core actions + +
+ +

F.1.27 djopt

+ + +

+
djopt(debumpify|unjaggy|simple|vianudge|viatrim|orthopull)
+djopt(auto) - all of the above
+djopt(miter)
+
+ +

Perform various optimizations on the current board. + + +

The different types of optimizations change your board in order to +reduce the total trace length and via count. + +

+
debumpify
Looks for U-shaped traces that can be shortened or eliminated. + +
unjaggy
Looks for corners which could be flipped to eliminate one or more +corners (i.e. jaggy lines become simpler). + +
simple
Removing uneeded vias, replacing two or more trace segments in a row +with a single segment. This is usually performed automatically after +other optimizations. + +
vianudge
Looks for vias where all traces leave in the same direction. Tries to +move via in that direction to eliminate one of the traces (and thus a +corner). + +
viatrim
Looks for traces that go from via to via, where moving that trace to a +different layer eliminates one or both vias. + +
orthopull
Looks for chains of traces all going in one direction, with more +traces orthogonal on one side than on the other. Moves the chain in +that direction, causing a net reduction in trace length, possibly +eliminating traces and/or corners. + +
splitlines
Looks for lines that pass through vias, pins, or pads, and splits them +into separate lines so they can be managed separately. + +
auto
Performs the above options, repeating until no further optimizations +can be made. + +
miter
Replaces 90 degree corners with a pair of 45 degree corners, to reduce +RF losses and trace length. + +
+ +
+ +


+Next: , +Previous: djopt Action, +Up: core actions + +
+ +

F.1.28 DRC

+ + +

+
DRC()
+
+ +

Invoke the DRC check. + + +

Note that the design rule check uses the current board rule settings, +not the current style settings. + +

+ +


+Next: , +Previous: DRC Action, +Up: core actions + +
+ +

F.1.29 DumpLibrary

+ + +

+
DumpLibrary()
+
+ +

Display the entire contents of the libraries. + + +

+ +


+Next: , +Previous: DumpLibrary Action, +Up: core actions + +
+ +

F.1.30 elementlist

+ + +

+
ElementList(Start|Done|Need,<refdes>,<footprint>,<value>)
+
+ +

Adds the given element if it doesn't already exist. + + +

+
Start
Indicates the start of an element list; call this before any Need +actions. + +
Need
Searches the board for an element with a matching refdes. + +

If found, the value and footprint are updated. + +

If not found, a new element is created with the given footprint and value. + +

Done
Compares the list of elements needed since the most recent +start with the list of elements actually on the board. Any +elements that weren't listed are selected, so that the user may delete +them. + +
+ +
+ +


+Next: , +Previous: elementlist Action, +Up: core actions + +
+ +

F.1.31 elementsetattr

+ + +

+
ElementSetAttr(refdes,name[,value])
+
+ +

Sets or clears an element-specific attribute. + + +

If a value is specified, the named attribute is added (if not already +present) or changed (if it is) to the given value. If the value is +not specified, the given attribute is removed if present. + +

+ +


+Next: , +Previous: elementsetattr Action, +Up: core actions + +
+ +

F.1.32 EnableVendor

+ + +

+
EnableVendor()
+
+ +

Enables automatic drill size mapping. + + +

+When drill mapping is enabled, new instances of pins and vias will +have their drill holes mapped to one of the allowed drill sizes +specified in the currently loaded vendor drill table. To enable drill +mapping, a vendor resource file containing a drill table must be +loaded first. + +

+ +


+Next: , +Previous: EnableVendor Action, +Up: core actions + +
+ +

F.1.33 execcommand

+ + +

+
ExecCommand(command)
+
+ +

Runs a command. + + +

Runs the given command, which is a system executable. + +

+ +


+Next: , +Previous: execcommand Action, +Up: core actions + +
+ +

F.1.34 ExecuteFile

+ + +

+
ExecuteFile(filename)
+
+ +

Run actions from the given file. + + +

Lines starting with # are ignored. + +

+ +


+Next: , +Previous: ExecuteFile Action, +Up: core actions + +
+ +

F.1.35 Flip

+ + +

+
Flip(Object|Selected|SelectedElements)
+
+ +

Flip an element to the opposite side of the board. + + +

Note that the location of the element will be symmetric about the +cursor location; i.e. if the part you are pointing at will still be at +the same spot once the element is on the other side. When flipping +multiple elements, this retains their positions relative to each +other, not their absolute positions on the board. + +

+ +


+Next: , +Previous: Flip Action, +Up: core actions + +
+ +

F.1.36 FontEdit

+ + +

+
FontEdit()
+
+ +

Convert the current font to a PCB for editing. + + +

+ +


+Next: , +Previous: FontEdit Action, +Up: core actions + +
+ +

F.1.37 FontSave

+ + +

+
FontSave()
+
+ +

Convert the current PCB back to a font. + + +

+ +


+Next: , +Previous: FontSave Action, +Up: core actions + +
+ +

F.1.38 FreeRotateBuffer

+ + +

+
FreeRotateBuffer([Angle])
+
+ +

Rotates the current paste buffer contents by the specified angle. The +angle is given in degrees. If no angle is given, the user is prompted +for one. + + +

Rotates the contents of the pastebuffer by an arbitrary angle. If no +angle is given, the user is prompted for one. + +

+ +


+Next: , +Previous: FreeRotateBuffer Action, +Up: core actions + +
+ +

F.1.39 GlobalPuller

+ + +

+
GlobalPuller()
+
+ +

Pull all traces tight. + + +

+ +


+Next: , +Previous: GlobalPuller Action, +Up: core actions + +
+ +

F.1.40 h

+ + +

+
h
+
+ +

Print a help message for commands. + + +

This is one of the command box helper actions. While it is a regular +action and can be used like any other action, its name and syntax are +optimized for use with the command box (:) and thus the syntax +is documented for that purpose. + +

+ +


+Next: , +Previous: h Action, +Up: core actions + +
+ +

F.1.41 Import

+ + +

+
Import()
+Import([gnetlist|make[,source,source,...]])
+Import(setnewpoint[,(mark|center|X,Y)])
+Import(setdisperse,D,units)
+
+
+ +

Import schematics. + + +

Imports element and netlist data from the schematics (or some other +source). The first parameter, which is optional, is the mode. If not +specified, the import::mode attribute in the PCB is used. +gnetlist means gnetlist is used to obtain the information from +the schematics. make invokes make, assuming the user +has a Makefile in the current directory. The Makefile +will be invoked with the following variables set: + +

+
PCB
The name of the .pcb file + +
SRCLIST
A space-separated list of source files + +
OUT
The name of the file in which to put the command script, which may +contain any Pcb actions. By default, this is a temporary file +selected by Pcb, but if you specify an import::outfile +attribute, that file name is used instead (and not automatically +deleted afterwards). + +
+ +

The target specified to be built is the first of these that apply: + +

    +
  • The target specified by an import::target attribute. + +
  • The output file specified by an import::outfile attribute. + +
  • If nothing else is specified, the target is pcb_import. + +
+ +

If you specify an import::makefile attribute, then "-f <that +file>" will be added to the command line. + +

If you specify the mode, you may also specify the source files +(schematics). If you do not specify any, the list of schematics is +obtained by reading the import::srcN attributes (like +import::src0, import::src1, etc). + +

For compatibility with future extensions to the import file format, +the generated file must not start with the two characters +#%. + +

If a temporary file is needed the TMPDIR environment variable +is used to select its location. + +

Note that the programs gnetlist and make may be +overridden by the user via the make-program and gnetlist +pcb settings (i.e. in ~/.pcb/settings or on the command +line). + +

If Pcb cannot determine which schematic(s) to import from, the GUI +is called to let user choose (see ImportGUI()). + +

Note that Import() doesn't delete anything - after an Import, elements +which shouldn't be on the board are selected and may be removed once +it's determined that the deletion is appropriate. + +

If Import() is called with setnewpoint, then the location +of new components can be specified. This is where parts show up when +they're added to the board. The default is the center of the board. + +

+
Import(setnewpoint)
+Prompts the user to click on the board somewhere, uses that point. If +called by a hotkey, uses the current location of the crosshair. + +
Import(setnewpoint,mark)
+Uses the location of the mark. If no mark is present, the point is +not changed. + +
Import(setnewpoint,center)
+Resets the point to the center of the board. + +
Import(setnewpoint,X,Y,units)
+Sets the point to the specific coordinates given. Example: +Import(setnewpoint,50,25,mm) + +
+ +

Note that the X and Y locations are stored in attributes named +import::newX and import::newY so you could change them +manually if you wished. + +

Calling Import(setdisperse,D,units) sets how much the newly +placed elements are dispersed relative to the set point. For example, +Import(setdisperse,10,mm) will offset each part randomly up to +10mm away from the point. The default dispersion is 1/10th of the +smallest board dimension. Dispersion is saved in the +import::disperse attribute. + +

+ +


+Next: , +Previous: Import Action, +Up: core actions + +
+ +

F.1.42 l

+ + +

+
l [name]
+
+ +

Loads layout data. + + +

Loads a new datafile (layout) and, if confirmed, overwrites any +existing unsaved data. The filename and the searchpath +(filePath) are passed to the command defined by +fileCommand. If no filename is specified a file select box +will popup. + +

This is one of the command box helper actions. While it is a regular +action and can be used like any other action, its name and syntax are +optimized for use with the command box (:) and thus the syntax +is documented for that purpose. + +

+ +


+Next: , +Previous: l Action, +Up: core actions + +
+ +

F.1.43 le

+ + +

+
le [name]
+
+ +

Loads an element into the current buffer. + + +

The filename and the searchpath (elementPath) are passed to the +command defined by elementCommand. If no filename is specified +a file select box will popup. + +

This is one of the command box helper actions. While it is a regular +action and can be used like any other action, its name and syntax are +optimized for use with the command box (:) and thus the syntax +is documented for that purpose. + +

+ +


+Next: , +Previous: le Action, +Up: core actions + +
+ +

F.1.44 LoadFootprint

+ + +

+
LoadFootprint(filename[,refdes,value])
+
+ +

Loads a single footprint by name. + + +

Loads a single footprint by name, rather than by reference or through +the library. If a refdes and value are specified, those are inserted +into the footprint as well. The footprint remains in the paste buffer. + +

+ +


+Next: , +Previous: LoadFootprint Action, +Up: core actions + +
+ +

F.1.45 LoadFrom

+ + +

+
LoadFrom(Layout|LayoutToBuffer|ElementToBuffer|Netlist|Revert,filename)
+
+ +

Load layout data from a file. + + +

This action assumes you know what the filename is. The various GUIs +should have a similar Load action where the filename is +optional, and will provide their own file selection mechanism to let +you choose the file name. + +

+
Layout
Loads an entire PCB layout, replacing the current one. + +
LayoutToBuffer
Loads an entire PCB layout to the paste buffer. + +
ElementToBuffer
Loads the given element file into the paste buffer. Element files +contain only a single Element definition, such as the +“newlib” library uses. + +
Netlist
Loads a new netlist, replacing any current netlist. + +
Revert
Re-loads the current layout from its disk file, reverting any changes +you may have made. + +
+ +
+ +


+Next: , +Previous: LoadFrom Action, +Up: core actions + +
+ +

F.1.46 LoadVendorFrom

+ + +

+
LoadVendorFrom(filename)
+
+ +

Loads the specified vendor resource file. + + +

+

+
filename
Name of the vendor resource file. If not specified, the user will +be prompted to enter one. +
+ +
+ +


+Next: , +Previous: LoadVendorFrom Action, +Up: core actions + +
+ +

F.1.47 m

+ + +

+
m [name]
+
+ +

Loads a layout into the current buffer. + + +

The filename and the searchpath (filePath) are passed to the +command defined by fileCommand. +If no filename is specified a file select box will popup. + +

This is one of the command box helper actions. While it is a regular +action and can be used like any other action, its name and syntax are +optimized for use with the command box (:) and thus the syntax +is documented for that purpose. + +

+ +


+Next: , +Previous: m Action, +Up: core actions + +
+ +

F.1.48 MarkCrosshair

+ + +

+
MarkCrosshair()
+MarkCrosshair(Center)
+
+ +

Set/Reset the Crosshair mark. + + +

The “mark” is a small X-shaped target on the display which is +treated like a second origin (the normal origin is the upper let +corner of the board). The GUI will display a second set of +coordinates for this mark, which tells you how far you are from it. + +

If no argument is given, the mark is toggled - disabled if it was +enabled, or enabled at the current cursor position of disabled. If +the Center argument is given, the mark is moved to the current +cursor location. + +

+ +


+Next: , +Previous: MarkCrosshair Action, +Up: core actions + +
+ +

F.1.49 Message

+ + +

+
Message(message)
+
+ +

Writes a message to the log window. + + +

This action displays a message to the log window. This action is primarily +provided for use by other programs which may interface with PCB. If +multiple arguments are given, each one is sent to the log window +followed by a newline. + +

+ +


+Next: , +Previous: Message Action, +Up: core actions + +
+ +

F.1.50 MinClearGap

+ + +

+
MinClearGap(delta)
+MinClearGap(Selected, delta)
+
+ +

Ensures that polygons are a minimum distance from objects. + + +

Checks all specified objects, and increases the polygon clearance if +needed to ensure a minimum distance between their edges and the +polygon edges. + +

+ +


+Next: , +Previous: MinClearGap Action, +Up: core actions + +
+ +

F.1.51 MinMaskGap

+ + +

+
MinMaskGap(delta)
+MinMaskGap(Selected, delta)
+
+ +

Ensures the mask is a minimum distance from pins and pads. + + +

Checks all specified pins and/or pads, and increases the mask if +needed to ensure a minimum distance between the pin or pad edge and +the mask edge. + +

+ +


+Next: , +Previous: MinMaskGap Action, +Up: core actions + +
+ +

F.1.52 Mode

+ + +

+
Mode(Arc|Arrow|Copy|InsertPoint|Line|Lock|Move|None|PasteBuffer)
+Mode(Polygon|Rectangle|Remove|Rotate|Text|Thermal|Via)
+Mode(Notify|Release|Cancel|Stroke)
+Mode(Save|Restore)
+
+ +

Change or use the tool mode. + + +

+
Arc
Arrow
Copy
InsertPoint
Line
Lock
Move
None
PasteBuffer
Polygon
Rectangle
Remove
Rotate
Text
Thermal
Via
Select the indicated tool. + +
Notify
Called when you press the mouse button, or move the mouse. + +
Release
Called when you release the mouse button. + +
Cancel
Cancels any pending tool activity, allowing you to restart elsewhere. +For example, this allows you to start a new line rather than attach a +line to the previous line. + +
Escape
Similar to Cancel but calling this action a second time will return +to the Arrow tool. + +
Stroke
If your pcb was built with libstroke, this invokes the stroke +input method. If not, this will restart a drawing mode if you were +drawing, else it will select objects. + +
Save
Remembers the current tool. + +
Restore
Restores the tool to the last saved tool. + +
+ +
+ +


+Next: , +Previous: Mode Action, +Up: core actions + +
+ +

F.1.53 MorphPolygon

+ + +

+
MorphPolygon(Object|Selected)
+
+ +

Converts dead polygon islands into separate polygons. + + +

If a polygon is divided into unconnected "islands", you can use +this command to convert the otherwise disappeared islands into +separate polygons. Be sure the cursor is over a portion of the +polygon that remains visible. Very small islands that may flake +off are automatically deleted. + +

+ +


+Next: , +Previous: MorphPolygon Action, +Up: core actions + +
+ +

F.1.54 MoveLayer

+ + +

+
MoveLayer(old,new)
+
+ +

Moves/Creates/Deletes Layers. + + +

Moves a layer, creates a new layer, or deletes a layer. + +

+
old
The is the layer number to act upon. Allowed values are: +
+
c
Currently selected layer. + +
-1
Create a new layer. + +
number
An existing layer number. + +
+ +
new
Specifies where to move the layer to. Allowed values are: +
+
-1
Deletes the layer. + +
up
Moves the layer up. + +
down
Moves the layer down. + +
c
Creates a new layer. + +
+ +
+ +
+ +


+Next: , +Previous: MoveLayer Action, +Up: core actions + +
+ +

F.1.55 MoveObject

+ + +

+
MoveObject(X,Y,dim)
+
+ +

Moves the object under the crosshair. + + +

The X and Y are treated like delta is for many +other objects. For each, if it's prefixed by + or -, +then that amount is relative. Otherwise, it's absolute. Units can be +mil or mm; if unspecified, units are PCB's internal +units, currently 1/100 mil. + +

+ +


+Next: , +Previous: MoveObject Action, +Up: core actions + +
+ +

F.1.56 MoveToCurrentLayer

+ + +

+
MoveToCurrentLayer(Object|SelectedObjects)
+
+ +

Moves objects to the current layer. + + +

Note that moving an element from a component layer to a solder layer, +or from solder to component, won't automatically flip it. Use the +Flip() action to do that. + +

+ +


+Next: , +Previous: MoveToCurrentLayer Action, +Up: core actions + +
+ +

F.1.57 Netlist

+ + +

+
Net(find|select|rats|norats|clear[,net[,pin]])
+Net(freeze|thaw|forcethaw)
+Net(add,net,pin)
+
+ +

Perform various actions on netlists. + + +

Each of these actions apply to a specified set of nets. net and +pin are patterns which match one or more nets or pins; these +patterns may be full names or regular expressions. If an exact match +is found, it is the only match; if no exact match is found, +then the pattern is tried as a regular expression. + +

If neither net nor pin are specified, all nets apply. If +net is specified but not pin, all nets matching net +apply. If both are specified, nets which match net and contain +a pin matching pin apply. + +

+
find
Nets which apply are marked found and are drawn in the +connected-color color. + +
select
Nets which apply are selected. + +
rats
Nets which apply are marked as available for the rats nest. + +
norats
Nets which apply are marked as not available for the rats nest. + +
clear
Clears the netlist. + +
add
Add the given pin to the given netlist, creating either if needed. + +
sort
Called after a list of add's, this sorts the netlist. + +
freeze
thaw
forcethaw
Temporarily prevents changes to the netlist from being reflected in +the GUI. For example, if you need to make multiple changes, you +freeze the netlist, make the changes, then thaw it. Note that +freeze/thaw requests may nest, with the netlist being fully thawed +only when all pending freezes are thawed. You can bypass the nesting +by using forcethaw, which resets the freeze count and immediately +updates the GUI. + +
+ +
+ +


+Next: , +Previous: Netlist Action, +Up: core actions + +
+ +

F.1.58 New

+ + +

+
New([name])
+
+ +

Starts a new layout. + + +

If a name is not given, one is prompted for. + +

+ +


+Next: , +Previous: New Action, +Up: core actions + +
+ +

F.1.59 OptAutoOnly

+ + +

+
OptAutoOnly()
+
+ +

Toggles the optimize-only-autorouted flag. + + +

The original purpose of the trace optimizer was to clean up the traces +created by the various autorouters that have been used with PCB. When +a board has a mix of autorouted and carefully hand-routed traces, you +don't normally want the optimizer to move your hand-routed traces. +But, sometimes you do. By default, the optimizer only optimizes +autorouted traces. This action toggles that setting, so that you can +optimize hand-routed traces also. + +

+ +


+Next: , +Previous: OptAutoOnly Action, +Up: core actions + +
+ +

F.1.60 PasteBuffer

+ + +

+
PasteBuffer(AddSelected|Clear|1..MAX_BUFFER)
+PasteBuffer(Rotate, 1..3)
+PasteBuffer(Convert|Save|Restore|Mirror)
+PasteBuffer(ToLayout, X, Y, units)
+
+ +

Various operations on the paste buffer. + + +

There are a number of paste buffers; the actual limit is a +compile-time constant MAX_BUFFER in globalconst.h. It +is currently 5. One of these is the “current” paste buffer, +often referred to as “the” paste buffer. + +

+
AddSelected
Copies the selected objects to the current paste buffer. + +
Clear
Remove all objects from the current paste buffer. + +
Convert
Convert the current paste buffer to an element. Vias are converted to +pins, lines are converted to pads. + +
Restore
Convert any elements in the paste buffer back to vias and lines. + +
Mirror
Flip all objects in the paste buffer vertically (up/down flip). To mirror +horizontally, combine this with rotations. + +
Rotate
Rotates the current buffer. The number to pass is 1..3, where 1 means +90 degrees counter clockwise, 2 means 180 degrees, and 3 means 90 +degrees clockwise (270 CCW). + +
Save
Saves any elements in the current buffer to the indicated file. + +
ToLayout
Pastes any elements in the current buffer to the indicated X, Y +coordinates in the layout. The X and Y are treated like +delta is for many other objects. For each, if it's prefixed by ++ or -, then that amount is relative to the last +location. Otherwise, it's absolute. Units can be +mil or mm; if unspecified, units are PCB's internal +units, currently 1/100 mil. + +
1..MAX_BUFFER
Selects the given buffer to be the current paste buffer. + +
+ +
+ +


+Next: , +Previous: PasteBuffer Action, +Up: core actions + +
+ +

F.1.61 Polygon

+ + +

+
Polygon(Close|PreviousPoint)
+
+ +

Some polygon related stuff. + + +

Polygons need a special action routine to make life easier. + +

+
Close
Creates the final segment of the polygon. This may fail if clipping +to 45 degree lines is switched on, in which case a warning is issued. + +
PreviousPoint
Resets the newly entered corner to the previous one. The Undo action +will call Polygon(PreviousPoint) when appropriate to do so. + +
+ +
+ +


+Next: , +Previous: Polygon Action, +Up: core actions + +
+ +

F.1.62 Puller

+ + +

+
Puller()
+
+ +

Pull an arc-line junction tight. + + +

The Puller() action is a special-purpose optimization. When +invoked while the crosshair is over the junction of an arc and a line, +it will adjust the arc's angle and the connecting line's endpoint such +that the line intersects the arc at a tangent. In the example below, +the left side is “before” with the black target marking where to put +the crosshair: + +

Example of how puller works
+ +

The right side is “after” with the black target marking where the +arc-line intersection was moved to. + +

+ +


+Next: , +Previous: Puller Action, +Up: core actions + +
+ +

F.1.63 q

+ + +

+
q
+
+ +

Quits the application after confirming. + + +

If you have unsaved changes, you will be prompted to confirm (or +save) before quitting. + +

This is one of the command box helper actions. While it is a regular +action and can be used like any other action, its name and syntax are +optimized for use with the command box (:) and thus the syntax +is documented for that purpose. + +

+ + +


+Next: , +Previous: q Action, +Up: core actions + +
+ +

F.1.64 q!

+ + +

+
q!
+
+ +

Quits the application without confirming. + + +

Note that this command neither saves your data nor prompts for +confirmation. + +

This is one of the command box helper actions. While it is a regular +action and can be used like any other action, its name and syntax are +optimized for use with the command box (:) and thus the syntax +is documented for that purpose. + +

+ +


+Next: , +Previous: q! Action, +Up: core actions + +
+ +

F.1.65 Quit

+ + +

+
Quit()
+
+ +

Quits the application after confirming. + + +

If you have unsaved changes, you will be prompted to confirm (or +save) before quitting. + +

+ +


+Next: , +Previous: Quit Action, +Up: core actions + +
+ +

F.1.66 Redo

+ + +

+
Redo()
+
+ +

Redo recent“undo”operations. + + +

This routine allows you to recover from the last undo command. You +might want to do this if you thought that undo was going to revert +something other than what it actually did (in case you are confused +about which operations are un-doable), or if you have been backing up +through a long undo list and over-shoot your stopping point. Any +change that is made since the undo in question will trim the redo +list. For example if you add ten lines, then undo three of them you +could use redo to put them back, but if you move a line on the board +before performing the redo, you will lose the ability to "redo" the +three "undone" lines. + +

+ +


+Next: , +Previous: Redo Action, +Up: core actions + +
+ +

F.1.67 RemoveSelected

+ + +

+
RemoveSelected()
+
+ +

Removes any selected objects. + + +

+ +


+Next: , +Previous: RemoveSelected Action, +Up: core actions + +
+ +

F.1.68 Renumber

+ + +

+
Renumber()
+Renumber(filename)
+
+ +

Renumber all elements. The changes will be recorded to filename +for use in backannotating these changes to the schematic. + + +

+ +


+Next: , +Previous: Renumber Action, +Up: core actions + +
+ +

F.1.69 Report

+ + +

+
Report(Object|DrillReport|FoundPins|NetLength|AllNetLengths|[,name])
+
+ +

Produce various report. + + +

+
Object
The object under the crosshair will be reported, describing various +aspects of the object. + +
DrillReport
A report summarizing the number of drill sizes used, and how many of +each, will be produced. + +
FoundPins
A report listing all pins and pads which are marked as “found” will +be produced. + +
NetLength
The name and length of the net under the crosshair will be reported to +the message log. + +
AllNetLengths
The name and length of the net under the crosshair will be reported to +the message log. An optional parameter specifies mm, mil, pcb, or in +units + +
+ +
+ +


+Next: , +Previous: Report Action, +Up: core actions + +
+ +

F.1.70 ReportDialog

+ + +

+
ReportDialog()
+
+ +

Report on the object under the crosshair + + +

This is a shortcut for Report(Object). + +

+ +


+Next: , +Previous: ReportDialog Action, +Up: core actions + +
+ +

F.1.71 RipUp

+ + +

+
RipUp(All|Selected|Element)
+
+ +

Ripup auto-routed tracks, or convert an element to parts. + + +

+
All
Removes all lines and vias which were created by the autorouter. + +
Selected
Removes all selected lines and vias which were created by the +autorouter. + +
Element
Converts the element under the cursor to parts (vias and lines). Note +that this uses the highest numbered paste buffer. + +
+ +
+ +


+Next: , +Previous: RipUp Action, +Up: core actions + +
+ +

F.1.72 rn

+ + +

+
rn [name]
+
+ +

Reads netlist. + + +

If no filename is given a file select box will pop up. The file is +read via the command defined by the RatCommand resource. The +command must send its output to stdout. + +

Netlists are used for generating rat's nests (see Rats Nest) and +for verifying the board layout (which is also accomplished by the +Ratsnest command). + +

This is one of the command box helper actions. While it is a regular +action and can be used like any other action, its name and syntax are +optimized for use with the command box (:) and thus the syntax +is documented for that purpose. + +

+ +


+Next: , +Previous: rn Action, +Up: core actions + +
+ +

F.1.73 RouteStyle

+ + +

+
RouteStyle(1|2|3|4)
+
+ +

Copies the indicated routing style into the current sizes. + + +

+ +


+Next: , +Previous: RouteStyle Action, +Up: core actions + +
+ +

F.1.74 s

+ + +

+
s [name]
+
+ +

Saves layout data. + + +

Data and the filename are passed to the command defined by the +resource saveCommand. It must read the layout data from +stdin. If no filename is entered, either the last one is used +again or, if it is not available, a file select box will pop up. + +

This is one of the command box helper actions. While it is a regular +action and can be used like any other action, its name and syntax are +optimized for use with the command box (:) and thus the syntax +is documented for that purpose. + +

+ +


+Next: , +Previous: s Action, +Up: core actions + +
+ +

F.1.75 SaveSettings

+ + +

+
SaveSettings()
+SaveSettings(local)
+
+ +

Saves settings. + + +

If you pass no arguments, the settings are stored in +$HOME/.pcb/settings. If you pass the word local they're +saved in ./pcb.settings. + +

+ +


+Next: , +Previous: SaveSettings Action, +Up: core actions + +
+ +

F.1.76 SaveTo

+ + +

+
SaveTo(Layout|LayoutAs,filename)
+SaveTo(AllConnections|AllUnusedPins|ElementConnections,filename)
+SaveTo(PasteBuffer,filename)
+
+ +

Saves data to a file. + + +

+
Layout
Saves the current layout. + +
LayoutAs
Saves the current layout, and remembers the filename used. + +
AllConnections
Save all connections to a file. + +
AllUnusedPins
List all unused pins to a file. + +
ElementConnections
Save connections to the element at the cursor to a file. + +
PasteBuffer
Save the content of the active Buffer to a file. This is the graphical way to create a footprint. + +
+ +
+ +


+Next: , +Previous: SaveTo Action, +Up: core actions + +
+ +

F.1.77 Select

+ + +

+
Select(Object|ToggleObject)
+Select(All|Block|Connection)
+Select(ElementByName|ObjectByName|PadByName|PinByName)
+Select(ElementByName|ObjectByName|PadByName|PinByName, Name)
+Select(TextByName|ViaByName|NetByName)
+Select(TextByName|ViaByName|NetByName, Name)
+Select(Convert)
+
+ +

Toggles or sets the selection. + + +

+
ElementByName
ObjectByName
PadByName
PinByName
TextByName
ViaByName
NetByName
+These all rely on having a regular expression parser built into +pcb. If the name is not specified then the user is prompted +for a pattern, and all objects that match the pattern and are of the +type specified are selected. + +
Object
ToggleObject
Selects the object under the cursor. + +
Block
Selects all objects in a rectangle indicated by the cursor. + +
All
Selects all objects on the board. + +
Connection
Selects all connections with the “found” flag set. + +
Convert
Converts the selected objects to an element. This uses the highest +numbered paste buffer. + +
+ +
+ +


+Next: , +Previous: Select Action, +Up: core actions + +
+ +

F.1.78 SetFlag

+ + +

+
SetFlag(Object|Selected|SelectedObjects, flag)
+SetFlag(SelectedLines|SelectedPins|SelectedVias, flag)
+SetFlag(SelectedPads|SelectedTexts|SelectedNames, flag)
+SetFlag(SelectedElements, flag)
+flag = square | octagon | thermal | join
+
+ +

Sets flags on objects. + + +

Turns the given flag on, regardless of its previous setting. See +ChangeFlag. + +

     SetFlag(SelectedPins,thermal)
+
+
+ +


+Next: , +Previous: SetFlag Action, +Up: core actions + +
+ +

F.1.79 SetOctagon

+ + +

+
SetOctagon(Object|ToggleObject|SelectedElements|Selected)
+
+ +

Sets the octagon-flag of objects. + + +

Pins, pads, and vias can have various shapes. All may be round. Pins +and pads may be square (obviously "square" pads are usually +rectangular). Pins and vias may be octagonal. When you change a +shape flag of an element, you actually change all of its pins and +pads. + +

Note that the square flag takes precedence over the octagon flag, +thus, if both the square and octagon flags are set, the object is +square. When the square flag is cleared, the pins and pads will be +either round or, if the octagon flag is set, octagonal. + +

+ +


+Next: , +Previous: SetOctagon Action, +Up: core actions + +
+ +

F.1.80 SetSame

+ + +

+
SetSame()
+
+ +

Sets current layer and sizes to match indicated item. + + +

When invoked over any line, arc, polygon, or via, this changes the +current layer to be the layer that item is on, and changes the current +sizes (thickness, keepaway, drill, etc) according to that item. + +

+ +


+Next: , +Previous: SetSame Action, +Up: core actions + +
+ +

F.1.81 SetSquare

+ + +

+
SetSquare(ToggleObject|SelectedElements|SelectedPins)
+
+ +

sets the square-flag of objects. + + +

Note that Pins means pins and pads. + +

Pins, pads, and vias can have various shapes. All may be round. Pins +and pads may be square (obviously "square" pads are usually +rectangular). Pins and vias may be octagonal. When you change a +shape flag of an element, you actually change all of its pins and +pads. + +

Note that the square flag takes precedence over the octagon flag, +thus, if both the square and octagon flags are set, the object is +square. When the square flag is cleared, the pins and pads will be +either round or, if the octagon flag is set, octagonal. + +

+ +


+Next: , +Previous: SetSquare Action, +Up: core actions + +
+ +

F.1.82 SetThermal

+ + +

+
SetThermal(Object|SelectedPins|SelectedVias|Selected, Style)
+
+ +

Set the thermal (on the current layer) of pins or vias to the given style. +Style = 0 means no thermal. +Style = 1 has diagonal fingers with sharp edges. +Style = 2 has horizontal and vertical fingers with sharp edges. +Style = 3 is a solid connection to the plane.Style = 4 has diagonal fingers with rounded edges. +Style = 5 has horizontal and vertical fingers with rounded edges. + + +

This changes how/whether pins or vias connect to any rectangle or polygon +on the current layer. The first argument can specify one object, or all +selected pins, or all selected vias, or all selected pins and vias. +The second argument specifies the style of connection. +There are 5 possibilities: +0 - no connection, +1 - 45 degree fingers with sharp edges, +2 - horizontal & vertical fingers with sharp edges, +3 - solid connection, +4 - 45 degree fingers with rounded corners, +5 - horizontal & vertical fingers with rounded corners. + +

Pins and Vias may have thermals whether or not there is a polygon available +to connect with. However, they will have no effect without the polygon. + +

+ +


+Next: , +Previous: SetThermal Action, +Up: core actions + +
+ +

F.1.83 SetValue

+ + +

+
SetValue(Grid|Line|LineSize|Text|TextScale|ViaDrillingHole|Via|ViaSize, delta)
+
+ +

Change various board-wide values and sizes. + + +

+
ViaDrillingHole
Changes the diameter of the drill for new vias. + +
Grid
Sets the grid spacing. + +
Line
LineSize
Changes the thickness of new lines. + +
Via
ViaSize
Changes the diameter of new vias. + +
Text
TextScale
Changes the size of new text. + +
+ +
+ +


+Next: , +Previous: SetValue Action, +Up: core actions + +
+ +

F.1.84 ToggleHideName

+ + +

+
ToggleHideName(Object|SelectedElements)
+
+ +

Toggles the visibility of element names. + + +

If names are hidden you won't see them on the screen and they will not +appear on the silk layer when you print the layout. + +

+ +


+Next: , +Previous: ToggleHideName Action, +Up: core actions + +
+ +

F.1.85 ToggleVendor

+ + +

+
ToggleVendor()
+
+ +

Toggles the state of automatic drill size mapping. + + +

+When drill mapping is enabled, new instances of pins and vias will +have their drill holes mapped to one of the allowed drill sizes +specified in the currently loaded vendor drill table. To enable drill +mapping, a vendor resource file containing a drill table must be +loaded first. + +

+ +


+Next: , +Previous: ToggleVendor Action, +Up: core actions + +
+ +

F.1.86 Undo

+ + +

+
Undo()
+Undo(ClearList)
+
+ +

Undo recent changes. + + +

The unlimited undo feature of Pcb allows you to recover from +most operations that materially affect you work. Calling +Undo() without any parameter recovers from the last (non-undo) +operation. ClearList is used to release the allocated +memory. ClearList is called whenever a new layout is started or +loaded. See also Redo and Atomic. + +

Note that undo groups operations by serial number; changes with the +same serial number will be undone (or redone) as a group. See +Atomic. + +

+ +


+Next: , +Previous: Undo Action, +Up: core actions + +
+ +

F.1.87 UnloadVendor

+ + +

+
UnloadVendor()
+
+ +

Unloads the current vendor drill mapping table. + + +

+ +

+ +


+Next: , +Previous: UnloadVendor Action, +Up: core actions + +
+ +

F.1.88 Unselect

+ + +

+
Unselect(All|Block|Connection)
+Unselect(ElementByName|ObjectByName|PadByName|PinByName)
+Unselect(ElementByName|ObjectByName|PadByName|PinByName, Name)
+Unselect(TextByName|ViaByName)
+Unselect(TextByName|ViaByName, Name)
+
+
+ +

Unselects the object at the pointer location or the specified objects. + + +

+
All
Unselect all objects. + +
Block
Unselect all objects in a rectangle given by the cursor. + +
Connection
Unselect all connections with the “found” flag set. + +
ElementByName
ObjectByName
PadByName
PinByName
TextByName
ViaByName
+These all rely on having a regular expression parser built into +pcb. If the name is not specified then the user is prompted +for a pattern, and all objects that match the pattern and are of the +type specified are unselected. + +
+ +
+ +


+Next: , +Previous: Unselect Action, +Up: core actions + +
+ +

F.1.89 w

+ + +

+
w [name]
+
+ +

Saves layout data. + + +

This commands has been added for the convenience of vi users +and has the same functionality as s. + +

This is one of the command box helper actions. While it is a regular +action and can be used like any other action, its name and syntax are +optimized for use with the command box (:) and thus the syntax +is documented for that purpose. + +

+ +


+Previous: w Action, +Up: core actions + +
+ +

F.1.90 wq

+ + +

+
wq
+
+ +

Saves the layout data and quits. + + +

This command has been added for the convenience of vi users and +has the same functionality as s combined with q. + +

This is one of the command box helper actions. While it is a regular +action and can be used like any other action, its name and syntax are +optimized for use with the command box (:) and thus the syntax +is documented for that purpose. + +

+ +


+Next: , +Previous: core actions, +Up: Action Reference + +
+ +

F.2 common actions

+ + + +
+ +


+Next: , +Up: common actions + +
+ +

F.2.1 LayersChanged

+ + +

+
LayersChanged()
+
+ +

Tells the GUI that the layers have changed. + + +

This includes layer names, colors, stacking order, visibility, etc. + +

This is one of a number of actions which are part of the HID +interface. The core functions use these actions to tell the current +GUI when to change the presented information in response to changes +that the GUI may not know about. The user normally does not invoke +these directly. + +

+ +


+Next: , +Previous: LayersChanged Action, +Up: common actions + +
+ +

F.2.2 LibraryChanged

+ + +

+
LibraryChanged()
+
+ +

Tells the GUI that the libraries have changed. + + +

This is one of a number of actions which are part of the HID +interface. The core functions use these actions to tell the current +GUI when to change the presented information in response to changes +that the GUI may not know about. The user normally does not invoke +these directly. + +

+ +


+Next: , +Previous: LibraryChanged Action, +Up: common actions + +
+ +

F.2.3 NetlistChanged

+ + +

+
NetlistChanged()
+
+ +

Tells the GUI that the netlist has changed. + + +

This is one of a number of actions which are part of the HID +interface. The core functions use these actions to tell the current +GUI when to change the presented information in response to changes +that the GUI may not know about. The user normally does not invoke +these directly. + +

+ +

F.2.4 PCBChanged

+ + +

+
PCBChanged([revert])
+
+ +

Tells the GUI that the whole PCB has changed. The optional“revert"parameter can be used as a hint to the GUI that the same design is beingreloaded, and that it might keep some viewport settings + + +

This is one of a number of actions which are part of the HID +interface. The core functions use these actions to tell the current +GUI when to change the presented information in response to changes +that the GUI may not know about. The user normally does not invoke +these directly. + +

+ +


+Previous: PCBChanged Action, +Up: common actions + +
+ +

F.2.5 RouteStylesChanged

+ + +

+
RouteStylesChanged()
+
+ +

Tells the GUI that the routing styles have changed. + + +

This is one of a number of actions which are part of the HID +interface. The core functions use these actions to tell the current +GUI when to change the presented information in response to changes +that the GUI may not know about. The user normally does not invoke +these directly. + +

+ +


+Next: , +Previous: common actions, +Up: Action Reference + +
+ +

F.3 gtk actions

+ + +
+ +


+Next: , +Up: gtk actions + +
+ +

F.3.1 gtk About

+ + +

+
About()
+
+ +

N_("Tell the user about this version of PCB."); + + +

This just pops up a dialog telling the user which version of +pcb they're running. + +

+ +


+Next: , +Previous: gtk About Action, +Up: gtk actions + +
+ +

F.3.2 gtk AdjustStyle

+ + +

+
AdjustStyle()
+
+
+ +

Open the window which allows editing of the route styles. + + +

Opens the window which allows editing of the route styles. + +

+ +


+Next: , +Previous: gtk AdjustStyle Action, +Up: gtk actions + +
+ +

F.3.3 gtk Center

+ + +

+
Center()
+
+
+ +

N_("Moves the pointer to the center of the window."); + + +

Move the pointer to the center of the window, but only if it's +currently within the window already. + +

+ +


+Next: , +Previous: gtk Center Action, +Up: gtk actions + +
+ +

F.3.4 gtk Cursor

+ + +

+
Cursor(Type,DeltaUp,DeltaRight,Units)
+
+ +

N_("Move the cursor."); + + +

This action moves the mouse cursor. Unlike other actions which take +coordinates, this action's coordinates are always relative to the +user's view of the board. Thus, a positive DeltaUp may move the +cursor towards the board origin if the board is inverted. + +

Type is one of ‘Pan’ or ‘Warp’. ‘Pan’ causes the +viewport to move such that the crosshair is under the mouse cursor. +‘Warp’ causes the mouse cursor to move to be above the crosshair. + +

Units can be one of the following: + +

+
mil
mm
The cursor is moved by that amount, in board units. + +
grid
The cursor is moved by that many grid points. + +
view
The values are percentages of the viewport's view. Thus, a pan of +‘100’ would scroll the viewport by exactly the width of the +current view. + +
board
The values are percentages of the board size. Thus, a move of +‘50,50’ moves you halfway across the board. + +
+ +
+ +


+Next: , +Previous: gtk Cursor Action, +Up: gtk actions + +
+ +

F.3.5 gtk DoWindows

+ + +

+
DoWindows(1|2|3|4|5|6)
+DoWindows(Layout|Library|Log|Netlist|Preferences|DRC)
+
+ +

N_("Open various GUI windows."); + + +

+
1
Layout
Open the layout window. Since the layout window is always shown +anyway, this has no effect. + +
2
Library
Open the library window. + +
3
Log
Open the log window. + +
4
Netlist
Open the netlist window. + +
5
Preferences
Open the preferences window. + +
6
DRC
Open the DRC violations window. + +
+ +
+ +


+Next: , +Previous: gtk DoWindows Action, +Up: gtk actions + +
+ +

F.3.6 gtk EditLayerGroups

+ + +

+
EditLayerGroups()
+
+
+ +

Open the preferences window which allows editing of the layer groups. + + +

Opens the preferences window which is where the layer groups +are edited. This action is primarily provides to provide menu +resource compatibility with the lesstif HID. + +

+ +


+Next: , +Previous: gtk EditLayerGroups Action, +Up: gtk actions + +
+ +

F.3.7 gtk GetXY

+ + +

+
GetXY()
+
+ +

N_("Get a coordinate."); + + +

Prompts the user for a coordinate, if one is not already selected. + +

+ +


+Next: , +Previous: gtk GetXY Action, +Up: gtk actions + +
+ +

F.3.8 gtk ImportGUI

+ + +

+
ImportGUI()
+
+ +

N_("Asks user which schematics to import into PCB. +"); + + +

Asks user which schematics to import into PCB. + +

+ +


+Next: , +Previous: gtk ImportGUI Action, +Up: gtk actions + +
+ +

F.3.9 gtk Pan

+ + +

+
Pan([thumb], Mode)
+
+ +

N_("Start or stop panning (Mode = 1 to start, 0 to stop) +Optional thumb argument is ignored for now in gtk hid. +"); + + +

Start or stop panning. To start call with Mode = 1, to stop call with +Mode = 0. + +

+ +


+Next: , +Previous: gtk Pan Action, +Up: gtk actions + +
+ +

F.3.10 gtk Popup

+ + +

+
Popup(MenuName, [Button])
+
+ +

N_("Bring up the popup menu specified by MenuName. +If called by a mouse event then the mouse button number +must be specified as the optional second argument."); + + +

This just pops up the specified menu. The menu must have been defined +as a named subresource of the Popups resource in the menu resource +file. + +

+ +


+Next: , +Previous: gtk Popup Action, +Up: gtk actions + +
+ +

F.3.11 gtk Print

+ + +

+
Print()
+
+ +

N_("Print the layout."); + + +

This will find the default printing HID, prompt the user for its +options, and print the layout. + +

+ +


+Next: , +Previous: gtk Print Action, +Up: gtk actions + +
+ +

F.3.12 gtk PrintCalibrate

+ + +

+
PrintCalibrate()
+
+ +

N_("Calibrate the printer."); + + +

This will print a calibration page, which you would measure and type +the measurements in, so that future printouts will be more precise. + +

+ +


+Next: , +Previous: gtk PrintCalibrate Action, +Up: gtk actions + +
+ +

F.3.13 gtk Save

+ + +

+
Save()
+Save(Layout|LayoutAs)
+Save(AllConnections|AllUnusedPins|ElementConnections)
+Save(PasteBuffer)
+
+ +

N_("Save layout and/or element data to a user-selected file."); + + +

This action is a GUI front-end to the core's SaveTo action +(see SaveTo Action). If you happen to pass a filename, like +SaveTo, then SaveTo is called directly. Else, the +user is prompted for a filename to save, and then SaveTo is +called with that filename. + +

+ +


+Next: , +Previous: gtk Save Action, +Up: gtk actions + +
+ +

F.3.14 gtk SelectLayer

+ + +

+
SelectLayer(1..MAXLAYER|Silk|Rats)
+
+ +

Select which layer is the current layer. + + +

The specified layer becomes the currently active layer. It is made +visible if it is not already visible + +

+ +


+Next: , +Previous: gtk SelectLayer Action, +Up: gtk actions + +
+ +

F.3.15 gtk SetUnits

+ + +

+
SetUnits(mm|mil)
+
+ +

N_("Set the default measurement units."); + + +

+
mil
Sets the display units to mils (1/1000 inch). + +
mm
Sets the display units to millimeters. + +
+ +
+ +


+Next: , +Previous: gtk SetUnits Action, +Up: gtk actions + +
+ +

F.3.16 gtk SwapSides

+ + +

+
SwapSides(|v|h|r)
+
+ +

N_("Swaps the side of the board you're looking at."); + + +

This action changes the way you view the board. + +

+
v
Flips the board over vertically (up/down). + +
h
Flips the board over horizontally (left/right), like flipping pages in +a book. + +
r
Rotates the board 180 degrees without changing sides. + +
+ +

If no argument is given, the board isn't moved but the opposite side +is shown. + +

Normally, this action changes which pads and silk layer are drawn as +true silk, and which are drawn as the "invisible" layer. It also +determines which solder mask you see. + +

As a special case, if the layer group for the side you're looking at +is visible and currently active, and the layer group for the opposite +is not visible (i.e. disabled), then this action will also swap which +layer group is visible and active, effectively swapping the “working +side” of the board. + +

+ +


+Next: , +Previous: gtk SwapSides Action, +Up: gtk actions + +
+ +

F.3.17 gtk ToggleView

+ + +

+
ToggleView(1..MAXLAYER)
+ToggleView(layername)
+ToggleView(Silk|Rats|Pins|Vias|Mask|BackSide)
+
+ +

Toggle the visibility of the specified layer or layer group. + + +

If you pass an integer, that layer is specified by index (the first +layer is 1, etc). If you pass a layer name, that layer is +specified by name. When a layer is specified, the visibility of the +layer group containing that layer is toggled. + +

If you pass a special layer name, the visibility of those components +(silk, rats, etc) is toggled. Note that if you have a layer named +the same as a special layer, the layer is chosen over the special layer. + +

+ +


+Previous: gtk ToggleView Action, +Up: gtk actions + +
+ +

F.3.18 gtk Zoom

+ + +

+
Zoom()
+Zoom(factor)
+
+ +

N_("Various zoom factor changes."); + +Changes the zoom (magnification) of the view of the board. If no +arguments are passed, the view is scaled such that the board just fits +inside the visible window (i.e. “view all”). Otherwise, +factor specifies a change in zoom factor. It may be prefixed by ++, -, or = to change how the zoom factor is +modified. The factor is a floating point number, such as +1.5 or 0.75. + +

+ +
+factor
Values greater than 1.0 cause the board to be drawn smaller; more of +the board will be visible. Values between 0.0 and 1.0 cause the board +to be drawn bigger; less of the board will be visible. + +
-factor
Values greater than 1.0 cause the board to be drawn bigger; less of +the board will be visible. Values between 0.0 and 1.0 cause the board +to be drawn smaller; more of the board will be visible. + +
=factor
+The factor is an absolute zoom factor; the unit for this value +is "PCB units per screen pixel". Since PCB units are 0.01 mil, a +factor of 1000 means 10 mils (0.01 in) per pixel, or 100 DPI, +about the actual resolution of most screens - resulting in an "actual +size" board. Similarly, a factor of 100 gives you a 10x actual +size. + +
+ +

Note that zoom factors of zero are silently ignored. + +

+ +


+Previous: gtk actions, +Up: Action Reference + +
+ +

F.4 lesstif actions

+ + + + +

F.4.1 lesstif About

+ + +

+
About()
+
+ +

Tell the user about this version of PCB. + + +

This just pops up a dialog telling the user which version of +pcb they're running. + +

+ +

F.4.2 lesstif AdjustSizes

+ + +

+
AdjustSizes()
+
+ +

Let the user change the board size, DRC parameters, etc + + +

Displays a dialog box that lets the user change the board +size, DRC parameters, and text scale. + +

The units are determined by the default display units. + +

+ +

F.4.3 lesstif AdjustStyle

+ + +

+
AdjustStyle()
+
+ +

Displays the route style adjustment window. + + +

+ +

F.4.4 lesstif Benchmark

+ + +

+
Benchmark()
+
+ +

Benchmark the GUI speed. + + +

This action is used to speed-test the Lesstif graphics subsystem. It +redraws the current screen as many times as possible in ten seconds. +It reports the amount of time needed to draw the screen once. + +

+ +

F.4.5 lesstif Command

+ + +

+
Command()
+
+ +

Displays the command line input window. + + +

The command window allows the user to manually enter actions to be +executed. Action syntax can be done one of two ways: + +

+
Follow the action name by an open parenthesis, arguments separated by +commas, end with a close parenthesis. Example: Abc(1,2,3) + +
Separate the action name and arguments by spaces. Example: Abc +1 2 3. + +
+ +

The first option allows you to have arguments with spaces in them, +but the second is more “natural” to type for most people. + +

Note that action names are not case sensitive, but arguments normally +are. However, most actions will check for “keywords” in a case +insensitive way. + +

There are three ways to finish with the command window. If you press +the Enter key, the command is invoked, the window goes away, +and the next time you bring up the command window it's empty. If you +press the Esc key, the window goes away without invoking +anything, and the next time you bring up the command window it's +empty. If you change focus away from the command window (i.e. click +on some other window), the command window goes away but the next time +you bring it up it resumes entering the command you were entering +before. + +

+ +


+Next: , +Previous: lesstif Command Action, +Up: lesstif actions + +
+ +

F.4.6 lesstif Cursor

+ + +

+
Cursor(Type,DeltaUp,DeltaRight,Units)
+
+ +

Move the cursor. + + +

This action moves the mouse cursor. Unlike other actions which take +coordinates, this action's coordinates are always relative to the +user's view of the board. Thus, a positive DeltaUp may move the +cursor towards the board origin if the board is inverted. + +

Type is one of ‘Pan’ or ‘Warp’. ‘Pan’ causes the +viewport to move such that the crosshair is under the mouse cursor. +‘Warp’ causes the mouse cursor to move to be above the crosshair. + +

Units can be one of the following: + +

+
mil
mm
The cursor is moved by that amount, in board units. + +
grid
The cursor is moved by that many grid points. + +
view
The values are percentages of the viewport's view. Thus, a pan of +‘100’ would scroll the viewport by exactly the width of the +current view. + +
board
The values are percentages of the board size. Thus, a move of +‘50,50’ moves you halfway across the board. + +
+ +
+ +


+Next: , +Previous: lesstif Cursor Action, +Up: lesstif actions + +
+ +

F.4.7 lesstif Debug

+ + +

+
Debug(...)
+
+ +

Debug action. + + +

This action exists to help debug scripts; it simply prints all its +arguments to stdout. + +

+ +

F.4.8 lesstif DebugXY

+ + +

+
DebugXY(...)
+
+ +

Debug action, with coordinates + + +

Like Debug, but requires a coordinate. If the user hasn't yet +indicated a location on the board, the user will be prompted to click +on one. + +

+ +

F.4.9 lesstif DoWindows

+ + +

+
DoWindows(1|2|3|4)
+DoWindows(Layout|Library|Log|Netlist)
+
+ +

Open various GUI windows. + + +

+
1
Layout
Open the layout window. Since the layout window is always shown +anyway, this has no effect. + +
2
Library
Open the library window. + +
3
Log
Open the log window. + +
4
Netlist
Open the netlist window. + +
+ + + +

F.4.10 lesstif DumpKeys

+ + +

+
DumpKeys()
+
+ +

Dump Lesstif key bindings. + + +

Causes the list of key bindings (from pcb-menu.res) to be +dumped to stdout. This is most useful when invoked from the command +line like this: + +

     pcb --action-string DumpKeys
+
+ + +

F.4.11 lesstif EditLayerGroups

+ + +

+
EditLayerGroups()
+
+ +

Let the user change the layer groupings + + +

Displays a dialog that lets the user view and change the layer +groupings. Each layer (row) can be a member of any one layer group +(column). Note the special layers solder and component +allow you to specify which groups represent the top and bottom of the +board. + +

See ChangeName Action. + +

+ +

F.4.12 lesstif Export

+ + +

+
Export()
+
+ +

Export the layout. + + +

Prompts the user for an exporter to use. Then, prompts the user for +that exporter's options, and exports the layout. + +

+ +

F.4.13 lesstif GetXY

+ + +

+
GetXY()
+
+ +

Get a coordinate. + + +

Prompts the user for a coordinate, if one is not already selected. + +

+ +

F.4.14 lesstif ImportGUI

+ + +

+
ImportGUI()
+
+ +

Lets the user choose the schematics to import from + + +

Displays a dialog that lets the user select the schematic(s) to import +from, then saves that information in the layout's attributes for +future imports. + +

+ +


+Next: , +Previous: lesstif ImportGUI Action, +Up: lesstif actions + +
+ +

F.4.15 lesstif LibraryShow

+ + +

+
LibraryShow()
+
+ +

Displays the library window. + + +

+ +

F.4.16 lesstif Load

+ + +

+
Load()
+Load(Layout|LayoutToBuffer|ElementToBuffer|Netlist|Revert)
+
+ +

Load layout data from a user-selected file. + + +

This action is a GUI front-end to the core's LoadFrom action +(see LoadFrom Action). If you happen to pass a filename, like +LoadFrom, then LoadFrom is called directly. Else, the +user is prompted for a filename to load, and then LoadFrom is +called with that filename. + +

+ +

F.4.17 lesstif LoadVendor

+ + +

+
LoadVendor()
+
+ +

Loads a user-selected vendor resource file. + + +

The user is prompted for a file to load, and then +LoadVendorFrom is called (see LoadVendorFrom Action) to +load that vendor file. + +

+ +

F.4.18 lesstif NetlistShow

+ + +

+
NetlistShow(pinname|netname)
+
+ +

Selects the given pinname or netname in the netlist window. + + +

+ +

F.4.19 lesstif Print

+ + +

+
Print()
+
+ +

Print the layout. + + +

This will find the default printing HID, prompt the user for its +options, and print the layout. + +

+ +

F.4.20 lesstif PrintCalibrate

+ + +

+
PrintCalibrate()
+
+ +

Calibrate the printer. + + +

This will print a calibration page, which you would measure and type +the measurements in, so that future printouts will be more precise. + +

+ +

F.4.21 lesstif PromptFor

+ + +

+
PromptFor([message[,default]])
+
+ +

Prompt for a response. + + +

This is mostly for testing the lesstif HID interface. The parameters +are passed to the prompt_for() HID function, causing the user +to be prompted for a response. The respose is simply printed to the +user's stdout. + +

+ +


+Next: , +Previous: lesstif PromptFor Action, +Up: lesstif actions + +
+ +

F.4.22 lesstif Return

+ + +

+
Return(0|1)
+
+ +

Simulate a passing or failing action. + + +

This is for testing. If passed a 0, does nothing and succeeds. If +passed a 1, does nothing but pretends to fail. + +

+ +

F.4.23 lesstif Save

+ + +

+
Save()
+Save(Layout|LayoutAs)
+Save(AllConnections|AllUnusedPins|ElementConnections)
+Save(PasteBuffer)
+
+ +

Save layout data to a user-selected file. + + +

This action is a GUI front-end to the core's SaveTo action +(see SaveTo Action). If you happen to pass a filename, like +SaveTo, then SaveTo is called directly. Else, the +user is prompted for a filename to save, and then SaveTo is +called with that filename. + +

+ +


+Next: , +Previous: lesstif Save Action, +Up: lesstif actions + +
+ +

F.4.24 lesstif SelectLayer

+ + +

+
SelectLayer(1..MAXLAYER|Silk|Rats)
+
+ +

Select which layer is the current layer. + + +

The specified layer becomes the currently active layer. It is made +visible if it is not already visible + +

+ +

F.4.25 lesstif SetUnits

+ + +

+
SetUnits(mm|mil)
+
+ +

Set the default measurement units. + + +

+
mil
Sets the display units to mils (1/1000 inch). + +
mm
Sets the display units to millimeters. + +
+ + + +

F.4.26 lesstif SwapSides

+ + +

+
SwapSides(|v|h|r)
+
+ +

Swaps the side of the board you're looking at. + + +

This action changes the way you view the board. + +

+
v
Flips the board over vertically (up/down). + +
h
Flips the board over horizontally (left/right), like flipping pages in +a book. + +
r
Rotates the board 180 degrees without changing sides. + +
+ +

If no argument is given, the board isn't moved but the opposite side +is shown. + +

Normally, this action changes which pads and silk layer are drawn as +true silk, and which are drawn as the "invisible" layer. It also +determines which solder mask you see. + +

As a special case, if the layer group for the side you're looking at +is visible and currently active, and the layer group for the opposite +is not visible (i.e. disabled), then this action will also swap which +layer group is visible and active, effectively swapping the “working +side” of the board. + +

+ +


+Next: , +Previous: lesstif SwapSides Action, +Up: lesstif actions + +
+ +

F.4.27 lesstif ToggleView

+ + +

+
ToggleView(1..MAXLAYER)
+ToggleView(layername)
+ToggleView(Silk|Rats|Pins|Vias|Mask|BackSide)
+
+ +

Toggle the visibility of the specified layer or layer group. + + +

If you pass an integer, that layer is specified by index (the first +layer is 1, etc). If you pass a layer name, that layer is +specified by name. When a layer is specified, the visibility of the +layer group containing that layer is toggled. + +

If you pass a special layer name, the visibility of those components +(silk, rats, etc) is toggled. Note that if you have a layer named +the same as a special layer, the layer is chosen over the special layer. + +

+ +


+Previous: lesstif ToggleView Action, +Up: lesstif actions + +
+ +

F.4.28 lesstif Zoom

+ + +

+
Zoom()
+Zoom(factor)
+
+ +

Various zoom factor changes. + + +

Changes the zoom (magnification) of the view of the board. If no +arguments are passed, the view is scaled such that the board just fits +inside the visible window (i.e. “view all”). Otherwise, +factor specifies a change in zoom factor. It may be prefixed by ++, -, or = to change how the zoom factor is +modified. The factor is a floating point number, such as +1.5 or 0.75. + +

+
+factor
Values greater than 1.0 cause the board to be drawn smaller; more of +the board will be visible. Values between 0.0 and 1.0 cause the board +to be drawn bigger; less of the board will be visible. + +
-factor
Values greater than 1.0 cause the board to be drawn bigger; less of +the board will be visible. Values between 0.0 and 1.0 cause the board +to be drawn smaller; more of the board will be visible. + +
=factor
+The factor is an absolute zoom factor; the unit for this value +is "PCB units per screen pixel". Since PCB units are 0.01 mil, a +factor of 1000 means 10 mils (0.01 in) per pixel, or 100 DPI, +about the actual resolution of most screens - resulting in an "actual +size" board. Similarly, a factor of 100 gives you a 10x actual +size. + +
+ +

Note that zoom factors of zero are silently ignored. + + +

+ +


+Next: , +Previous: Action Reference, +Up: Top + +
+ +

Appendix G Glossary

+ +

+

+
Footprint
The pattern of metal, silkscreen, soldermask relief, and drills which +defines where you place a component on a circuit board. +Footprints are the placed by the user onto the PC board during the +placement phase of PCB layout. + +
Gerber File
The file format used in the industry to convey a board database to the +manufacturer is RS-274X (which replaces the now obsolete RS-274D +format). This file format was originally developed by Gerber for +their photo plotters and thus RS-274D and RS-274X format files +are often times refered to as “Gerber” files. + +
Thermal, Thermal Relief
A thermal relief is a way of connecting a pin to a ground +or power plane. Instead of directly connecting to the plane, small "spokes" +are used to increase the thermal resistance between the pin and the plane. +Often times these connections are refered to as simply a thermal. By increasing +the thermal resistance to the plane, it becomes easier to solder to the +pin. In the drawing below, the pin on the left is connected to the +polygon using a solid connection with no thermal relief, the middle +pin is connected using a thermal, while the pin on the right has no +connection to the polygon. In PCB, the “Thermal” Tool is used to +make both a solid connection and one with thermal relief (see Polygon Objects). + +
Example of a thermal relief
+ +
+ + +
+ +


+Previous: Glossary, +Up: Top + +
+ +

Index of Resources

+ +

Index of Actions, Commands and Options

+ + + +

Index of Concepts

+ + + + +
+

Table of Contents

+ +
+ + + Index: trunk/doc-orig/pcb.info =================================================================== --- trunk/doc-orig/pcb.info (nonexistent) +++ trunk/doc-orig/pcb.info (revision 1037) @@ -0,0 +1,326 @@ +This is pcb.info, produced by makeinfo version 4.13 from pcb.texi. + +INFO-DIR-SECTION Miscellaneous +START-INFO-DIR-ENTRY +* pcb: (pcb). An interactive printed circuit board editor. +END-INFO-DIR-ENTRY + + This file documents how to use Pcb, the open source, interactive +printed circuit board layout system. + + Copyright (C) 1994,1995,1996, 2004 Thomas Nau + + Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 harry eaton + + Copyright (C) 2003, 2004, 2005, 2006, 2007, 2009 Dan McMahill + + Copyright (C) 2004 DJ Delorie + + This program is free software; you may redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or (at +your option) any later version. + + This program is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANT-ABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +General Public License for more details. + + +Indirect: +pcb.info-1: 1021 +pcb.info-2: 300750 + +Tag Table: +(Indirect) +Node: Top1021 +Node: Copying2396 +Node: History3068 +Node: Overview7954 +Node: Intro8775 +Node: Symbol Objects10256 +Node: Via Objects10836 +Node: Element Objects11854 +Node: Layer Objects18737 +Node: Line Objects21889 +Node: Arc Objects24857 +Node: Polygon Objects26305 +Node: Text Objects28934 +Node: Net Objects29749 +Node: Getting Started30679 +Node: Application Window32927 +Node: Menu33576 +Node: Status-line and Input-field42616 +Node: Layer Controls45891 +Node: Tool Selectors49569 +Node: Layout Area56271 +Node: Log Window57139 +Node: Library Window57973 +Node: Netlist Window59217 +Node: Drawing and Removing60811 +Node: Common62955 +Node: Lines64804 +Node: Arcs66368 +Node: Polygons67551 +Node: Text69438 +Node: Vias70423 +Node: Elements71799 +Node: Pastebuffer77269 +Node: Moving and Copying79091 +Node: Loading and Saving80502 +Node: Printing82110 +Node: Exporting86518 +Node: bom86973 +Node: gcode87161 +Node: gerber90012 +Node: nelma90212 +Node: png90364 +Node: ps90508 +Node: eps90677 +Node: Connection Lists90914 +Node: Arrow Tool92720 +Node: Rats Nest94951 +Node: Design Rule Checking100036 +Node: Trace Optimizer102401 +Node: Searching for elements103945 +Node: Measuring distances104446 +Node: Vendor drill mapping105169 +Node: Autorouter108407 +Node: User Commands111745 +Node: Command-Line Options115952 +Node: General Options117224 +Node: General GUI Options119187 +Node: GTK+ GUI Options120305 +Node: lesstif GUI Options120881 +Node: Colors121452 +Node: Layer Names123460 +Node: Paths124209 +Node: Sizes125057 +Node: Commands126692 +Node: DRC Options128043 +Node: BOM Creation128812 +Node: Gerber Export129132 +Node: Postscript Export129494 +Node: Encapsulated Postscript Export131251 +Node: PNG Options131805 +Node: lpr Printing Options133335 +Node: nelma Options133771 +Node: X11 Interface134197 +Node: Resources134665 +Node: Actions150194 +Node: Translations177398 +Node: File Formats178937 +Node: Pad and Line Representation180586 +Node: Layout File181568 +Node: Element File183083 +Node: Font File184124 +Node: Netlist File184505 +Node: Library Contents File185786 +Node: Library File186841 +Node: File Syntax189295 +Node: Arc syntax190661 +Node: Attribute syntax191870 +Node: Connect syntax192381 +Node: Cursor syntax192734 +Node: DRC syntax193207 +Node: Element syntax193698 +Node: ElementArc syntax195640 +Node: ElementLine syntax196598 +Node: FileVersion syntax197051 +Node: Flags syntax197549 +Node: Grid syntax197844 +Node: Groups syntax198336 +Node: Layer syntax198925 +Node: Line syntax199448 +Node: Mark syntax200109 +Node: Net syntax200372 +Node: Netlist syntax200649 +Node: Pad syntax200810 +Node: PCB syntax201766 +Node: Pin syntax202100 +Node: PolyArea syntax202899 +Node: Polygon syntax203253 +Node: Rat syntax203744 +Node: Styles syntax204125 +Node: Symbol syntax205071 +Node: SymbolLine syntax205457 +Node: Text syntax205755 +Node: Thermal syntax206463 +Node: Via syntax206875 +Node: Object Flags207549 +Node: PCBFlags210352 +Node: Library Creation211816 +Node: Schematic Frontends230358 +Node: gEDA231140 +Node: xcircuit239834 +Node: Installation240128 +Node: compiling240659 +Node: quickstart240981 +Node: running configure241377 +Node: problems242549 +Node: HP243984 +Node: Sun244645 +Node: SGI245002 +Node: DEC Alpha245317 +Node: SCO245488 +Node: Linux245969 +Node: BSD246164 +Node: X11246547 +Node: TeX and Manuals247359 +Node: Custom Menus247863 +Node: Resource Syntax248429 +Node: Menu Definitions250770 +Node: Menu Files and Defaults253429 +Node: Regular Expressions254235 +Node: Standard Drill Sizes258031 +Node: Centroid File Format268079 +Node: Action Reference270931 +Node: core actions272542 +Node: AddRats Action278476 +Node: ApplyVendor Action278945 +Node: Atomic Action279277 +Node: Attributes Action280430 +Node: AutoPlaceSelected Action280843 +Node: AutoRoute Action281201 +Node: ChangeClearSize Action281951 +Node: ChangeDrillSize Action282518 +Node: ChangeFlag Action282839 +Node: ChangeHole Action283565 +Node: ChangeJoin Action283926 +Node: ChangeName Action284520 +Node: ChangeOctagon Action284965 +Node: ChangePaste Action285822 +Node: ChangePinName Action286296 +Node: ChangeSize Action286734 +Node: ChangeSquare Action287479 +Node: ClearOctagon Action288372 +Node: ClearSquare Action289225 +Node: ClrFlag Action290052 +Node: Connection Action290573 +Node: Delete Action291236 +Node: DeleteRats Action291445 +Node: DisableVendor Action291658 +Node: DisperseElements Action292071 +Node: Display Action292575 +Node: djopt Action297281 +Node: DRC Action299027 +Node: DumpLibrary Action299290 +Node: elementlist Action299501 +Node: elementsetattr Action300299 +Node: EnableVendor Action300750 +Node: execcommand Action301253 +Node: ExecuteFile Action301508 +Node: Flip Action301756 +Node: FontEdit Action302305 +Node: FontSave Action302503 +Node: FreeRotateBuffer Action302706 +Node: GlobalPuller Action303175 +Node: h Action303370 +Node: Import Action303773 +Node: l Action307425 +Node: le Action308057 +Node: LoadFootprint Action308640 +Node: LoadFrom Action309082 +Node: LoadVendorFrom Action310064 +Node: m Action310399 +Node: MarkCrosshair Action310983 +Node: Message Action311681 +Node: MinClearGap Action312120 +Node: MinMaskGap Action312533 +Node: Mode Action312939 +Node: MorphPolygon Action314180 +Node: MoveLayer Action314706 +Node: MoveObject Action315408 +Node: MoveToCurrentLayer Action315895 +Node: Netlist Action316318 +Node: New Action318068 +Node: OptAutoOnly Action318281 +Node: PasteBuffer Action318940 +Node: Polygon Action320762 +Node: Puller Action321345 +Node: q Action322053 +Node: q! Action322543 +Node: Quit Action323025 +Node: Redo Action323286 +Node: RemoveSelected Action324092 +Node: Renumber Action324297 +Node: Report Action324598 +Node: ReportDialog Action325457 +Node: RipUp Action325709 +Node: rn Action326243 +Node: RouteStyle Action326975 +Node: s Action327191 +Node: SaveSettings Action327844 +Node: SaveTo Action328187 +Node: Select Action328910 +Node: SetFlag Action330064 +Node: SetOctagon Action330579 +Node: SetSame Action331351 +Node: SetSquare Action331765 +Node: SetThermal Action332574 +Node: SetValue Action333855 +Node: ToggleHideName Action334413 +Node: ToggleVendor Action334787 +Node: Undo Action335296 +Node: UnloadVendor Action335975 +Node: Unselect Action336190 +Node: w Action337131 +Node: wq Action337623 +Node: common actions338118 +Node: LayersChanged Action338783 +Node: LibraryChanged Action339342 +Node: NetlistChanged Action339865 +Node: PCBChanged Action340382 +Node: RouteStylesChanged Action341049 +Node: gtk actions341560 +Node: gtk About Action343137 +Node: gtk AdjustStyle Action343408 +Node: gtk Center Action343708 +Node: gtk Cursor Action344031 +Node: gtk DoWindows Action345156 +Node: gtk EditLayerGroups Action345781 +Node: gtk GetXY Action346222 +Node: gtk ImportGUI Action346486 +Node: gtk Pan Action346761 +Node: gtk Popup Action347126 +Node: gtk Print Action347610 +Node: gtk PrintCalibrate Action347900 +Node: gtk Save Action348262 +Node: gtk SelectLayer Action348861 +Node: gtk SetUnits Action349214 +Node: gtk SwapSides Action349549 +Node: gtk ToggleView Action350615 +Node: gtk Zoom Action351395 +Node: lesstif actions352831 +Node: lesstif About Action354739 +Node: lesstif AdjustSizes Action355023 +Node: lesstif AdjustStyle Action355446 +Node: lesstif Benchmark Action355702 +Node: lesstif Command Action356134 +Node: lesstif Cursor Action357551 +Node: lesstif Debug Action358690 +Node: lesstif DebugXY Action358980 +Node: lesstif DoWindows Action359351 +Node: lesstif DumpKeys Action359866 +Node: lesstif EditLayerGroups Action360283 +Node: lesstif Export Action360854 +Node: lesstif GetXY Action361189 +Node: lesstif ImportGUI Action361463 +Node: lesstif LibraryShow Action361872 +Node: lesstif Load Action362108 +Node: lesstif LoadVendor Action362682 +Node: lesstif NetlistShow Action363070 +Node: lesstif Print Action363354 +Node: lesstif PrintCalibrate Action363667 +Node: lesstif PromptFor Action364051 +Node: lesstif Return Action364521 +Node: lesstif Save Action364868 +Node: lesstif SelectLayer Action365461 +Node: lesstif SetUnits Action365838 +Node: lesstif SwapSides Action366190 +Node: lesstif ToggleView Action367273 +Node: lesstif Zoom Action368077 +Node: Glossary369531 +Node: Index371140 + +End Tag Table Index: trunk/doc-orig/pcb.info-1 =================================================================== --- trunk/doc-orig/pcb.info-1 (nonexistent) +++ trunk/doc-orig/pcb.info-1 (revision 1037) @@ -0,0 +1,7585 @@ +This is pcb.info, produced by makeinfo version 4.13 from pcb.texi. + +INFO-DIR-SECTION Miscellaneous +START-INFO-DIR-ENTRY +* pcb: (pcb). An interactive printed circuit board editor. +END-INFO-DIR-ENTRY + + This file documents how to use Pcb, the open source, interactive +printed circuit board layout system. + + Copyright (C) 1994,1995,1996, 2004 Thomas Nau + + Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 harry eaton + + Copyright (C) 2003, 2004, 2005, 2006, 2007, 2009 Dan McMahill + + Copyright (C) 2004 DJ Delorie + + This program is free software; you may redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or (at +your option) any later version. + + This program is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANT-ABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +General Public License for more details. + + +File: pcb.info, Node: Top, Next: Copying, Up: (dir) + +Pcb +*** + +This document is a manual for `Pcb', the open source, interactive +printed circuit board layout system. + +* Menu: + +* Copying:: `Pcb' is freely redistributable! +* History:: How it all began. +* Overview:: An overview of `Pcb'. +* Intro:: A short description of the basic objects. +* Getting Started:: Introduction to `Pcb'. +* Autorouter:: Using the autorouter. +* User Commands:: User commands of `Pcb'. +* Command-Line Options:: Calling `Pcb' from a shell. +* X11 Interface:: Action routines, resources and default translation. +* File Formats:: Description of `ASCII' files used by `Pcb'. +* Library Creation:: Detailed description of symbol library creation. +* Schematic Frontends:: Schematic capture programs that work with PCB. +* Installation:: Compiling, installing and troubleshooting. +* Custom Menus:: Customizing the menu bar. +* Regular Expressions:: Searching for elements with regular expressions +* Standard Drill Sizes:: Tables of standard drill sizes +* Centroid File Format:: Details of the centroid (x-y) output file +* Action Reference:: Documentation for all available actions +* Glossary:: Glossary +* Index:: The Index. + + +File: pcb.info, Node: Copying, Next: History, Prev: Top, Up: Top + +Copying +******* + +Copyright (C) 1994,1995,1996,1997 Thomas Nau + + Copyright (C) 1998,1999,2000,2001,2002 harry eaton + + This program is free software; you may redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or (at +your option) any later version. + + This program is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANT-ABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +General Public License for more details. + + +File: pcb.info, Node: History, Next: Overview, Prev: Copying, Up: Top + +History +******* + +`Pcb' is a handy tool for laying out printed circuit boards. + + `Pcb' was first written by Thomas Nau for an Atari ST in 1990 and +ported to `UNIX' and `X11' in 1994. It was not intended as a +professional layout system, but as a tool which supports people who do +some home-developing of hardware. + + The second release 1.2 included menus for the first time. This made +`Pcb' easier to use and thus a more important tool. + + Release 1.3 introduced undo for highly-destructive commands, more +straightforward action handling and scalable fonts. Layer-groups were +introduced to group signal-layers together. + + Release 1.4 provided support for add-on device drivers. Two layers +(the solder and the component side) were added to support SMD elements. +The handling of libraries was also improved in 1.4.1. Support for +additional devices like GERBER plotters started in 1.4.4. The undo +feature was expanded and the redo-feature added in 1.4.5. + + harry eaton took over pcb development beginning with Release 1.5, +although he contributed some code beginning with Release 1.4.3 + + Release 1.5 provides support for rats-nest generation from simple net +lists. It also allows for automatic clearances around pins that pierce +a polygon. A variety of other enhancements including a Gerber RS-274X +driver and NC drill file generation have also been added. + + Release 1.6 provides automatic screen updates of changed regions. +This should eliminate most of the need for the redraw ((_R_ key). Also +some changes to what order items under the cursor are selected were +made for better consistency - it is no longer possible to accidentally +move a line or line point that is completely obscured by a polygon +laying over top of it. Larger objects on the upper most layers can be +selected ahead of smaller objects on lower layers. These changes make +operations more intuitive. A new mode of line creation was added that +creates two line on 45 degree angles with a single click. The actual +outline of the prospective line(s) are now shown during line creation. +An arc creation mode was added. Drawn arcs are quarter circles and can +be useful for high frequency controlled impedance lines. (You can have +eighth circle arc if the source is compiled with -DARC45, but be aware +that the ends of such arcs can never intersect a grid point). Two new +flags for pins and vias were created - one indicates that the pin or +via is purely a drill hole and has no copper annulus. You can only +toggle this flag for vias - for elements, it must be an integral part +of the element definition. The other flag controls whether the pad +will be round or octagonal. There is also now a feature for converting +the contents of a buffer into an element. + + Release 1.6.1 added the ability to make groups of action commands +bound to a single X11 event to be undone by a single undo. Also a +simple design rule checker was added - it checks for minimum spacing +and overlap rules. Plus many fixes for bugs introduced with the many +changes of 1.6 + + Release 1.7 added support for routing tracks through polygons +without touching them. It also added support for unplated drill files, +and drawing directly on the silk layer. A Netlist window for easily +working with netlist was also added. + + Release 2.0 adds an auto-router, a new simpler library mechanism, +much improved support for graphically creating (and editing) elements, +viewable solder-mask layers (and editing), snap to pins and pads, +netlist entry by drawing rats, element files (and libraries) that can +contain whole sub-layouts, metric grids, improved user interface, a GNU +autoconf/automake based build system, and a host of other improvements. + + Special thanks goes to: + Thomas Nau (who started the project and wrote the early versions). + C. Scott Ananian (who wrote the auto-router code). + Bernhard Daeubler (Bernhard.Daeubler@physik.uni-ulm.de) + Harald Daeubler (Harald.Daeubler@physik.uni-ulm.de) + DJ Delorie (djdelorie@users.sourceforge.net) + Larry Doolittle (ldoolitt@recycle.lbl.gov) + Dan McMahill (danmc@users.sourceforge.net) + Roland Merk (merk@faw.uni-ulm.de) + Erland Unruh (Erland.Unruh@malmo.trab.se) + Albert John FitzPatrick III (ajf_nylorac@acm.org) + Boerge Strand (borges@ifi.uio.no) + Andre M. Hedrick (hedrick@Astro.Dyer.Vanderbilt.Edu) + +who provided all sorts of help including porting `Pcb' to several +operating systems and platforms, bug fixes, library enhancement, user +interface suggestions and more. In addition to these people, many +others donated time for bug-fixing and other important work. Some of +them can be identified in the source code files. Thanks to all of +them. If you feel left out of this list, I apologize; please send me an +e-mail and I'll try to correct the omission. + + +File: pcb.info, Node: Overview, Next: Intro, Prev: History, Up: Top + +1 Overview +********** + +`Pcb' is an open source printed circuit board editor. `Pcb' includes +many professional features such as: + * Up to 16 copper layer designs by default. By changing a compile + time setting, this can be set as high as needed. + + * RS-274X (Gerber) output + + * NC Drill output + + * Centroid (X-Y) data output + + * Postscript and Encapsulated Postscript output + + * Autorouter + + * Trace optimizer + + * Rats nest + + * Design Rule Checker (DRC) + + * Connectivity verification + + * `Pcb' is Free Software + + * Can interoperate with free schematic capture tools such as gEDA and + xcircuit + + * Runs under Linux, NetBSD, Solaris, and other similar operating + systems. + + * Windows version is available + + +File: pcb.info, Node: Intro, Next: Getting Started, Prev: Overview, Up: Top + +2 Introduction +************** + +Each layout consists of several, mostly independent, objects. This +chapter gives an overview of the object types and their relationship to +each other. For a complete description of how to use `Pcb', refer to +*note Getting Started::. The layout is generated on-screen on a grid +that can have its origin at any desired location. The X coordinate +increases to the right, Y increases down to the bottom. All distances +and sizes in `Pcb' are measured in mils (0.001 inch). One unit on the +coordinate display is one mil in distance on the board. The grid may +be set on a metric pitch, but is only correct to within the nearest +/- +0.01 mil because `Pcb' stores all dimensions as integer multiples of +1/100 of a mil or 0.00001 inch. + + The sections in this chapter are sorted by the order of appearance +of the objects within a layout file. + +* Menu: + +* Symbol Objects:: Information about fonts and symbols. +* Via Objects:: Vias and pins connect layers. +* Element Objects:: Element, the basic type of circuits. +* Layer Objects:: A `container' for lines, text... +* Line Objects:: Tracks on the board +* Arc Objects:: Curved tracks +* Polygon Objects:: Planes and such +* Text Objects:: Objects to add symbols to your board. +* Net Objects:: Describes the desired connections on the board. + + +File: pcb.info, Node: Symbol Objects, Next: Via Objects, Up: Intro + +2.1 Symbols +=========== + +The top object is the layout itself. It uses a set of symbols that +resides at the first logical level. Each symbol is uniquely identified +by a seven bit `ASCII' code. All layout objects share the same set of +symbols. These symbols are used to form text objects on the silkscreen +and copper layers. Undefined symbols are drawn as filled rectangles. + + Every font file is preprocessed by a user-defined command when it is +loaded. For details see `fontCommand', *note Resources::. + + +File: pcb.info, Node: Via Objects, Next: Element Objects, Prev: Symbol Objects, Up: Intro + +2.2 Vias +======== + +Vias provide through-hole connectivity across all layers. While vias +look a lot like element pins, don't use vias for adding elements to the +layout, even if that seems easier than creating a new element. The +default solder-mask will cover over vias, so you won't be able to +solder to them. Of course, you can change this so that vias also have +solder-mask cut-outs, but it is not the default. Vias are also useful +for defining arbitrary drill points such as those used for mounting a +board. Vias used in this way have a special flag set so that they have +no annular copper ring, and also appear in the unplated drill file. +_Ctrl-H_ key over a via switches it between being a pure-mounting hole +and a regular via. You can assign a name to a via, which is useful +during the creation of new element definitions. Each via exists on all +copper layers. (_i.e._ blind and buried vias are not supported) + + +File: pcb.info, Node: Element Objects, Next: Layer Objects, Prev: Via Objects, Up: Intro + +2.3 Elements +============ + +Elements represent the components on a board. Elements are loaded from +`ASCII' coded files in a similar manner to the layout file itself, or +from the library selector window. An element is composed of lines and +arcs on the silk-screen layer (used to define the package outline), pins +(or pads for SMD) and three labels that define the description, the +element's layout-name (which also appears on the silk-screen layer) and +its value. You can choose which of the names are displayed on the screen +with the Screen menu; however, the silk screen in the printout will +always show the layout-name. Element pins are contained on the first +logical level and so reside on all layers, but the pads of surface-mount +elements reside on only the component or solder layers. An element can +have a mixture of pins, pads (on one or both sides), and mounting holes. + + A mark is used to position the element with respect to the cross +hair during pasting. The mark will lie on a grid point when the element +is positioned. The mark is drawn as a small diamond shape, but is only +visible when _both_ the `silk' and `pins/pads' layers are visible. All +parts of an element are treated as one unit, except for the name. It +is not possible to delete a single pin or move only part of an element +on the layout. You can resize separate pieces of an element, but doing +so is usually a bad idea. You can move/rotate the element name +independently of the element it belongs to. When you move an element +name, a line is draw from the cursor to the element mark so it is easy +to tell which element the name belongs to. + + Each pin and pad has two string identifiers, one is the "name" which +is a functional description of the pin (_e.g._ "clock in") and the +other is the "number" of the pin which is used to identify it in a +netlist. The "number" is usually an integer, but it can be any string. +You can edit the "name" of each pin of an element, but the "number" is +embedded in the element definition and is determined when the new +element is first created. Pads are similar to lines on a layer but +they must be oriented either vertically or horizontally. Pads can have +either rounded or square ends. Pins can be round, square, or octagonal. + + Elements are supported by several special layers: `silk', +`pins/pads' and `far-side'. The `silk' layer shows the package outline +and also holds legend text and element names. The `pins/pads' layer is +used to toggle whether the element's pins and pads are displayed. The +`far-side' layer controls visibility of objects (silkscreen and pads) +that are on the far (_i.e._ not currently viewed) side of the board. + + The "oldlib" style of footprint libraries distributed with `Pcb' +rely upon the M4 macro processor. M4 is typically installed under the +name `m4' on most unix-like operating systems. It is recommended that +you use the GNU version of M4 to avoid limitations found in some vendor +implementations. See the m4 man page on your system for more +information. Every element file is preprocessed by a user-defined +command when the file is read. For details see `elementCommand', *note +Resources::. `m4', the default value of `elementCommand', allows you to +create libraries for package definitions that are shared by all +elements. The old element libraries distributed with `Pcb' expect `m4' +or an equivalent to be the _elementCommand_. The new library scheme +simply has each element stored in a self-contained file, so there is no +need to learn `m4' to add to the libraries. + + `Pcb' can create a list of all connections from one (or all) +elements to the others or a list of unconnected pins. It can also +verify the layout connections against a netlist file. The element's +`layout-name' is the name used to identify the element in a netlist +file (see *note Netlist File::). + + The old libraries, or very old (pre-1.6) layout files may have +incorrect pin numbering since there was no concept of pin numbers when +they were created. `Pcb' uses the order of appearance of the pin +definitions in the layout or library file if it uses the old format, +but there is no guarantee that it will be correct for these old objects. + + Be aware that a few of the old library parts may still be incorrectly +implemented regarding pin-numbering. All of the DIL (Dual- +Inline-Pins) parts are correct and most of the others are too, but you +should verify the pin numbering of any non-DIL part before using an old +library part. (use the `generate object report' in the Info menu to +see what `Pcb' thinks a pin's number is) All of the old library names +begin with a ~, so you can easily identify them. The old libraries +also _may_ contain other sorts of errors, including incorrect pin +spacing, silkscreen overlapping solder areas, etc. Check carefully any +element in the old library before using it! As the new library grows, +the old library will be pared down to at least remove all of the +elements with errors, but this will take time. + + You can make your own element definitions graphically now. Simply +draw vias for the pins, lines on the solder and/or component layers for +surface-mount pads (they must be either horizontal or vertical), and +lines and arcs on the silkscreen layer for the silkscreen outline. You +should _name_ (_N_ key) each via and copper line with the pin _number_. +Once you are happy with the geometry, select everything that is to +become part of the element, then choose `convert selection to element' +from the Select menu. Afterwords you can make pin (or pad) one square +if you like, and give the element its various names. You can also give +the pins and pads their functional names. Note that the element mark +corresponds to the position you click after choosing the conversion +from the menu, so decide where the mark goes and make sure it falls on +a grid point before you request the conversion. If the vias/lines are +not named, then the pin numbering will correspond to the order in which +they were placed. + + When you create a new element, remember that silkscreen lines should +_never_ overlap the copper part of the pins or pads, as this can +interfere with soldering. The silkscreen should identify the maximum +extent of the element package so it is easy to see how close elements +can be placed together. + + If you want to make an element similar to an existing one, you can +break an element into constituent pieces from the Buffer menu. Paste +the pieces to the layout, make the necessary changes, then convert it +back into an element. If the pin numbers haven't changed, there is no +need to name each via/line as they are pre-named when the element was +broken apart. When you create a new element, you can save it to a file +in order to have easy access to it the next time you run `Pcb'. + + +File: pcb.info, Node: Layer Objects, Next: Line Objects, Prev: Element Objects, Up: Intro + +2.4 Layers +========== + +Every layout consists of several layers that can be used independently +or treated as a group. Layer groups can be used to logically separate +(and color-code) different traces (_e.g._ power and signal); however, +all layers within a group reside on the same physical copper layer of a +board, so using different layers within the same group won't provide +electrical separation where they touch or overlap. For details, see +`layerGroups', *note Resources::. Each layer is drawn in a color +defined in the resource file and identified by a name that you can +change (for details see `layerColor', *note Resources::.) Layers are +really just containers for line, arc, polygon, and text objects. The +component and solder layers contain SMD elements as well, but the file +structure doesn't reflect that fact directly. + + Each layer group represents a physical layer on the printed circuit +board. If you want to make a four layer board, you'll need to have at +least four layer groups. Connections between layer groups are +established only through element pins and vias. The relationship +between a specific layer and the board itself is configurable from the +`Edit layer groups' option in the Settings menu. The layer groups +corresponding to the physical layers: _component-side_ and +_solder-side_ are always defined and you must map at least one logical +layer to each, even if you plan to make a single-sided board. You are +not obligated to put tracks on either of them. Surface mount elements +always reside on either the component-side or the solder-side layer +group. When you paste an element from the buffer, it will go onto +whichever side of the board you are viewing. You can swap which side +of the board you are viewing by pressing the _Tab_ key, or by selecting +`view solder side' from the Screen menu. The layer groups just have a +name or number associated with them - where they are sandwiched in the +board is left for you to tell the manufacturer. + + The silkscreen layer is special because there are actually two +silkscreen layers, one for the top (component) and one for the bottom +(solder) side of the board. Which silk layer you draw on is determined +by the side of the board that you are viewing. If you are viewing the +component side, then drawing on the silk layer draws to the +component-side silk layer. + + The netlist layer is another special layer. It shows rat's-nest lines +(_i.e._ guides that show how the netlist expects the element to +interconnect). If you make this the active layer, you can use the Line +tool to add entries into the netlist, or to delete connections from the +netlist window. Except for these two purposes, you should not make the +netlist layer the active layer. Usually there is no need to do this +because a separate schematic package should be used to create the +netlist. `Pcb' can automatically draw all of the rats from the netlist. +In some cases you may want to make a small change without going to the +trouble of modifying the schematic, which is why this facility is +provided. + + +File: pcb.info, Node: Line Objects, Next: Arc Objects, Prev: Layer Objects, Up: Intro + +2.5 Lines +========= + +Lines are used to draw tracks on the pc board. When in the line mode, +each _Btn1_ press establishes one end of a line. Once the second point +is defined, the line is drawn and a new line started where the first +one ended. You can abandon the new starting point in favor of another +by pressing _Ctrl-Btn1_, or _Btn3_, but don't use _Btn2_. The undo +function (_U_ key or `undo last operation' from the Edit menu) will +take you back point by point if you use it while in the line mode. + + New lines can be restricted to 45 degree angles if desired. You can +toggle this restriction on and off while creating lines by pressing the +_period_ key. If the 45 degree restriction is turned on, then the _/_ +(forward slash) key can be used to cycle through three different modes +of 45 degree line creation. One mode just creates a single line forced +to the nearest 45 degree vector. The next mode creates two lines from +the start to end points such that the first line leaves the start point +at a 90 degree vector, and the second line enters the end point on a 45 +degree vector. The last mode creates two lines such that the first line +leaves the start point on a 45 degree vector and arrives at the end +point on a 90 degree vector. You can temporarily swap between the last +two modes by holding the _Shift_ key down. + + It is simple to edit a line object by breaking it into pieces +(insert point mode), moving an end point or the whole line (_Arrow +tool_), or changing the layer it resides on (_M_ key moves the line +under the pointer to the active layer). In the case when two line +segments meet at exactly the same point you can delete the intermediate +point, otherwise the delete tool removes an entire line. Feel free to +experiment since `Pcb' will allow you to undo and redo anything that +materially affects your work. If you switch active layers in the midst +of placing lines a via will automatically be placed, when necessary, in +order to continue the connection. + + If you draw a line inside a polygon, it will either plow through the +polygon creating a clearance, or touch the polygon. This behavior is +selectable in the Settings menu for new lines. To change the behavior +of an existing line, hit the _J_ key with the cross hair over the line. +You can increase the size of the clearance by 2 mils on each edge with +the with the _K_ key. _Shift-K_ will decrease the clearance by 2 mils. +The increment may be changed from 2 mils through the application +resource file. The clearance can be also increased, decreased and set +by the _ChangeClearSize_ action. + + Lines do not need to intersect the center of a pin, pad, via, or +other line for `Pcb' to understand that they make electrical connection. +If the connection is too tenuous, running the design rule checker will +report that the connection may break if the line width shrinks slightly. + + +File: pcb.info, Node: Arc Objects, Next: Polygon Objects, Prev: Line Objects, Up: Intro + +2.6 Arcs +======== + +`Pcb' can handle arcs of any angular extent, but when you create an arc +with the Arc tool, it will be a quarter circle (this means they always +bend a right angle). Arcs are very similar to lines otherwise. They +are created on the active layer and have the same thickness that new +lines will have. The various clicks for creating lines work pretty +much the same way for creating arcs. In order to make the arc curve in +the desired direction, drag the mouse along the tangent line from the +starting position towards the end position. If the grid is too coarse, +it may not be possible to distinguish whether you've moved over then up, +or up then over, so if you can't seem to make the arc go in the +direction you want, try pressing the _Shift_ key while drawing the arc. +Decreasing the grid spacing may also help. Alternatively you can draw +the wrong arc, then rotate and move it where you want. Like the Line +tool, after an arc is drawn a new starting point is established at the +end point. + + Whenever a starting point is established by either the Line or Arc +tools it will be retained if you switch directly between the tools +(e.g. _F2_ key for Lines, _F8_ key for Arcs. Arcs can either touch or +clear polygons just like lines do. Of course connection searches, undo +and all the other features you'd expect work with arcs too. + + +File: pcb.info, Node: Polygon Objects, Next: Text Objects, Prev: Arc Objects, Up: Intro + +2.7 Polygons +============ + +Sometimes it's useful to fill large areas with solid copper. The way +to do this is with polygons. Polygons can be created in either the +polygon mode or the rectangle mode. In the polygon mode, you'll have +to define each corner of the polygon with a mouse click (_Btn1_). When +the last point is clicked exactly on top of the starting point, the +polygon is finished. Since this can be hard to do, the _Shift-P_ key +will enter the final point for you, closing the polygon. If the 45 +degree angle restriction is turned on and you try to close the polygon +when it is not possible, you'll get a warning instead. If you haven't +finished entering a polygon, but want to undo one (or more) of the +points that you've already defined, use the undo command (_U_ key). + + With the rectangle tool, defining the two diagonally opposite +corners is sufficient, but of course the resulting polygon is a +rectangle. Like lines, a polygon can by edited by deleting, inserting +and moving the points that define it. Pins and vias _always_ clear +through polygons without touching them when first positioned. You must +add a thermal with the thermal tool in order to connect pins and vias +to polygons. Thermals can be added and removed by clicking _Btn1_ with +the thermal tool over the pin or via. The thermal tool always places a +thermal to polygons on the active layer, so if the tool doesn't seem to +work, it's probably because the polygon you want to touch is not on the +active layer. You can change the style of thermal used or make a solid +connection by holding down _Shift_ while clicking _Btn1_ with the +thermal tool over the pin or via. + + `Pcb' is capable of handling complex polygons, but using a number of +simpler ones improves performance of the connection tracing code. You +also must be careful not to create polygons that touch or overlap +themselves. The fabricated board may not look the way you expect if +you violate this principle. It is always ok to have two (or more) +polygons touch or overlap each other, but not for points within the +same polygon to do so. + + The great advantage to this new polygon behavior is that simple or +complex ground and/or power planes can be easily made with polygons and +seen on the screen. If you don't want this auto-clearance behavior, or +you load a layout created by an early version of `Pcb', the old behavior +(shorts to all piercing pins and vias) is available. A `ChangeSize' +operation (_S_ key) toggles a polygon between the new and old +polygon/pin behavior. + + +File: pcb.info, Node: Text Objects, Next: Net Objects, Prev: Polygon Objects, Up: Intro + +2.8 Text +======== + +Text objects should be used to label a layout or to put additional +information on the board. Elements have their `layout-name' labels on +the silk-screen layer. If you are making a board without a silkscreen, +you can use copper text to label the elements, but you have to do this +manually. + + Text is always horizontal when first created, but the rotate mode +can align it along 0, 90, 180 and 270 degree angles. Text on the far +side of the board will automatically appear mirror-imaged. + + _Warning:_ TEXT OBJECTS ON A COPPER LAYER CREATE COPPER LINES BUT +THEY ARE NOT SCANNED FOR CONNECTIONS OR TESTED FOR CREATING SHORTS VS. +THE NETLIST. NEITHER ARE TEXT OBJECTS TESTED AGAINST ANY DESIGN RULES. + + +File: pcb.info, Node: Net Objects, Prev: Text Objects, Up: Intro + +2.9 Nets +======== + +Layout files also contain the netlist that describes how the elements +are supposed to be interconnected. This list of connections can be +loaded from a netlist file (see *note Netlist File::), or entered by +drawing rat-lines as described previously. Each net has a name and +routing style associated with it. The net contains a list of all +element _layout-name_ names and pin _numbers_ that should be connected +to the net. Loading a netlist file will replace all existing nets with +the ones from the file. The _Netlist_ window provides an easy way to +browse through the net list. You can display the rat's-nest by selecting +`optimize rats-nest' from the Connects menu. If you move or rotate +elements, the rat's-nest will automatically follow the movements, but +they won't necessarily show the shortest paths until you optimize them +again. + + +File: pcb.info, Node: Getting Started, Next: Autorouter, Prev: Intro, Up: Top + +3 Getting Started +***************** + +The goal of this chapter is to give you enough information to learn how +`Pcb' works and how to develop your layouts to make the best use of +`Pcb''s features. All event translations (_i.e._ the buttons and keys +you press) refer to the default application resource file shipped with +`Pcb'. There is probably no need to change this unless your window +manager uses some of the button events itself; however, if you _want_ +to customize the behavior of `Pcb' then changing the resource file is +usually the best way to do it. + + Get yourself a printout of this chapter and _User Commands_, if you +haven't already done so, and follow the examples. + + Start `Pcb' (the actual command will use all lower-case letters) +without any additional options. If you get the error message: + + can't find default font-symbol-file 'default_font' + then the font searchpath or filename in the application resource +file is wrong. Be sure that your `m4' program supports search paths. +If not, get `GNU m4'. For other messages, see *note problems::. +Another quick-start is provided by `pcbtest.sh' in the `src' directory. +If some features don't seem to work, try running `pcbtest.sh', if that +works, then `Pcb' hasn't been installed properly. + +* Menu: + +* Application Window:: The elements of the main window. +* Log Window:: The optional logging window +* Library Window:: The circuit selection window +* Netlist Window:: The desired connections window +* Drawing and Removing:: +* Moving and Copying:: +* Loading and Saving:: +* Printing:: Creating Gerber files or postscript files +* Exporting:: Exporting a layout. +* Arrow Tool:: Selecting/Moving objects. +* Rats Nest:: Helps you place and route tracks against a netlist. +* Design Rule Checking:: Check for manufactureability +* Trace Optimizer:: Optimization of layouts +* Searching for elements:: Searching for elements +* Measuring distances:: Measuring distances +* Vendor drill mapping:: Mapping drills to a vendor specified list +* Connection Lists:: How to get a list of all or some connections. + + +File: pcb.info, Node: Application Window, Next: Log Window, Up: Getting Started + +3.1 The Application Window +========================== + +The main window consists of five areas: the menu at the top, the layer +control in the upper left, the tool buttons located below the layer +controls, the Layout area to the right of these, and the status line at +the bottom of the window. + +* Menu: + +* Menu:: +* Status-line and Input-field:: What is the program configuration. +* Layer Controls:: Switch layers on/off; change current one. +* Tool Selectors:: Select a layout tool. +* Layout Area:: Where the layout is drawn. + + +File: pcb.info, Node: Menu, Next: Status-line and Input-field, Up: Application Window + +3.1.1 Menus +----------- + +The menus are located at the top of the Layout area. Most, but not all, +of their functions are also available from the keyboard. Similarly, some +functions are only achievable through the keyboard or command entry. +Some menu entries such as `center layout' in the Screen menu require a +certain cross hair position. In this case a prompt message will popup +at the bottom of the screen with wording similar to the following: + move pointer to the appropriate screen position and press a button + Any mouse button will do the job, whereas any key except the arrow +(cursor) keys will cancel the operation. If it seems like the menu +hasn't done what you expected, check to see if it is waiting for the +position click. For details see *note Actions::. + + Pressing _Btn3_ in the Layout area also pops up a menu with many of +the most common operations (except when you're in the midst of drawing +a line or arc). When a choice in the _Btn3_ popup menu needs a cross +hair position, it uses the position where the cross hair was when +_Btn3_ was pressed. For example, to get detailed information on an +object, place the cross hair over the object, press _Btn3_, then choose +`object report'. If you pop up the _Btn3_ menu but don't want to take +any of the actions, click on one of the headers in the menu. + +File + This menu offers a choice of loading, saving and printing data, + saving connection information to a file or quitting the + application. Most of the entries in the File menu are self + explanatory. Selecting `print layout' pops up a printer control + dialog. A selection of several device drivers is available from + the printer control dialog. Presently _PostScript_, _encapsulated + PostScript_, and _GerberX_ are supported. The _GerberX_ driver + produces all of the files necessary to have the board + professionally manufactured. The connection saving features in + the File menu produce outputs in an arcane format that is not too + useful. They do _not_ produce netlist files. + +Edit + The Edit menu provides the usual cut, copy, paste which work on + selections. To learn how to create complex selections, see *note + Arrow Tool::. The Edit menu also provides access to Undo and Redo + of the last operation. These can also be accomplished with the _U_ + key and _Shift-R_ key. Finally, the Edit menu allows you to + change the names of: the layout, the active layer, or text objects + on the layout. + +Screen + The Screen menu supports most functions related to the whole + Layout area. There are various entries to change the grid to some + popular values, the zoom factor, and which kind of element name is + displayed. You can also re-align the grid origin and turn on and + off the display of the grid. Before changing the grid alignment, + I recommend that you zoom in as close as possible so that you're + sure the grid points appear exactly where you want them. + + The Screen menu also allows you to turn on and off the visibility + of the solder-mask layer. When the solder-mask layer is made + visible it obscures most of the layout, so only turn this on when + you really want to know what the solder-mask will look like. The + solder-mask that you see belongs to the side of the board you are + viewing, which can be changed with the `view solder side' option, + also found in the Screen menu. When the solder-mask is displayed, + the pin and pad clearance adjustments (*note Line Objects::) alter + the size of mask cut-outs. + +Sizes + The Sizes menu allows you to select a group of line thickness, via + diameter, via drill size, and clearance (keepaway) (collectively + called a "routing style") to be copied to the "active" sizes. You + can also change the names given to the routing styles and adjust + their values from this menu. The "active" sizes are also + adjustable from this menu. The "active" sizes are shown in the + status-line and control the initial size of new vias, drilling + holes, lines, clearances, text-objects and also the maximum + dimensions of the board layout. + +Settings + The Settings menu controls several operating configuration + parameters. The `edit layer groups' entry brings up a dialog that + allows you to change the way layers are grouped. Layer grouping is + described in *note Layer Objects::. The `all-direction lines' + entry controls the clipping of lines to 45-degree angles. You can + also control whether moving individual objects causes the attached + lines to "rubber band" with the move or not from the Settings + menu. Another entry controls whether the starting clip angle for + the two-line mode (*note Line Objects::) alternates every other + line. You can also control whether element names must be unique + from the Settings menu. When unique element names are enforced, + copying a new element will automatically create a unique + `layout-name' name for it provided that the name originally ended + with a digit (_e.g._ U7 or R6). The Settings menu allows you to + control whether the cross hair will snap to pins and pads even + when they are off-grid. Finally you can control whether new lines + and arcs touch or clear intersecting polygons from this menu. + +Select + This menu covers most of the operations that work with selected + objects. You may either (un)select all visible objects on a + layout or only the ones which have been found by the last + connection scan see . You can delete all selected objects from + this menu. Other entries in the Select menu change the sizes of + selected objects. Note that a select action only affects those + objects that are selected _and_ have their visibility turned on in + the Layer Control panel. The Select menu also provides a means for + selecting objects by name using unix *note Regular Expressions::. + +Buffer + From the Buffer menu you may select one out of five buffers to + use, rotate or clear its contents or save the buffer contents to a + file. You can also use the `break buffer element to pieces' entry + to de-compose an element into pieces for editing. Note: only + objects with visibility turned on are pasted to the layout. If you + have something in a buffer, then change which side of the board you + are viewing, the contents of the buffer will automatically be + mirrored for pasting on the side you are viewing. It is not + necessary to clear a buffer before cutting or copying something + into it - it will automatically be cleared first. + +Connects + The entries available through the Connects menu allow you to find + connections from objects and to manipulate these. You can also + optimize or erase rat's nests from this menu. Finally, the + `auto-route all rats' entry allows you to auto-route all + connections show by the rat's nest. The auto-router will use any + visible copper layer for routing, so turn off the visibility of any + layers you don't want it to use. The auto-router will automatically + understand and avoid any traces that are already on the board, but + it is not restricted to the grid. Finally, the auto-router routes + using the active sizes (except for nets that have a route-style + defined). `Pcb' always knows which tracks were routed by the + auto-router, and you can selectively remove them without fear of + changing tracks that you have manually routed with the `rip-up all + auto-routed tracks' entry in the Connects menu. The `design rule + checker' entry runs a check for copper areas that are too close + together, or connections that touch too tenuously for reliable + production. The DRC stops when the first problem is encountered so + after fixing a problem be sure to run it again until no problems + are found. + _Warning:_ COPPER TEXT IS IGNORED BY THE DRC CHECKER. + +Info + The `generate object report' entry from the Info menu provides a + way to get detailed information about an object, such as its + coordinates, dimensions, etc. You can also get a report + summarizing all of the drills used on the board with `generate + drill summary'. Lastly, you can get a list of all pins, pads and + vias that were found during a connection search. + +Window + The Window menu provides a way to bring each of `Pcb's' windows to + the front. The _Library_ window is used to bring elements from the + library into the paste-buffer. The _Message Log_ window holds the + various messages that `Pcb' sends to the user. The _Netlist_ + window shows the list of connections desired. + + + Now that you're familiar with the various menus, it's time to try +some things out. From the File menu choose `load layout', navigate to +the tutorial folder, then load the file `tut1.pcb'. + + +File: pcb.info, Node: Status-line and Input-field, Next: Layer Controls, Prev: Menu, Up: Application Window + +3.1.2 The Status-line and Input-field +------------------------------------- + +The status-line is located at the bottom edge of the main window. +During normal operation the status information is visible there. When +a selected menu operation requires an additional button click, the +status-line is replaced by a message telling you to position the cursor +and click. When a text input is required, the status-line is replaced +by the Input-field which has a prompt for typing the input. + + The status-line shows, from left to right, the side of the board +that you are viewing (_Tab_ key changes this), the current grid values, +if new lines are restricted to 45 degrees, which type of 45 degree line +mode is active, whether rubberband move and rotate mode is on (R), and +the zoom factor. This information is followed by the active +line-width, via-size and drilling hole, keepaway spacing, and text +scaling. Last is the active buffer number and the name of the layout. +An asterisk appearing at the far left indicates that the layout has +been modified since the last save. Note that the name of the layout is +not the same thing as the filename of the layout. Change the grid +factor to 1.0 mm from the Screen menu. Observe how the status line +shows the new grid setting. Except for the case of the metric grid, all +dimensions in the status line are in units of 0.001 inch (1 mil). + + The input-field pops up (temporarily replacing the status-line) +whenever user input is required. Two keys are bound to the input field: +the _Escape_ key aborts the input, _Return_ accepts it. Let's change +the name of a component on the board to see how the input-field works. +Position the cross hair over R5, and press the _N_ key. The input field +pops-up showing the name for you to edit. Go ahead and change the name, +then hit return. Notice the name of the element changed. Now undo the +change by pressing the _U_ key. You can position the cross hair over +the name, or the element before pressing the _N_ key. + + Now select `realign grid' from the Screen menu. Notice that the +status line has been replaced with an instruction to position the cursor +where you want a grid point to fall. In this case, since the cross hair +can only fall on a grid point, you must move the tip of the finger +cursor to the place where you want a grid point to appear. Do not worry +that the cross hair is not coincident with the cursor. Click _Btn1_ at +your chosen location. See how the grid has shifted, and the status line +has returned. + + The present cross hair position is displayed in the upper right +corner of the window. Normally this position is an absolute +coordinate, but you can anchor a marker at the cross hair location by +pressing _Ctrl-M_ (try it now) and then the display will read both the +absolute cross hair position as well as the difference between it and +the marker. The numbers enclosed in < > are the X and Y distances +between the cross hair and the mark, while the numbers enclosed in +parenthesis are the distance and angle from the mark to the cross hair. +The values displayed are always in units of 0.001 inch (1 mil). +Pressing _Ctrl-M_ again turns the marker off. + + +File: pcb.info, Node: Layer Controls, Next: Tool Selectors, Prev: Status-line and Input-field, Up: Application Window + +3.1.3 The Layer Controls +------------------------ + +The layer control panel, located in the upper left, is used to turn on +and off the display of layer groups and to select the active drawing +layer. If a layer hasn't been named, the label "_(unknown)_" is used +as the default. If this happens, it probably means the application +resources are not installed properly. + + The upper buttons are used to switch layers on and off. Click +__ on one or more of them. Each click toggles the setting. If +you turn off the currently active layer, another one that is visible +will become active. If there are no others visible, you will not be +able to turn off the active layer. When the layers are grouped, +clicking on these buttons will toggle the visibility of all layers in +the same group. This is a good idea because layers in the same group +reside on the same physical layer of the actual board. Notice that this +example has 2 groups each having 3 layers, plus two other layers named +`unused'. Use the `Edit layer groups' option in the `Settings' menu to +change the layer groupings in the lesstif GUI or the `Preferences' +dialog from the `File' menu in the GTK+ GUI. Note that changing the +groupings can radically alter the connectivity on the board. Grouping +layers is only useful for helping you to color-code signals in your +layout. Note that grouping layers actually reduces the number of +different physical layers available for your board, so to make an eight +layer board, you cannot group any layers. + + The _far side_ button turns on and off the visibility of elements +(including SMD pads) on the opposite (to the side you're viewing) board +side, as well as silk screening on that side. It does not hide the +x-ray view of the other copper layers, these must be turned off +separately if desired. Use the _tab_ key to view the entire board from +the other side. To see a view of what the back side of the board will +actually look like, make the solder layer the active layer then press +_tab_ until the status line says "solder" on the right, then turn off +the visibility of all layers except solder, pins/pads, vias, and silk. +Now turn them all back on. + + The lowest button, named _active_, is used to change the active +drawing layer. Pressing __ on it pops up a menu to select which +layer should be active. Each entry is labeled with the layer's name +and drawn in its color. The active layer is automatically made +visible. The active layer is always drawn on top of the other layers, +so the ordering of layers on the screen does not generally reflect the +ordering of the manufactured board. Only the solder, component, +silkscreen, and solder-mask layers are always drawn in their physical +order. Bringing the active layer to the top makes it easier to select +and change objects on the active layer. Try changing the active +layer's name to _ABC_ by selecting `edit name of active layer' from the +`Edit' menu. Changing the active layer can also be done by pressing +keys _1..MAX_LAYER_. + + Turn off the visibility of the component layer. Now make the +component layer the active layer. Notice that it automatically became +visible. Try setting a few other layers as the active layer. You should +also experiment with turning on and off each of the layers to see what +happens. + + The netlist layer is a special layer for adding connections to the +netlist by drawing rat lines. This is not the recommended way to add to +the netlist, but occasionally may be convenient. To learn how to use +the netlist layer see *note Net Objects::. + + +File: pcb.info, Node: Tool Selectors, Next: Layout Area, Prev: Layer Controls, Up: Application Window + +3.1.4 The Tool Selectors +------------------------ + +The tool selector buttons reside below the layer controls. They are +used to select which layout tool to use in the drawing area. Each tool +performs its function when _Btn1_ is pressed. Every tool gives the +cursor a unique shape that identifies it. The tool selector buttons +themselves are icons that illustrate their function. Each layout tool +can also be selected from the keyboard: + _F1_ key Via tool + _F2_ key Line tool + _F3_ key Arc tool + _F4_ key Text tool + _F5_ key Rectangle tool + _F6_ key Polygon tool + _F7_ key Buffer tool + _F8_ key Delete tool + _F9_ key Rotate tool + _Insert_ key Insert-point tool + _F10_ key Thermal tool + _F11_ key Arrow tool + _F12_ key Lock tool + + Some of the tools are very simple, such as the Via tool. Clicking +_Btn1_ with the Via tool creates a via at the cross hair position. The +via will have the diameter and drill sizes that are active, as shown in +the status line. The Buffer tool is similar. With it, __ copies +the contents of the active buffer to the layout, but only those parts +that reside on visible layers are copied. The Rotate tool allows you +to rotate elements, arcs, and text objects 90 degrees counter-clockwise +with each click. Holding the _Shift_ key down changes the Rotate tool +to clockwise operation. Anything including groups of objects can be +rotated inside a buffer using the rotate buffer menu option. + + The Line tool is explained in detail in *note Line Objects::. Go read +that section if you haven't already. Activate the Line tool. Set the +active layer to the solder layer. Try drawing some lines. Use the _U_ +key to undo some of the lines you just created. Zoom in a bit closer +with the _Z_ key. Draw some more lines. Be sure to draw some separate +lines by starting a new anchor point with _Ctrl-Btn1_. Change the +`crosshair snaps to pin/pads' behavior in the Settings menu. Now draw a +line. Notice that the new line points must now always be on a grid +point. It might not be able to reach some pins or pads with this +setting. Increase the active line thickness by pressing the _L_ key. +Note that the status line updates to reflect the new active line +thickness. Now draw another line. Before completing the next line, make +the component layer active by pressing the _4_ key. Now finish the +line. Notice that a via was automatically placed where you switched +layers. `Pcb' does not do any checks to make sure that the via could +safely be placed there. Neither does it interfere with your desire to +place lines haphazardly. It is up to you to place things properly when +doing manual routing with the Line tool. + + The Arc tool is explained in detail in *note Arc Objects::. Its use +is very similar to the Line tool. + + The Rectangle tool, Polygon tool and Thermal tool are explained in +detail in *note Polygon Objects::. Go read that section. Remember that +the Thermal tool will only create and destroy thermals to polygons on +the active layer. Use the Rectangle tool to make a small copper plane +on the component layer. Now place a via in the middle of the plane. +Notice that it does not touch the plane, and they are not electrically +connected. Use the Thermal tool to make the via connect to the plane. +Thermals allow the via or pin to be heated by a soldering iron without +having to heat the entire plane. If solid connections were made to the +plane, it could be nearly impossible to solder. Shift-click on the via +with the Thermal tool to change the style of thermal used or to make +the connection solid. Click on the via again with the Thermal tool to +remove the connection to the plane. + + The Insert-point tool is an editing tool that allows you to add +points into lines and polygons. The Insert-point tool enforces the 45 +degree line rule. You can force only the shorter line segment to 45 +degrees by holding the _Shift_ key down while inserting the point. Try +adding a point into one of the lines you created. Since line clipping +is turned on, you may need to move the cross hair quite far from the +point where you first clicked on the line. Turn off the line clipping +by selecting `all-direction lines' from the Settings menu (or hit the +_Period_ key). Now you can place an inserted point anywhere. Try +adding a point to the rectangle you made earlier. Start by clicking +somewhere along an edge of the rectangle, then move the pointer to a +new location and click again. + + The delete-mode deletes the object beneath the cursor with each +_Btn1_ click. If you click at an end-point that two lines have in +common, it will replace the two lines with a single line spanning the +two remaining points. This can be used to delete an "inserted" point +in a line, restoring the previous line. Now delete one of the original +corner points of the polygon you were just playing with. To do this, +place the cross hair over the corner and click on it with the Delete +tool. You could also use the _Backspace_ key if some other tool is +active. Try deleting some of the lines and intermediate points that you +created earlier. Use undo repeatedly to undo all the changes that +you've made. Use redo a few times to see what happens. Now add a new +line. Notice that you can no longer use redo since the layout has +changed since the last undo happened. The undo/redo tree is always +pruned in this way (_i.e._ it has a root, but no branches). + + The Arrow tool is so important, it has its own section: *note Arrow +Tool::. Go read it now. + + The Lock tool allows you to lock objects on the layout. When an +object is locked, it can't be selected, moved, rotated, or resized. +This is useful for very large objects like ground planes, or +board-outlines that are defined as an element. With such large objects, +nearly anywhere you click with the Arrow tool will be on the large +object, so it could be hard to draw box selections. If you lock an +object, the Arrow tool will behave as if it didn't exist. You cannot +unlock an object with undo. You must click on it again with the Lock +tool. If an object is locked, previous changes to it cannot be undone +either. When you lock an object, a report message about it is popped up +and will always tell you what object it is, and that it is locked if +you just locked it. Other than noticing your inability to manipulate +something, the only way to tell an object is locked is with a report +from the Info menu. Use the Lock tool sparingly. + + +File: pcb.info, Node: Layout Area, Prev: Tool Selectors, Up: Application Window + +3.1.5 Layout Area +----------------- + +The layout area is where you see the layout. The cursor shape depends +on the active tool when the pointer is moved into the layout area. A +cross hair follows the mouse pointer with respect to the grid setting. +Select a new grid from the _Screen_ menu. The new value is updated in +the status line. A different way to change the grid is _Shiftg_ +to decrease or _g_ to increase it, but this only works for English +(integer mil) grids. The grid setting is saved along with the data +when you save a pcb layout. For homemade layouts a value around 50 is +a good setting. The cursor can also be moved in the layout area with +the cursor (arrow) keys or, for larger distances, by pressing the +_Shift_ modifier together with a cursor key. + + +File: pcb.info, Node: Log Window, Next: Library Window, Prev: Application Window, Up: Getting Started + +3.2 Log Window +============== + +This optional window is used to display all kind of messages including +the ones written to _stderr_ by external commands. The main advantage +of using it is that its contents are saved in a scrolling list until the +program exits. Disabling this feature by setting the resource +_useLogWindow_ to _false_ will generate popup windows to display +messages. The _stderr_ of external commands will appear on `Pcb's +_stderr_ which normally is the parent shell. I suggest you iconify the +log window after startup for example by setting _*log.iconic_ to _true_ +in the resource file. If _raiseLogWindow_ is set _true_, the window +will deiconify and raise itself whenever new messages are to be +displayed. + + +File: pcb.info, Node: Library Window, Next: Netlist Window, Prev: Log Window, Up: Getting Started + +3.3 Library Window +================== + +The library window makes loading elements (or even partial layouts) +easy. Just click the appropriate library from the list on the left. A +list of its elements then appears on the right. Select an element from +the list by clicking on its description. Selecting an element from the +library will also automatically copy the element into the active +buffer, then invoke the _Buffer_ tool so you can paste it to the +layout. Elements in the old library should be taken with a grain of +salt (_i.e._ check them carefully before using). The old library names +all begin with ~ so you can easily distinguish between the old and new +libraries. All of the elements in the new library should be +thoroughly vetted, so you can use them with confidence. The new +libraries are stored simply as directories full of element files, so +making additions to the new library is easy since there is no need to +learn `m4'. For details on the old libraries, check-out *note Library +File:: and *note Library Contents File::. For details on the format of +an element file used for the new libraries, see *note Element File::. + + +File: pcb.info, Node: Netlist Window, Next: Drawing and Removing, Prev: Library Window, Up: Getting Started + +3.4 Netlist Window +================== + +The netlist window is very similar to the library window. On the left +is a list of all of the nets, on the right is the list of connections +belonging to the chosen net. The chosen net is highlighted in the list +and also shown on the second line of the window in red. If the net name +has a star to the left of it then it is "disabled". A disabled net is +treated as if it were not in the net list. This is useful, for example, +if you plan to use a ground plane and don't want the ground net showing +up in the rat's nest. You can enable/disable individual nets by +double-clicking the net name. If you want to enable or disable all nets +at once, there are two buttons at the top of the netlist window for +this purpose. + + The button labeled `Sel Net On Layout' can be used to select (on the +layout) everything that is connected (or is supposed to be connected) +to the net. If you click on a connection in the connection list, it +will select/deselect the corresponding pin or pad in the layout and +also center the layout window where it is located. If you "Find" +(`lookup connection to object' in the Connects menu [also _F_ key]), a +pin or pad it will also choose the net and connection in the netlist +window if it exists in the netlist. + + If no netlist exists for the layout, then the netlist window does not +appear. You can load a netlist from a file from the File menu. The +format for netlist files is described in *note Netlist File::. + + +File: pcb.info, Node: Drawing and Removing, Next: Moving and Copying, Prev: Netlist Window, Up: Getting Started + +3.5 Drawing and Removing Basic Objects +====================================== + +hace begging gutting here, and do a real-world tutorial example. + + There are several ways of creating new objects: you can draw them +yourself, you can copy an existing object (or selection), or you can +load an element from a file or from the Library window. Each type of +object has a particular tool for creating it. + + The active tool can be selected from the tool selectors in the bottom +left corner or by one of the function keys listed earlier in this +chapter. Each __ press with the tool tells the application to +create or change the appropriate object or at least take the first step +to do so. Each tools causes the cursor to take on a unique shape and +also causes the corresponding tool selector button to be highlighted. +You can use either cue to see which tool is active. + + Insert mode provides the capability of inserting new points into +existing polygons or lines. The 45 degree line clipping is now enforced +when selected. Press and hold the shift key while positioning the new +point to only clip the line segment to the nearer of the two existing +points to 45 degrees. You can also toggle the 45-degree clipping in +the middle of a point insertion by pressing the _._ If the shift +key is not depressed and the 45 degree line clipping mode is on, both +new line segments must be on 45 degree angles - greatly restricting +where the new point may be placed. In some cases this can cause +confusion as to whether an insertion has been started since the two new +lines may be forced to lie parallel on top of the original line until +the pointer is moved far from the end points. + + Removing objects, changing their size or moving them only applies to +objects that are visible when the command is executed. + +* Menu: + +* Common:: Keystrokes common to some objects. +* Lines:: +* Arcs:: +* Polygons:: Drawing polygons and rectangles. +* Text:: +* Vias:: +* Elements:: +* Pastebuffer:: A multi-purpose buffer. + + +File: pcb.info, Node: Common, Next: Lines, Up: Drawing and Removing + +3.5.1 Common Drawing and Removing Methods +----------------------------------------- + +There are several keystrokes and button events referring to an _object_ +without identifying its type. Here's a list of them: + + __ creates (or deletes) an object depending on the current +mode. + + _BackSpace_ or _Delete_ removes the visible object at the +cursor location. When more than one object exists at the location, the +order of removal is: via, line, text, polygon and element. The drawn +layer order also affects the search - whatever is top - most (except +elements) is affected before lower items. Basically all this means +that what is removed is probably just what you expect. If for some +reason it isn't, undo and try again. Only one object is removed for +each keystroke. If two or more of the same type match, the newest one +is removed. + + Use _s_ and _Shifts_ to change the size (width) of lines, +arcs, text objects, pins, pads and vias, or to toggle the style of +polygons (whether pins and vias automatically have clearances). + + _n_ changes the name of pins, pads, vias, the string of a text +object, or the currently displayed label of an element. + + _m_ moves the line, arc, or polygon under the cross hair to the +active layer if it wasn't on that layer already. + + _u_ (undo) recovers from an unlimited number of operations such +as creating, removing, moving, copying, selecting etc. It works like +you'd expect even if you're in the midst of creating something. + + _Shiftr_ restores the last undone operation provided no other +changes have been made since the undo was performed. + + _tab_ changes the board side you are viewing. + + For a complete list of keystrokes and button events see *note +Translations::. + + +File: pcb.info, Node: Lines, Next: Arcs, Prev: Common, Up: Drawing and Removing + +3.5.2 Lines +----------- + +To draw new lines you have to be in _line-mode_. Get there either by +selecting it from the _Tool palette_ or by pressing _F2_. Each +successive _notify_ event creates a new line. The adjustment to 45 +degree lines is done automatically if it is selected from the _Display_ +menu. You can toggle the 45 degree mode setting by pressing the +_._ (That is the period key). When 45 degree enforcement is turned +on there are three distinct modes of line creation: a single line on +the closest 45 degree vector towards the cross hair (but not necessarily +actually ending at the cross hair), two lines created such that the +first leaves the start point on a 90 degree vector and the second +arrives at the cross hair on a 45 degree vector, and finally two lines +created such that the first leaves the start point on a 45 degree +vector and the second arrives at the cross hair on a 90 degree vector. +These last two modes always connect all the way from the start and end +points, and all lines have angles in 45 degree multiples. The _/_ +cycles through the three modes. The status line shows a text icon to +indicate which of the modes is active and the lines following the cross +hair motion show the outline of the line(s) that will actually be +created. Press _Escape_ to leave line-mode. + + _l_, _Shiftl_ and the entries in the _Sizes_ menu change +the initial width of new lines. This width is also displayed in the +status line. + + +File: pcb.info, Node: Arcs, Next: Polygons, Prev: Lines, Up: Drawing and Removing + +3.5.3 Arcs +---------- + +An Arc is drawn with the _arc-tool_. Get there either by selecting it +from the _Tool palette_ or by pressing _F8_. Press _Btn1_ to +define the starting point for the arc. Drag the mouse towards the +desired end point along the path you want the arc to follow. The +outline of the arc that will be created is shown on the screen as you +move the mouse. Arcs are always forced to be 90 degrees and have +symmetrical length and width ( i.e. they are a quarter circle). The +next _Btn1_ click creates the arc. It will have the same width as new +lines (displayed in the status line) and appear on the active layer. +The arc leaves the starting point towards the cross hair along the axis +whose distance from the cross hair is largest. Normally this means that +if you drag along the path you want the arc to follow, you'll get what +you want. If the grid is set to the arc radius, then the two distances +will be equal and you won't be able to get all of the possible +directions. If this is thwarting your desires, reduce the grid spacing +(_!ShiftG_) and try again. + + +File: pcb.info, Node: Polygons, Next: Text, Prev: Arcs, Up: Drawing and Removing + +3.5.4 Polygons and Rectangles +----------------------------- + +A polygon is drawn by defining all of its segments as a series of +consecutive line segments. If the first point matches a new one and if +the number of points is greater than two, then the polygon is closed. +Since matching up with the first point may be difficult, you may use +_Shiftp_ to close the polygon. The _Shiftp_ won't work if +clipping to 45 degree lines is selected and the final segment cannot +match this condition. I suggest you create simple convex polygons in +order to avoid a strong negative impact on the performance of the +connection scanning routines. The _rectangle-mode_ is just an easy way +to generate rectangular polygons. _Polygon-mode_ also is selected by +_F6_ whereas _rectangle-mode_ uses _F4_. Pressing a __ +at two locations creates a rectangle by defining two of its corners. +_Insert_ brings you to _insert-point-mode_ which lets you add +additional points to an already existing polygon. Single points may be +removed by moving the cross hair to them and selecting one of the +delete actions _(remove-mode, BackSpace, or Delete_. This only works if +the remaining polygon will still have three or more corners. Pressing +_u_ or _p_ while entering a new polygon brings you back to +the previous corner. Removing a point does not force clipping to 45 +degree angles (because it's not generally possible). Newly created +polygons will not connect to pins or vias that pierce it unless you +create a thermal (using the thermal mode) to make the connection. If +the edge of a polygon gets too close to a pin or via that lies outside +of it, a warning will be issued and the pin will be given a special +color. Increasing the distance between them will remove the warning +color. + + +File: pcb.info, Node: Text, Next: Vias, Prev: Polygons, Up: Drawing and Removing + +3.5.5 Text +---------- + +Pressing _F5_ or clicking one of the text selector buttons changes +to _text-mode_. Each successive notify event (__) pops up the +input line at the bottom and queries for a string. Enter it and press +_Return_ to confirm or _Escape_ to abort. The text object is +created with its upper left corner at the current pointer location. +The initial scaling is changed by _t_ and _Shiftt_ or from +the _Sizes_ menu. + + Now switch to _rotate-mode_ and press __ at the text-objects +location. Text objects on the solder side of the layout are +automatically mirrored and flipped so that they are seen correctly when +viewing the solder-side. + + Use _n_ to edit the string. + + TEXT OBJECTS ON COPPER LAYERS CREATE COPPER LINES BUT THEY ARE NOT +SCANNED FOR CONNECTIONS. If they are moved to the silkscreen layer, they +no longer create copper. + + +File: pcb.info, Node: Vias, Next: Elements, Prev: Text, Up: Drawing and Removing + +3.5.6 Vias +---------- + +The initial size of new vias may be changed by _v_ and +_Shiftv_ or by selecting the appropriate entry from the _Sizes_ +menu. _Mod1v_ and _Mod1 Shiftv_ do the same for the drilling +hole of the via. The statusline is updated with the new values. +Creating a via is similar to the other objects. Switch to _via-mode_ by +using either the selector button or _F1_ then press _]_ or +__ to create one. _n_ changes the name of a via. If you +want to create a mounting hole for your board, then you can place a via +where you want the hole to be then convert the via into a hole. The +conversion is done by pressing _!Ctrlh_ with the cross hair over +the via. Conceptually it is still a via, but it has no copper annulus. +If you create such a hole in the middle of two polygons on different +layers, it will short the layers. Theoretically you could arrange for +such a hole not to be plated, but a metal screw inserted in the hole +would still risk shorting the layers. A good rule is to realize that +holes in the board really are vias between the layers and so place them +where they won't interfere with connectivity. You can convert a hole +back into a normal via with the same keystroke used to convert it in +the first place. + + +File: pcb.info, Node: Elements, Next: Pastebuffer, Prev: Vias, Up: Drawing and Removing + +3.5.7 Elements +-------------- + +Some of the functions related to elements only work if both the package +layer and the pin layer are switched on. + + Now that you're familiar with many of the basic commands, it is time +to put the first element on the layout. First of all, you have to load +data into the paste buffer. There are four ways to do this: + 1) load the data from a library + 2) load the data from a file + 3) copy data from an already existing element + 4) convert objects in the buffer into an element + We don't have any elements on the screen yet nor anything in the +buffer, so we use number one. + + Select _lsi_ from the menu in the library window press __ +twice at the appropriate text-line to get the MC68030 CPU. The data is +loaded and the mode is switched to _pastebuffer-mode_. Each notify +event now creates one of these beasts. Leave the mode by selecting a +different one or by _Escape_ which resets all modes.. The cross +hair is located at the _mark_ position as defined by the data file. +Rotating the buffer contents is done by selecting the _rotate_ entry of +the _Buffer_ menu or by pressing _ShiftF3_. The contents of the +buffer are valid until new data is loaded into it either by a +cut-to-buffer operation, copy-to-buffer operation or by loading a new +data file. There are 5 buffers available (possibly more or less if +changed at compile time with the `MAX_BUFFER' variable in +`globalconfig.h'). Switching between them is done by selecting a menu +entry or by _Shift1..MAX_BUFFER_. Each of the two board sides has +its own buffers. + + The release includes all data files for the circuits that are used +by the demo layout. The elements in the LED example are not found in +the library, but you can lift them from the example itself if you want. +If you have problems with the color of the cross hair, change the +resource _cross hairColor_ setting to a different one. + + Now load a second circuit, the MC68882 FPU for example. Create the +circuit as explained above. You now have two different unnamed +elements. Unnamed means that the layout-name of the element hasn't been +set yet. Selecting _description_ from the _Display_ menu displays the +description string of the two circuits which are CPU and FPU. The +values of the circuits are set to MC68030 and MC68882. Each of the +names of an element may be changed by _n_ at the elements location +and editing the old name in the bottom input line. Naming pins and vias +is similar to elements. You can hide the element name so that it won't +appear on the board silkscreen by pressing _h_ with the cursor +over the element. Doing so again un-hides the element name. + + Entering `:le' and selecting an element data file is the second way +to load circuits. + + The third way to create a new element is to copy an existing one. +Please refer to *note Moving and Copying::. + + The fourth way to create a new element is to convert a buffer's +contents into an element. Here's how it's done: Select the Via-tool +from the _Tool pallet_. Set the grid spacing to something appropriate +for the element pin spacing. Now create a series of vias where the pins +go. Create them in pin number order. It is often handy to place a +reference point (_!Ctrlm_) in the center of the first pin in order +to measure the location of the other pins. Next make a solder-side +layer the active layer from the _active-layer_ popup menu. Now draw +the outline of the element using lines and arcs. When you're done, +select everything that makes up the element with a box selection +(_ drag, _). Now select "cut selection to buffer" +from the _Buffer_ menu. Position the cursor over the center of pin 1 +and press the left button to load the data into the buffer. Finally +select "convert buffer to element" from the _Buffer_ menu. You'll only +want to create elements this way if they aren't already in the library. +It's also probably a good idea to do this before starting any of the +other aspects of a layout, but it isn't necessary. + + To display the pinout of a circuit move to it and press _Shiftd_ +or select _show pinout_ from the _Objects_ menu. A new window pops up +and displays the complete pinout of the element. This display can be +difficult to read if the component has been rotated 90 degrees :-( +therefore, the new window will show an un-rotated view so the pin names +are readable. _d_ displays the name of one or all pins/pads +inside the Layout area, this is only for display on-screen, it has no +effect on any printing of the layout. + + You also may want to change a pin's or pad's current size by pressing +_s_ to increase or _Shifts_ to decrease it. While this is +possible, it is not recommended since care was probably taken to define +the element structure in the first place. You can also change the +thickness of the element's silkscreen outline with the same keys. You +can change whether a pin or SMD pad is rounded or square with the +_q_. SMD pads should usually have squared ends. Finally, you can +change whether the non-square pins are round or octagonal with the +_!Ctrlo_. + + SMD elements and silkscreen objects are drawn in the "invisible +object" color if they are located on the opposite side of the board. + + For information on element connections refer to *note Connection +Lists::. + + +File: pcb.info, Node: Pastebuffer, Prev: Elements, Up: Drawing and Removing + +3.5.8 Pastebuffer +----------------- + +The line-stack and element-buffer of former releases have been replaced +by 5 (possibly more or less if changed at compile time with the +`MAX_BUFFER' variable in `globalconfig.h') multi-purpose buffers that +are selected by _Shift1..MAX_BUFFER_. The status line shows which +buffer is the active one. You may load data from a file or layout into +them. Cut-and-paste works too. If you followed the instructions +earlier in this chapter you should now have several objects on the +screen. Move the cross hair to one of them and press __ to +toggle its selection flag. (If you drag the mouse while the button is +down, a box selection will be attempted instead of toggling the +selection.) The object is redrawn in a different color. You also may +want to try moving the pointer while holding the third button down and +release it on a different location. This selects all objects inside the +rectangle and unselects everything else. If you want to add a box +selection to an existing selection, drag with _Mod1_ instead. +Dragging _Shift Mod1_ unselects objects in a box. Now change +to _pastebuffer-mode_ and select some operations from the _Buffer_ +menu. Copying objects to the buffer is available as _Mod1c_ while +cutting them uses _Mod1x_ as shortcut. Both clear the buffer +before new data is added. If you use the menu entries, you have to +supply a cross hair position by pressing a mouse button. The objects +are attached to the pastebuffer relative to that cross hair location. +Element data or PCB data may be merged into an existing layout by +loading the datafiles into the pastebuffer. Both operations are +available from the _File_ menu or as user commands. + + +File: pcb.info, Node: Moving and Copying, Next: Loading and Saving, Prev: Drawing and Removing, Up: Getting Started + +3.6 Moving and Copying +====================== + +All objects can be moved including element-names, by __, +dragging the pointer while holding the button down and releasing it at +the new location of the object. If you use _Mod1_ instead, +the object is copied. Copying does not work for element-names of +course. You can move all selected objects with _Shift _. This +uses the Pastebuffer, so it will remove whatever was previously in the +Pastebuffer. Please refer to *note Pastebuffer::. If you want to give +a small nudge to an object, but you don't think that the mouse will +give you the fine level of control that you want, you can position the +cursor over the object, press _[_, move it with the arrow keys, +then press _]_ when it's at the desired position. Remember that +all movements are forced onto grid coordinates, so you may want to +change the grid spacing first. + + To move a trace or group of traces to a different layer, first select +the tracks to be moved. It's easiest to do this if you shut off +everything but that layer first (i.e. silk, pins, other layers, etc). +Now set the current layer to be the new layer. Press Shift-M to move +all the selected tracks to the current layer. See the +_MoveToCurrentLayer_ action for more details. + + +File: pcb.info, Node: Loading and Saving, Next: Printing, Prev: Moving and Copying, Up: Getting Started + +3.7 Loading and Saving +====================== + +After your first experience with `Pcb' you will probably want to save +your work. `:s name' passes the data to an external program which is +responsible for saving it. For details see _saveCommand_ in *note +Resources::. Saving also is available from the _File_ menu, either +with or without supplying a filename. `Pcb' reuses the last filename if +you do not pass a new one to the save routine. + + To load an existing layout either select _load layout data_ from the +_File_ menu or use `:l filename'. A file select box pops up if you +don't specify a filename. Merging existing layouts into the new one is +supported either by the _File_ menu or by `:m filename'. + + `Pcb' saves a backup of the current layout at a user specified +interval. The backup filename is created by appending a dash, "-", to +the `.pcb' filename. For example, if you are editing the layout in +`projects/board.pcb' then the backup file name will be +`projects/board.pcb-'. If the layout is new and has not been saved +yet, then the backup file name is `PCB.####.backup' where the "####" +will be replaced by the process ID of the currenting running copy of +`Pcb'. This default backup file name may be changed at compilation +time via the `BACKUP_NAME' variable in `globalconfig.h'). During +critical sections of the program or when data would be lost it is saved +as `PCB.%i.save'. This file name may be changed at compile time with +the `SAVE_NAME' variable in `globalconfig.h'. + + +File: pcb.info, Node: Printing, Next: Exporting, Prev: Loading and Saving, Up: Getting Started + +3.8 Printing +============ + +`Pcb' now has support for device drivers, `PostScript', _encapsulated +PostScript_, and _Gerber RS-274X_ drivers are available so far. The +_Gerber RS-274X_ driver additionally generates a numerical control (NC) +drill file for automated drilling, a bill of materials file to assist +in materials procurement and inventory control, and a centroid (X-Y) +file which includes the centroid data needed by automatic assembly +(pick and place) machines. I recommend the use of `GhostScript' if you +don't have a `PostScript' printer for handling the PostScript output. +Printing always generates a complete set of files for a specified +driver. See the page about the _Print()_ action for additional +information about the filenames. The control panel offers a number of +options. Most of them are not available for Gerber output because it +wouldn't make sense, for example, to scale the gerber output (you'd +get an incorrectly made board!) The options are: + +`device' + The top menu button selects from the available device drivers. + +`rotate' + Rotate layout 90 degrees counter-clockwise before printing + (default). + +`mirror' + Mirror layout before printing. Use this option depending on your + production line. + +`color' + Created colored output. All colors will be converted to black if + this option is inactive. + +`outline' + Add a board outline to the output file. The size is determined by + the maximum board size changeable from the _sizes_ menu. The + outline appears on the top and bottom sides of the board, but not + on the internal layers. An outline can be useful for determining + where to shear the board from the panel, but be aware that it + creates a copper line. Thus it has the potential to cause short + circuits if you don't leave enough room from your wiring to the + board edge. Use a viewer to see what the output outline looks like + if you want to know what it looks like. + +`alignment' + Additional alignment targets are added to the output. The + distances between the board outline is set by the resource + _alignmentDistance_. Alignment targets should only be used if you + know for certain that YOU WILL BE USING THEM YOURSELF. It is + extremely unlikely that you will want to have alignment targets if + you send gerber files to a commercial pcb manufacture to be made. + +`scaling' + It's quite useful to enlarge your printout for checking the layout. + Use the scrollbar to adjust the scaling factor to your needs. + +`media' + Select the size of the output media from this menu. The user + defined size may be set by the resource _media_ either from one of + the well known paper sizes or by a `X11' geometry specification. + This entry is only available if you use `X11R5' or later. For + earlier releases the user defined size or, if not available, _A4_ + is used. Well known size are: + A3 + A4 + A5 + letter + tabloid + ledger + legal + executive + +`offset' + Adjust the offsets of the printout by using the panner at the + right side of the dialog box. This entry is only available if you + use `X11R5' or later. A zero offset is used for earlier releases. + +`8.3 filenames' + Select this button to generate DOS compatible filenames for the + output files. The _command_ input area will disappear if selected. + +`commandline' + Use this line to enter a command (starts with `|') or a filename. + A %f is replaced by the current filename. The default is set by + the resource _printCommand_. + + + The created file includes some labels which are guaranteed to stay +unchanged +`PCBMIN' + identifies the lowest x and y coordinates in mil. + +`PCBMAX' + identifies the highest x and y coordinates in mil. + +`PCBOFFSET' + is set to the x and y offset in mil. + +`PCBSCALE' + is a floating point value which identifies the scaling factor. + +`PCBSTARTDATA' +`PCBENDDATA' + all layout data is included between these two marks. You may use + them with an `awk' script to produce several printouts on one + piece of paper by duplicating the code and putting some + `translate' commands in front. Note, the normal `PostScript' + units are 1/72 inch. + + +File: pcb.info, Node: Exporting, Next: Arrow Tool, Prev: Printing, Up: Getting Started + +3.9 Exporting a layout +====================== + +To export a layout choose _Export layout_ from the _File_ menu, then +select the desired exporter. + +* Menu: + +* bom:: Bill of materials. +* gcode:: G-code. +* gerber:: Gerber. +* nelma:: Nelma. +* png:: Image. +* ps:: Postscript. +* eps:: Eps. + + +File: pcb.info, Node: bom, Next: gcode, Up: Exporting + +3.9.1 Bill of materials (bom) +----------------------------- + +Produces a bill of materials (BOM) file and a centroid (XY) file. + + +File: pcb.info, Node: gcode, Next: gerber, Prev: bom, Up: Exporting + +3.9.2 G-code (gcode) +-------------------- + +The gcode exporter can generate RS274/NGC G-CODE files to be used with +a CNC mill to produce pcb's by mechanically removing copper from the +perimeter of all elements. + + The elements are enlarged in order to compensate for the cutting +tool size so that the remaining copper corresponds to the original +size; however all polygons are left unchanged and will end up being a +little smaller; this is not a problem because the electrical connection +is done with traces, which are correctly enlarged. + + A .cnc file is generated for every copper layer, with the bottom +layer mirrored so that the milling is done right; of course it's not +possible to produce directly multi-layer (more than 2) pcb's with this +method, but the cnc files for intermediate layers are generated anyways. + + A drill file is also generated, and it contains all drills +regardless of the hole size; the drilling sequence is optimized in +order to require the least amount of movement. + + The export function generates an intermediate raster image before +extracting the contour of copper elements, and this image is saved as +well (in .png format) for inspection. + + When the spacing between two elements is less than the tool diameter +they will merge and no isolation will be cut between them; the control +image should be checked for this behaviour. + + Possible workarounds are: increasing spacing, decreasing the tool +size, increasing the intermediate image resolution. + + To maximize the chance of producing correct pcb's it would be better +to increase the DRC clearance to at least the tool diameter and use +traces as thick as possible; the rule is: use the largest element that +will not prevent the isolation cut. + + The exporter parameters are: + +basename + base name for generated files + +dpi + intermediate image resolution; affects precision when extracting + contours + +mill depth + should be the copper depth + +safe z + Z value when moving between polygons + +tool radius + copper elements are enlarged by this amount + +drill depth + depth of drills + +measurement unit + for all parameters above, can be mm,um,inch,mil; g-code is always + mm or inch + + All .cnc files specify Z values as parameters, so that it's easy to +change them without the need to run the exporter again. + + Operation was verified with the EMC2 g-code interpreter. + + Following is a sample layout that is converted with default settings: [image src="gcode.png" alt="Sample Layout"] + +The control image shows that the spacing is sufficient: [image src="gcode_control_img.png" alt="Control Image"] + +The final tool path follows the perimeter of all elements: [image src="gcode_tool_path.png" alt="Resulting Tool Path"] + + +File: pcb.info, Node: gerber, Next: nelma, Prev: gcode, Up: Exporting + +3.9.3 Gerber (gerber) +--------------------- + +Produces RS274-X (a.k.a. gerber) photo plot files and Excellon drill +files. + + +File: pcb.info, Node: nelma, Next: png, Prev: gerber, Up: Exporting + +3.9.4 Nelma (nelma) +------------------- + +Numerical analysis package export. + + +File: pcb.info, Node: png, Next: ps, Prev: nelma, Up: Exporting + +3.9.5 Image (png) +----------------- + +Produces GIF/JPEG/PNG image files. + + +File: pcb.info, Node: ps, Next: eps, Prev: png, Up: Exporting + +3.9.6 Postscript (ps) +--------------------- + +Export as postscript. Can be later converted to pdf. + + +File: pcb.info, Node: eps, Prev: ps, Up: Exporting + +3.9.7 Encapsulated Postscript (eps) +----------------------------------- + +Export as eps (encapsulated postscript) for inclusion in other +documents. Can be later converted to pdf. + + +File: pcb.info, Node: Connection Lists, Prev: Vendor drill mapping, Up: Getting Started + +3.10 Connection Lists +===================== + +After completing parts of your layout you may want to check if all drawn +connections match the ones you have in mind. This is probably best done +in conjunction with a net-list file: see *note Rats Nest::. The +following examples give more rudimentary ways to examine the +connections. + 1) create at least two elements and name them + 2) create some connections between their pins + 3) optionally add some vias and connections to them + + Now select _lookup connection_ from the _Connections_ menu, move the +cursor to a pin or via and press any mouse button. `Pcb' will look for +all other pins and/or vias connected to the one you have selected and +display the objects in a different color. Now try some of the reset +options available from the same menu. + + There also is a way to scan all connections of one element. Select +_a single element_ from the menu and press any button at the element's +location. All connections of this element will be saved to the +specified file. Either the layout name of the element or its canonical +name is used to identify pins depending on the one which is displayed +on the screen (may be changed by _Display_ menu). + + An automatic scan of all elements is initiated by choosing _all +elements_. It behaves in a similar fashion to scanning a single element +except the resource _resetAfterElement_ is used to determine if +connections should be reset before a new element is scanned. Doing so +will produce very long lists because the power lines are rescanned for +every element. By default the resource is set to _false_ for this +reason. + + To scan for unconnected pins select _unused pins_ from the same menu. + + +File: pcb.info, Node: Arrow Tool, Next: Rats Nest, Prev: Exporting, Up: Getting Started + +3.11 Arrow Tool +=============== + +Some commands mentioned earlier in this chapter also are able to +operate on all selected and visible objects. The Arrow tool is used to +select/deselect objects and also to move objects or selections. If you +click and release on an object with the Arrow tool, it will unselect +everything else and select the object. Selected objects change color to +reflect that they are selected. If you _Shift_ click, it will add the +object to (or remove) the object from the existing selection. If you +drag with the mouse button down with the Arrow tool, one of several +things could happen: if you first pressed the button on a selected +object, you will be moving the selection to where you release the +button. If you first pressed the button on an unselected object, you +will be moving that object. If you first pressed the button over empty +space, you will be drawing a box to select everything inside the box. +The _Shift_ key works the same way with box selections as it does with +single objects. + + Moving a single un-selected object is different from moving a +selection. First of all, you can move the end of line, or a point in a +polygon this way which is impossible by moving selections. Secondly, if +rubber banding is turned on, moving a single object will rubber-band +the attached lines. Finally, it is faster to move a single object this +way since there is no need to select it first. + + You can select any visible object unless it is locked. If you select +an object, then turn off its visibility with the Layer controls, it +won't be moved if you move the remaining visible selection. + + If you have not configured to use strokes in the `Pcb' user +interface, then the middle mouse button is automatically bound to the +arrow tool, regardless of the active tool (which is bound to the first +mouse button). So using the middle button any time is just like using +the first mouse button with the Arrow tool active. + + The entries of the _Selection_ menu are hopefully self-explanatory. +Many of the _Action Commands_ can take various key words that make them +function on all or some of the selected items. + + +File: pcb.info, Node: Rats Nest, Next: Design Rule Checking, Prev: Arrow Tool, Up: Getting Started + +3.12 Rats Nest +============== + +If you have a netlist that corresponds to the layout you are working +on, you can use the rats-nest feature to add rat-lines to the layout. +First you will need to load a netlist file (see _:rn_, *note User +Commands::). _w_ adds rat-lines on the active layer using the +current line thickness shown in the status line (usually you'll want +them to be thin lines). Only those rat-lines that fill in missing +connectivity (since you have probably routed some connections already) +are added. If the layout is already completely wired, nothing will be +added, and you will get a message that the wiring is complete. + + Rat-lines are lines having the special property that they only +connect to pins and pads at their end points. Rat-lines may be drawn +differently to other lines to make them easier to identify since they +have special behavior and cannot remain in a completed layout. +Rat-lines are added in the minimum length straight-line tree pattern +(always ending on pins or pads) that satisfies the missing connectivity +in the circuit. Used in connection with moves and rotates of the +elements, they are extremely useful for deciding where to place +elements on the board. The rat-lines will always automatically +rubberband to the elements whether or not the rubberband mode is on. +The only way for you to move them is by moving the parts they connect +to. This is because it is never desirable to have the rat-lines +disconnected from their element pins. Rat-lines will normally +criss-cross all over which gives rise to the name "rats nest" +describing a layout connected with them. If a SMD pad is unreachable +on the active layer, a warning will be issued about it and the rat-line +to that pad will not be generated. + + A common way to use rats nests is to place some elements on the +board, add the rat-lines, and then use a series of moves/rotates of the +elements until the rats nest appears to have minimum tangling. You may +want to iterate this step several times. Don't worry if the layout +looks messy - as long as you can get a sense for whether the +criss-crossing is better or worse as you move things, you're fine. +After moving some elements around, you may want to optimize the rats +nest _o_ so that the lines are drawn between the closest points +(this can change once you've moved components). Adding rat-lines only +to selected pads/pins (_Shiftw_) is often useful to layout a +circuit a little bit at a time. Sometimes you'll want to delete all +the rat-lines (_e_) or selected rat-lines (_Shifte_) in order +to reduce confusion. With a little practice you'll be able to achieve +a near optimal component placement with the use of a rats nest. + + Rat-lines are not only used for assisting your element placement, +they can also help you to route traces on the board. Use the _m_ +to convert a rat-line under the cursor into a normal line on the active +layer. Inserting a point into a rat-line will also cause the two new +lines to be normal lines on the board. Another way that you can use +rat-lines is to use the _f_ with the cursor over a pad or pin. +All of the pins and pads and rat-lines belonging to that net will be +highlighted. This is a helpful way to distinguish one net from the rest +of the rats nest. You can then route those tracks, turn off the +highlighting (_Shiftf_) and repeat the process. This will work even +if the layer that the rat-lines reside on is made invisible - so only +the pins and pads are highlighted. Be sure to erase the rat-lines +(_e_ erases them all) once you've duplicated their connectivity by +adding your own lines. When in doubt, the _o_ will delete only +those rat-lines that are no longer needed. + + If connections exist on the board that are not listed in the netlist +when _w_ is pressed, warning messages are issued and the affected +pins and pads are drawn in a special _warnColor_ until the next +_Notify()_ event. If the entire layout agrees completely with the +netlist, a message informs you that the layout is complete and no +rat-lines will be added (since none are needed). If the layout is +complete, but still has rat-lines then you will be warned that +rat-lines remain. If you get no message at all it's probably because +some elements listed in the net list can't be found and where reported +in an earlier message. There shouldn't be any rat-lines left in a +completed layout, only normal lines. + + The _Shiftw_ is used to add rat-lines to only those missing +connections among the selected pins and pads. This can be used to add +rat-lines in an incremental manner, or to force a rat-line to route +between two points that are not the closest points within the net. +Often it is best to add the rats nest in an incremental fashion, laying +out a sub-section of the board before going further. This is easy to +accomplish since new rat-lines are never added where routed +connectivity already makes the necessary connections. + + +File: pcb.info, Node: Design Rule Checking, Next: Trace Optimizer, Prev: Rats Nest, Up: Getting Started + +3.13 Design Rule Checking +========================= + +After you've finished laying out a board, you may want to check to be +certain that none of your interconnections are too closely spaced or +too tenuously touching to be reliably fabricated. The design rule +checking (DRC) function does this for you. Use the command ":DRC()" +(without the quotes of course) to invoke the checker. If there are no +problem areas, you'll get a message to that effect. If any problem is +encountered, you will get a message about it and the affected traces +will be highlighted. One part of the tracks of concern will be +selected, while the other parts of concern will have the +"FindConnection" highlighting. The screen will automatically be +centered in the middle of the object having the "FindConnection" +(Green) highlighting. The middle of the object is also the coordinates +reported to be "near" the problem. The actual trouble region will be +somewhere on the boundary of this object. If the two parts are from +different nets then there is some place where they approach each other +closer than the minimum rule. If the parts are from the same net, then +there is place where they are only barely connected. Find that place +and connect them better. + + After a DRC error is found and corrected you must run the DRC again +because the search for errors is halted as soon as the first problem is +found. Unless you've been extremely careless there should be no more +than a few design rule errors in your layout. The DRC checker does not +check for minimum spacing rules to copper text, so always be very +careful when adding copper text to a layout. The rules for the DRC are +specified in the application resource file. The minimum spacing value +(in mils) is given by the _Settings.Bloat_ value. The default is 7 +mils. The minimum touching overlap (in mils) is given by the +_Settings.Shrink_ value. This value defaults to 5 mils. Check with your +fabrication process people to determine the values that are right for +you. + + If you want to turn off the highlighting produced by the DRC, +perform an undo (assuming no other changes have been made). To restore +the highlighting, use redo. The redo will restore the highlighting +quickly without re-running the DRC checker. + + +File: pcb.info, Node: Trace Optimizer, Next: Searching for elements, Prev: Design Rule Checking, Up: Getting Started + +3.14 Trace Optimizer +==================== + +PCB includes a flexible trace optimizer. The trace optimizer can be run +after auto routing or hand routing to clean up the traces. + +Auto-Optimize + Performs debumpify, unjaggy, orthopull, vianudge, and viatrim, in + that order, repeating until no further optimizations are performed. + +Debumpify + Looks for U shaped traces that can be shortened or eliminated. + +Unjaggy + Looks for corners which could be flipped to eliminate one or more + corners (i.e. jaggy lines become simpler). + +Vianudge + Looks for vias where all traces leave in the same direction. Tries + to move via in that direction to eliminate one of the traces (and + thus a corner). + +Viatrim + Looks for traces that go from via to via, where moving that trace + to a different layer eliminates one or both vias. + +Orthopull + Looks for chains of traces all going in one direction, with more + traces orthogonal on one side than on the other. Moves the chain + in that direction, causing a net reduction in trace length, + possibly eliminating traces and/or corners. + +SimpleOpts + Removing unneeded vias, replacing two or more trace segments in a + row with a single segment. This is usually performed automatically + after other optimizations. + +Miter + Replaces 90 degree corners with a pair of 45 degree corners, to + reduce RF losses and trace length. + + + +File: pcb.info, Node: Searching for elements, Next: Measuring distances, Prev: Trace Optimizer, Up: Getting Started + +3.15 Searching for elements +=========================== + +To locate text or a specific element or grouping of similar elements +choose `Select by name' from the Select menu, then choose the +appropriate subsection. At the bottom of the screen the prompt +_pattern:_ appears. Enter the text or *note Regular Expressions:: of +the text to be found. Found text will be highlighted. + + +File: pcb.info, Node: Measuring distances, Next: Vendor drill mapping, Prev: Searching for elements, Up: Getting Started + +3.16 Measuring distances +======================== + +To measure distances, for example the pin-to-pin pitch of a part to +validate a footprint, place the cursor at the starting measurement +point, then press _!Ctrlm_. This marks the current location with +a _X_. The _X_ mark is now the zero point origin for the relative +cursor position display. The cursor display shows both absolute +position and position relative to the mark as the mouse is moved away +from the mark. If a mark is already present, the mark is removed and +the cursor display stops displaying relative cursor coordinates. + + +File: pcb.info, Node: Vendor drill mapping, Next: Connection Lists, Prev: Measuring distances, Up: Getting Started + +3.17 Vendor Drill Mapping +========================= + +`Pcb' includes support for mapping drill holes to a specified set of +sizes used by a particular vendor. Many PCB manufacturers have a +prefered set of drill sizes and charge extra when others are used. The +mapping can be performed on an existing design and can also be enabled +to automatically map drill holes as vias and elements are instantiated. + + The first step in using the vendor drill mapping feature is to create +a resource file describing the capabilities of your vendor. The file +format is the resource file format described in *note Resource Syntax::. +A complete example is given below. + + # Optional name of the vendor + vendor = "Vendor Name" + + # units for dimensions in this file. + # Allowed values: mil/inch/mm + units = mil + + # drill table + drillmap = { + # When mapping drill sizes, select the nearest size + # or always round up. Allowed values: up/nearest + round = up + + # The list of vendor drill sizes. Units are as specified + # above. + 20 + 28 + 35 + 38 + 42 + 52 + 59.5 + 86 + 125 + 152 + + # optional section for skipping mapping of certain elements + # based on reference designator, value, or description + # this is useful for critical parts where you may not + # want to change the drill size. Note that the strings + # are regular expressions. + skips = { + {refdes "^J3$"} # Skip J3. + {refdes "J3"} # Skip anything with J3 as part of the refdes. + {refdes "^U[1-3]$" "^X.*"} # Skip U1, U2, U3, and anything starting with X. + {value "^JOHNSTECH_.*"} # Skip all Johnstech footprints based on the value of a part. + {descr "^AMP_MICTOR_767054_1$"} # Skip based on the description. + } + } + + # If specified, this section will change the current DRC + # settings for the design. Units are as specified above. + drc = { + copper_space = 7 + copper_width = 7 + silk_width = 10 + copper_overlap = 4 + } + + The vendor resource is loaded using the _LoadVendor_ action. This +is invoked by entering: + :LoadVendor(vendorfile) + from within `Pcb'. Substitute the file name of your vendor resource +file for `vendorfile'. This action will load the vendor resource and +modify all the drill holes in the design as well as the default via +hole size for the various routing styles. + + Once a vendor drill map has been loaded, new vias and elements will +automatically have their drill hole sizes mapped to the vendor drill +table. Automatic drill mapping may be disabled under the "Settings" +menu. To re-apply an already loaded vendor drill table to a design, +choose "Apply vendor drill mapping" from the "Connects" menu. + + See *note Actions:: for a complete description of the actions +associated with vendor drill mapping. + + Note that the expressions used in the `skips' section are regular +expressions. See *note Regular Expressions:: for an introduction to +regular expressions. + + +File: pcb.info, Node: Autorouter, Next: User Commands, Prev: Getting Started, Up: Top + +4 Autorouter +************ + +`Pcb' includes an autorouter which can greatly speed up the layout of a +circuit board. The autorouter is a rectangle-expansion type of +autorouter based on "A Method for Gridless Routing of Printed Circuit +Boards" by A. C. Finch, K. J. Mackenzie, G. J. Balsdon, and G. Symonds +in the 1985 Proceedings of the 22nd ACM/IEEE Design Automation +Conference. This reference is available from the ACM Digital Library at +`http://www.acm.org/dl' for those with institutional or personal access +to it. It's also available from your local engineering library. The +reference paper is not needed for using the autorouter. + + Before using the autorouter, all elements need to be loaded into the +layout and placed and the connectivity netlist must be loaded. Once +the elements have been placed and the netlist loaded, the following +steps will autoroute your design. + + 1. Turn off visibility of any layers that you don't want the router + to use. + + 2. Turn of via visibility if you don't want the router to use any new + vias. + + 3. Use only plain rectangles for power/ground planes that you want + the router to use [use the rectangle tool!] + + 4. Make at least one connection from any plane you want the router to + use to the net you want it to connect to. + + 5. Draw continuous lines (on all routing layers) to outline keep-out + zones if desired. + + 6. Use routing styles in the netlist to have per-net routing styles. + Note that the routing style will be used for an entire net. This + means if you have a wide metal setting for a power net you will + need to manually route breakouts from any fine pitch parts on + their power pins because the router will not be able to change + to a narrow trace to connect to the part. + + 7. Set the current routing style to whatever you'd like the router to + use for any nets not having a defined route style in the netlist. + + 8. Disable any nets that you don't want the autorouter to route + (double-click them in the netlist window to add/remove the *) + + NOTE: If you will be manually routing these later not using + planes, it is usually better to let the autorouter route them then + rip them up yourself afterwards. If you plan to use a + ground/power plane manually, consider making it from one or + more pure rectangles and letting the autorouter have a go at it. + + 9. Create a fresh rat's nest. ('E' the 'W') + + 10. Select "show autorouter trials" in the settings menu if you want + to watch what's happening + + 11. Choose "autoroute all rats" in the connection menu. + + 12. If you really want to muck with the router because you have a + special design, e.g. all through-hole components you can mess with + layer directional costs by editing the autoroute.c source file + and changing the directional costs in lines 929-940. and try + again. Even more mucking about with costs is possible in lines + 4540-4569, but it's probably not such a good idea unless you + really just want to experiment. + + + After the design has been autorouted, you may want to run the trace +optimizer. See section *note Trace Optimizer:: for more information on +the trace optimizer. + + +File: pcb.info, Node: User Commands, Next: Command-Line Options, Prev: Autorouter, Up: Top + +5 User Commands +*************** + +The entering of user-commands is initiated by the action routine +_Command()_ (normally bound to the `(":")' character) which replaces +the bottom statusline with an input area or opens a separate command +window. It is finished by either _Return_ or _Escape_ to +confirm or to abort. These two key-bindings cannot be changed from the +resource file. The triggering event, normally a key press, is ignored. + + Commands can be entered in one of two styles, command entry syntax: +"_Command arg1 arg2_" or action script syntax "_Action1(arg1, arg2); +Action2(arg1, arg2);_". Quoting arguments works similar to bash +quoting: + + * A backslash (\) is the escape character. It preserves the literal + value of the next character that follows. To get a literal '\' use + "\\". + + * Enclosing characters in single quotes preserves the literal value + of each character within the quotes. A single quote may not occur + between single quotes, even when preceded by a blackslash. + + * Enclosing characters in double quotes preserves the literal value + of all characters within the quotes, with the exception of '\' + which maintains its special meaning as an escape character. + + There are simple _usage_ dialogs for each command and one for the +complete set of commands. + +`l [filename]' + Loads a new datafile (layout) and, if confirmed, overwrites any + existing unsaved data. The filename and the searchpath + (_filePath_) are passed to the command defined by _fileCommand_. + If no filename is specified a file select box will popup. + +`le [filename]' + Loads an element description into the paste buffer. The filename + and the searchpath (_elementPath_) are passed to the command + defined by _elementCommand_. If no filename is specified a file + select box will popup. + +`m [filename]' + Loads an layout file into the paste buffer. The filename and the + searchpath (_filePath_) are passed to the command defined by + _fileCommand_. If no filename is specified a file select box will + popup. + +`q[!]' + Quits the program without saving any data (after confirmation). + q! doesn't ask for confirmation, it just quits. + +`s [filename]' + Data and the filename are passed to the command defined by the + resource _saveCommand_. It must read the layout data from _stdin_. + If no filename is entered, either the last one is used again or, + if it is not available, a file select box will pop up. + +`rn [filename]' + Reads in a netlist file. If no filename is given a file select + box will pop up. The file is read via the command defined by the + _RatCommand_ resource. The command must send its output to + _stdout_. + + Netlists are used for generating rat's nests (see *note Rats + Nest::) and for verifying the board layout (which is also + accomplished by the _Ratsnest_ command). + +`w[q] [filename]' + These commands have been added for the convenience of `vi' users + and have the same functionality as _s_ combined with _q_. + +`actionCommand' + Causes the actionCommand to be executed. This allows you to + initiate actions for which no bindings exist in the resource file. + It can be used to initiate any action with whatever arguments you + enter. This makes it possible to do things that otherwise would + be extremely tedious. For example, to change the drilling hole + diameter of all vias in the layout to 32 mils, you could select + everything using the selection menu, then type + "_:ChangeDrillSize(SelectedVias, 32)_". (This will only work + provided the via's diameter is sufficiently large to accommodate a + 32 mil hole). Another example might be to set the grid to 1 mil + by typing "_:SetValue(Grid, 1)_". Note that some actions use the + current cursor location, so be sure to place the cursor where you + want before entering the command. This is one of my favorite new + features in 1.5 and can be a powerful tool. Study the *note + Actions:: section to see what actions are available. + + + +File: pcb.info, Node: Command-Line Options, Next: X11 Interface, Prev: User Commands, Up: Top + +6 Command-Line Options +********************** + +The synopsis of the pcb command is: + + `pcb [OPTION ...] [LAYOUT-FILE.pcb]' to start the application in GUI +mode, + +or + + `pcb [-h | -V | --copyright]' for a list of options, version, and +copyright, + +or + + `pcb -p [OPTION ...] [LAYOUT-FILE.pcb]' to print a layout, + +or + + `pcb -x HID [OPTION ...] [LAYOUT-FILE.pcb]' to export. + +Possible values for the parameter `HID' are: +`bom' + Export a bill of materials + +`gcode' + Export to G-Code + +`gerber' + Export RS-274X (Gerber) + +`nelma' + Numerical analysis package export + +`png' + export GIF/JPEG/PNG + +`ps' + export postscript + +`eps' + export encapsulated postscript + +There are several resources which may be set or reset in addition to the +standard toolkit command-line options. For a complete list refer to +*note Resources::. + +* Menu: + +* General Options:: +* General GUI Options:: +* GTK+ GUI Options:: +* lesstif GUI Options:: +* Colors:: +* Layer Names:: +* Paths:: +* Sizes:: +* Commands:: +* DRC Options:: +* BOM Creation:: +* Gerber Export:: +* Postscript Export:: +* Encapsulated Postscript Export:: +* PNG Options:: +* lpr Printing Options:: +* nelma Options:: + + +File: pcb.info, Node: General Options, Next: General GUI Options, Up: Command-Line Options + +6.1 General Options +=================== + +`--help' + Show help on command line options. + +`--version' + Show version. + +`--verbose' + Be verbose on stdout. + +`--copyright' + Show copyright. + +`--show-defaults' + Show option defaults. + +`--show-actions' + Show available actions and exit. + +`--dump-actions' + Dump actions (for documentation). + +`--grid-units-mm ' + Set default grid units. Can be mm or mil. Defaults to mil. + +`--backup-interval' + Time between automatic backups in seconds. Set to `0' to disable. + The default value is `60'. + +`--groups ' + Layer group string. Defaults to `"1,c:2:3:4:5:6,s:7:8"'. + +`--route-styles ' + A string that defines the route styles. Defaults to + `"Signal,1000,3600,2000,1000:Power,2500,6000,3500,1000 + :Fat,4000,6000,3500,1000:Skinny,600,2402,1181,600"' + +`--element-path ' + A colon separated list of directories or commands (starts with + '|'). The path is passed to the program specified in + `--element-command'. + +`--action-script ' + If set, this file is executed at startup. + +`--action-string ' + If set, this string of actions is executed at startup. + +`--fab-author ' + Name of author to be put in the Gerber files. + +`--layer-stack ' + Initial layer stackup, for setting up an export. A comma separated + list of layer names, layer numbers and layer groups. + +`--save-last-command' + If set, the last user command is saved. + +`--save-in-tmp' + If set, all data which would otherwise be lost are saved in a + temporary file `/tmp/PCB.%i.save' . Sequence `%i' is replaced by + the process ID. + +`--reset-after-element' + If set, all found connections are reset before a new component is + scanned. + +`--ring-bell-finished' + Execute the bell command when all rats are routed. + + +File: pcb.info, Node: General GUI Options, Next: GTK+ GUI Options, Prev: General Options, Up: Command-Line Options + +6.2 General GUI Options +======================= + +`--pinout-offset-x ' + Horizontal offset of the pin number display. Defaults to `100mil'. + +`--pinout-offset-y ' + Vertical offset of the pin number display. Defaults to `100mil'. + +`--pinout-text-offset-x ' + Horizontal offset of the pin name display. Defaults to `800mil'. + +`--pinout-text-offset-y ' + Vertical offset of the pin name display. Defaults to `-100mil'. + +`--draw-grid' + If set, draw the grid at start-up. + +`--clear-line' + If set, new lines clear polygons. + +`--full-poly' + If set, new polygons are full ones. + +`--unique-names' + If set, you will not be permitted to change the name of an + component to match that of another component. + +`--snap-pin' + If set, pin centers and pad end points are treated as additional + grid points that the cursor can snap to. + +`--all-direction-lines' + Allow all directions, when drawing new lines. + +`--show-number' + Pinout shows number. + + +File: pcb.info, Node: GTK+ GUI Options, Next: lesstif GUI Options, Prev: General GUI Options, Up: Command-Line Options + +6.3 GTK+ GUI Options +==================== + +`--listen' + Listen for actions on stdin. + +`--bg-image ' + File name of an image to put into the background of the GUI + canvas. The image must be a color PPM image, in binary (not ASCII) + format. It can be any size, and will be automatically scaled to + fit the canvas. + +`--pcb-menu ' + Location of the `gpcb-menu.res' file which defines the menu for + the GTK+ GUI. + + +File: pcb.info, Node: lesstif GUI Options, Next: Colors, Prev: GTK+ GUI Options, Up: Command-Line Options + +6.4 lesstif GUI Options +======================= + +`--listen' + Listen for actions on stdin. + +`--bg-image ' + File name of an image to put into the background of the GUI + canvas. The image must be a color PPM image, in binary (not ASCII) + format. It can be any size, and will be automatically scaled to + fit the canvas. + +`--pcb-menu ' + Location of the `pcb-menu.res' file which defines the menu for the + lesstif GUI. + + +File: pcb.info, Node: Colors, Next: Layer Names, Prev: lesstif GUI Options, Up: Command-Line Options + +6.5 Colors +========== + +`--black-color ' + Color value for black. Default: `#000000' + +`--black-color ' + Color value for white. Default: `#ffffff' + +`--background-color ' + Background color of the canvas. Default: `#e5e5e5' + +`--crosshair-color ' + Color of the crosshair. Default: `#ff0000' + +`--cross-color ' + Color of the cross. Default: `#cdcd00' + +`--via-color ' + Color of vias. Default: `#7f7f7f' + +`--via-selected-color ' + Color of selected vias. Default: `#00ffff' + +`--pin-color ' + Color of pins. Default: `#4d4d4d' + +`--pin-selected-color ' + Color of selected pins. Default: `#00ffff' + +`--pin-name-color ' + Color of pin names and pin numbers. Default: `#ff0000' + +`--element-color ' + Color of components. Default: `#000000' + +`--rat-color ' + Color of ratlines. Default: `#b8860b' + +`--invisible-objects-color ' + Color of invisible objects. Default: `#cccccc' + +`--invisible-mark-color ' + Color of invisible marks. Default: `#cccccc' + +`--element-selected-color ' + Color of selected components. Default: `#00ffff' + +`--rat-selected-color ' + Color of selected rats. Default: `#00ffff' + +`--connected-color ' + Color to indicate connections. Default: `#00ff00' + +`--off-limit-color ' + Color of off-canvas area. Default: `#cccccc' + +`--grid-color ' + Color of the grid. Default: `#ff0000' + +`--layer-color- ' + Color of layer `', where `' is an integer from 1 to 16. + +`--layer-selected-color- ' + Color of layer `', when selected. `' is an integer from 1 to + 16. + +`--warn-color ' + Color of offending objects during DRC. Default value is `"#ff8000"' + +`--mask-color ' + Color of the mask layer. Default value is `"#ff0000"' + + +File: pcb.info, Node: Layer Names, Next: Paths, Prev: Colors, Up: Command-Line Options + +6.6 Layer Names +=============== + +`--layer-name-1 ' + Name of the 1st Layer. Default is `"top"'. + +`--layer-name-2 ' + Name of the 2nd Layer. Default is `"ground"'. + +`--layer-name-3 ' + Name of the 3nd Layer. Default is `"signal2"'. + +`--layer-name-4 ' + Name of the 4rd Layer. Default is `"signal3"'. + +`--layer-name-5 ' + Name of the 5rd Layer. Default is `"power"'. + +`--layer-name-6 ' + Name of the 6rd Layer. Default is `"bottom"'. + +`--layer-name-7 ' + Name of the 7rd Layer. Default is `"outline"'. + +`--layer-name-8 ' + Name of the 8rd Layer. Default is `"spare"'. + + +File: pcb.info, Node: Paths, Next: Sizes, Prev: Layer Names, Up: Command-Line Options + +6.7 Paths +========= + +`--lib-newlib ' + Top level directory for the newlib style library. + +`--lib-name ' + The default filename for the library. + +`--default-font ' + The name of the default font. + +`--file-path ' + A colon separated list of directories or commands (starts with + '|'). The path is passed to the program specified in + `--file-command' together with the selected filename. + +`--font-path ' + A colon separated list of directories to search the default font. + Defaults to the default library path. + +`--lib-path ' + A colon separated list of directories that will be passed to the + commands specified by `--element-command' and + `--element-contents-command'. + + +File: pcb.info, Node: Sizes, Next: Commands, Prev: Paths, Up: Command-Line Options + +6.8 Sizes +========= + +All parameters should be given with an unit. If no unit is given, 1/100 +mil (cmil) will be used. Write units without space to the number like +`3mm', not `3 mm'. Valid Units are: +`km' + Kilometer + +`m' + Meter + +`cm' + Centimeter + +`mm' + Millimeter + +`um' + Micrometer + +`nm' + Nanometer + +`in' + Inch (1in = 0.0254m) + +`mil' + Mil (1000mil = 1in) + +`cmil' + Centimil (1/100 mil) + +`--via-thickness ' + Default diameter of vias. Default value is `60mil'. + +`--via-drilling-hole ' + Default diameter of holes. Default value is `28mil'. + +`--line-thickness ' + Default thickness of new lines. Default value is `10mil'. + +`--rat-thickness ' + Thickness of rats. Values from 1 to 19 are fixed width in screen + pixels. Anything larger means PCB units (i.e. 100 means "1 mil"). + Default value is `10mil'. + +`--keepaway ' + Default minimum distance between a track and adjacent copper. + Default value is `10mil'. + +`--default-PCB-width ' + Default width of the canvas. Default value is `6000mil'. + +`--default-PCB-height ' + Default height of the canvas. Default value is `5000mil'. + +`--text-scale ' + Default text scale. This value is in percent. Default value is + `100'. + +`--alignment-distance ' + Specifies the distance between the board outline and alignment + targets. Default value is `2mil'. + +`--grid ' + Initial grid size. Default value is `10mil'. + +`--minimum polygon area ' + Minimum polygon area. + + +File: pcb.info, Node: Commands, Next: DRC Options, Prev: Sizes, Up: Command-Line Options + +6.9 Commands +============ + +pcb uses external commands for input output operations. These commands +can be configured at start-up to meet local requirements. The command +string may include special sequences `%f', `%p' or `%a'. These are +replaced when the command is called. The sequence `%f' is replaced by +the file name, `%p' gets the path and `%a' indicates a package name. +`--font-command ' + Command to load a font. + +`--file-command ' + Command to read a file. + +`--element-command ' + Command to read a footprint. + Defaults to `"M4PATH='%p';export M4PATH;echo 'include(%f)' | m4"' + +`--print-file ' + Command to print to a file. + +`--lib-command-dir ' + Path to the command that queries the library. + +`--lib-command ' + Command to query the library. + Defaults to `"QueryLibrary.sh '%p' '%f' %a"' + +`--lib-contents-command ' + Command to query the contents of the library. + Defaults to `"ListLibraryContents.sh %p %f"' or, on Windows + builds, an empty string (to disable this feature). + +`--save-command ' + Command to save to a file. + +`--rat-command ' + Command for reading a netlist. Sequence `%f' is replaced by the + netlist filename. + + +File: pcb.info, Node: DRC Options, Next: BOM Creation, Prev: Commands, Up: Command-Line Options + +6.10 DRC Options +================ + +All parameters should be given with an unit. If no unit is given, 1/100 +mil (cmil) will be used for backward compability. Valid units are given +in section *note Sizes::. +`--bloat ' + Minimum spacing. Default value is `10mil'. + +`--shrink ' + Minimum touching overlap. Default value is `10mil'. + +`--min-width ' + Minimum width of copper. Default value is `10mil'. + +`--min-silk ' + Minimum width of lines in silk. Default value is `10mil'. + +`--min-drill ' + Minimum diameter of holes. Default value is `15mil'. + +`--min-ring ' + Minimum width of annular ring. Default value is `10mil'. + + +File: pcb.info, Node: BOM Creation, Next: Gerber Export, Prev: DRC Options, Up: Command-Line Options + +6.11 BOM Creation +================= + +`--bomfile ' + Name of the BOM output file. + +`--xyfile ' + Name of the XY output file. + +`--xy-unit ' + Unit of XY dimensions. Defaults to mil. + + +File: pcb.info, Node: Gerber Export, Next: Postscript Export, Prev: BOM Creation, Up: Command-Line Options + +6.12 Gerber Export +================== + +`--gerberfile ' + Gerber output file prefix. Can include a path. + +`--all-layers' + Output contains all layers, even empty ones. + +`--verbose' + Print file names and aperture counts on stdout. + + +File: pcb.info, Node: Postscript Export, Next: Encapsulated Postscript Export, Prev: Gerber Export, Up: Command-Line Options + +6.13 Postscript Export +====================== + +`--psfile ' + Name of the postscript output file. Can contain a path. + +`--drill-helper' + Print a centering target in large drill holes. + +`--align-marks' + Print alignment marks on each sheet. This is meant to ease + alignment during exposure. + +`--outline' + Print the contents of the outline layer on each sheet. + +`--mirror' + Print mirror image. + +`--fill-page' + Scale output to make the board fit the page. + +`--auto-mirror' + Print mirror image of appropriate layers. + +`--ps-color' + Postscript output in color. + +`--ps-bloat ' + Amount to add to trace/pad/pin edges. + +`--ps-invert' + Draw objects as white-on-black. + +`--media ' + Size of the media, the postscript is fitted to. The parameter + `' can be any of the standard names for paper size: + `A0' to `A10', `B0' to `B10', `Letter', `11x17', `Ledger', + `Legal', `Executive', `A-Size', `B-size', `C-Size', `D-size', + `E-size', `US-Business_Card', `Intl-Business_Card'. + +`--psfade ' + Fade amount for assembly drawings (0.0=missing, 1.0=solid). + +`--scale ' + Scale value to compensate for printer sizing errors (1.0 = full + scale). + +`--multi-file' + Produce multiple files, one per page, instead of a single multi + page file. + +`--xcalib ' + Paper width. Used for x-Axis calibration. + +`--ycalib ' + Paper height. Used for y-Axis calibration. + +`--drill-copper' + Draw drill holes in pins / vias, instead of leaving solid copper. + +`--show-legend' + Print file name and scale on printout. + + +File: pcb.info, Node: Encapsulated Postscript Export, Next: PNG Options, Prev: Postscript Export, Up: Command-Line Options + +6.14 Encapsulated Postscript Export +=================================== + +`--eps-file ' + Name of the encapsulated postscript output file. Can contain a + path. + +`--eps-scale ' + Scale EPS output by the parameter `num'. + +`--as-shown' + Export layers as shown on screen. + +`--monochrome' + Convert output to monochrome. + +`--only-visible' + Limit the bounds of the EPS file to the visible items. + + +File: pcb.info, Node: PNG Options, Next: lpr Printing Options, Prev: Encapsulated Postscript Export, Up: Command-Line Options + +6.15 PNG Options +================ + +`--outfile ' + Name of the file to be exported to. Can contain a path. + +`--dpi' + Scale factor in pixels/inch. Set to 0 to scale to size specified + in the layout. + +`--x-max' + Width of the png image in pixels. No constraint, when set to 0. + +`--y-max' + Height of the png output in pixels. No constraint, when set to 0. + +`--xy-max' + Maximum width and height of the PNG output in pixels. No + constraint, when set to 0. + +`--as-shown' + Export layers as shown on screen. + +`--monochrome' + Convert output to monochrome. + +`--only-vivible' + Limit the bounds of the exported PNG image to the visible items. + +`--use-alpha' + Make the background and any holes transparent. + +`--format ' + File format to be exported. Parameter `' can be `PNG', + `GIF', or `JPEG'. + +`--png-bloat ' + Amount of extra thickness to add to traces, pads, or pin edges. + The parameter `' is a number, appended by a dimension + `mm', `mil', or `pix'. If no dimension is given, the default + dimension is 1/100 mil. + +`--photo-mode' + Export a photo realistic image of the layout. + +`--photo-flip-x' + In photo-realistic mode, export the reverse side of the layout. + Left-right flip. + +`--photo-flip-y' + In photo-realistic mode, export the reverse side of the layout. + Up-down flip. + + +File: pcb.info, Node: lpr Printing Options, Next: nelma Options, Prev: PNG Options, Up: Command-Line Options + +6.16 lpr Printing Options +========================= + +`--lprcommand ' + Command to use for printing. Defaults to `lpr'. This can be used + to produce PDF output with a virtual PDF printer. Example: + `--lprcommand "lp -d CUPS-PDF-Printer"'. +In addition, all *note Postscript Export:: options are valid. + + +File: pcb.info, Node: nelma Options, Prev: lpr Printing Options, Up: Command-Line Options + +6.17 nelma Options +================== + +`-- basename ' + File name prefix. + +`--dpi ' + Horizontal scale factor (grid points/inch). + +`--copper-height ' + Copper layer height (um). + +`--substrate-height ' + Substrate layer height (um). + +`--substrate-epsilon ' + Substrate relative epsilon. + + +File: pcb.info, Node: X11 Interface, Next: File Formats, Prev: Command-Line Options, Up: Top + +7 X11 Interface +*************** + +This chapter gives an overview about the additional `X11' resources +which are defined by `Pcb' as well as the defined action routines. + +* Menu: + +* Resources:: Non-standard `X11' application resources. +* Actions:: A list of available action routines. +* Translations:: A list of the default key translations (as shipped). + + +File: pcb.info, Node: Resources, Next: Actions, Up: X11 Interface + +7.1 Non-Standard X11 Application Resources +========================================== + +In addition to the toolkit resources, `Pcb' defines the following +resources: + +`absoluteGrid (boolean)' + Selects if either the grid is relative to the position where it + has changed last or absolute, the default, to the origin (0,0). + +`alignmentDistance (dimension)' + Specifies the distance between the boards outline to the alignment + targets. + +`allDirectionLines (boolean)' + Enables (default) or disables clipping of new lines to 45 degree + angles. + +`backgroundImage (string)' + If specified, this image will be drawn as the background for the + board. The purpose of this option is to allow you to use a scan + of an existing layout as a prototype for your new layout. To do + this, there are some limitations as to what this image must be. + The image must be a PPM binary image (magic number `P6'). It must + have a maximum pixel value of 255 or less (i.e. no 16-bit images). + It must represent the entire board, as it will be scaled to fit + the board dimensions exactly. Note that it may be scaled unevenly + if the image doesn't have the same aspect ratio of your board. + You must ensure that the image does not use more colors than are + available on your system (mostly this is for pseudo-color + displays, like old 8-bit displays). For best results, I suggest + the following procedure using The Gimp: Load your image (any + type). Image->Scale if needed. Image->Colors->Curves and for + each of Red, Green, and Blue channel move the lower left point up + to about the 3/4 line (value 192). This will make your image pale + so it doesn't interfere with the traces you'll be adding. + Image->Mode->Indexed and select, say, 32 colors with Normal F-S + dithering. File->Save As, file type by extension, use `.ppm' as + the extension. Select Raw formatting. + +`backupInterval (int)' + `Pcb' has an automatic backup feature which saves the current data + every n seconds. The default is _300_ seconds. A value of zero + disables the feature. The backup file is named + `/tmp/PCB.%i.backup' by default (this may have been changed at + compilation time via the `BACKUP_NAME' variable in + `globalconfig.h'). _%i_ is replaced by the process ID. See also, + the command-line option _-backup-interval_. + +`Bloat (dimension)' + Specifies the minimum spacing design rule in mils. + +`connectedColor (color)' + All pins, vias, lines and rectangles which are selected during a + connection search are drawn with this color. The default value is + determined by _XtDefaultForeground_. + +`cross hairColor (color)' + This color is used to draw the cross hair cursor. The color is a + result of a _XOR_ operation with the contents of the Layout area. + The result also depends on the default colormap of the `X11' + server because only the colormap index is used in the boolean + operation and `Pcb' doesn't create its own colormap. The default + setting is _XtDefaultForeground_. + +`elementColor (color)' +`elementSelectedColor (color)' + The elements package part is drawn in these colors, for normal and + selected mode, respectively, which both default to + _XtDefaultForeground_. + +`elementCommand (string)' + `Pcb' uses a user defined command to read element files. This + resources is used to set the command which is executed by the + users default shell. Two escape sequences are defined to pass the + selected filename (%f) and the current search path (%p). The + command must write the element data to its standard output. The + default value is + M4PATH="%p";export M4PATH;echo 'include(%f)' | m4 + Using the GNU version of `m4' is highly recommended. See also, + the command-line option _-element-command_. + +`elementPath (string)' + A colon separated list of directories or commands (starts with + '|'). The path is passed to the program specified in + _elementCommand_ together with the selected element name. A + specified command will be executed in order to create entries for + the fileselect box. It must write its results to _stdout_ one + entry per line. See also, the user-command _le[!]_. + +`fileCommand (string)' + The command is executed by the user's default shell whenever + existing layout files are loaded. Data is read from the command's + standard output. Two escape sequences may be specified to pass + the selected filename (%f) and the current search path (%p). The + default value is: + cat %f + See also, the command-line option _-file-command_. + +`filePath (string)' + A colon separated list of directories or commands (starts with + '|'). The path is passed to the program specified in + _fileCommand_ together with the selected filename. A specified + command will be executed in order to create entries for the + fileselect box. It must write its results to _stdout_ one entry + per line. See also, the user-command _l[!]_. + +`fontCommand (string)' + Loading new symbol sets also is handled by an external command. + You again may pass the selected filename and the current search + path by passing %f and %p in the command string. Data is read from + the commands standard output. This command defaults to + cat %f + See also, the command-line option _-font-command_. + +`fontFile (string)' + The default font for new layouts is read from this file which is + searched in the directories as defined by the resource _fontPath_. + Searching is only performed if the filename does not contain a + directory component. The default filename is `default_font'. + +`fontPath (string)' + This resource, a colon separated list of directories, defines the + searchpath for font files. See also, the resource _fontFile_. + +`grid (int)' + This resources defines the initial value of one cursor step. It + defaults to _100 mil_ and any changes are saved together with the + layout data. + +`gridColor (color)' + This color is used to draw the grid. The color is a result of a + _INVERT_ operation with the contents of the Layout area. The result + also depends on the default colormap of the `X11' server because + only the colormap index is used in the boolean operation and `Pcb' + doesn't create its own colormap. The default setting is + _XtDefaultForeground_. + +`invisibleObjectsColor (color)' + Elements located on the opposite side of the board are drawn in + this color. The default is _XtDefaultForeground_. + +`layerColor1..MAX_LAYER (color)' +`layerSelectedColor1..MAX_LAYER (color)' + These resources define the drawing colors of the different layers + in normal and selected state. All values are preset to + _XtDefaultForeground_. + +`layerGroups (string)' + The argument to this resource is a colon separated list of comma + separated layer numbers (1..MAX_LAYER). All layers within one + group are switched on/off together. The default setting is + _1:2:3:...:MAX_LAYER_ which means all layers are handled + separately. Grouping layers one to three looks like + _1,2,3:4:...:MAX_LAYER_ + +`layerName1..MAX_LAYER (string)' + The default name of the layers in a new layout are determined by + these resources. The defaults are empty strings. + +`libraryCommand (string)' + `Pcb' uses a command to read element data from libraries. The + resources is used to set the command which is executed by the users + default shell. Three escape sequences are defined to pass the + selected filename (%f), the current search path (%p) as well (%a) + as the three parameters _template_, _value_ and _package_ to the + command. It must write the element data to its standard output. + The default value is + NONE/share/pcb/oldlib/QueryLibrary.sh %p %f %a + +`libraryContentsCommand (string)' + Similar to _libraryCommand_, `Pcb' uses the command specified by + this resource to list the contents of a library. + NONE/share/pcb/oldlib/ListLibraryContents.sh %p %f + is the default. + +`libraryFilename (string)' + The resource specifies the name of the library. The default value + is _pcblib_ unless changed at compile time with the + `LIBRARYFILENAME' variable in `globalconfig.h'. + +`libraryPath (string)' + A colon separated list of directories that will be passed to the + commands specified by _elementCommand_ and + _elementContentsCommand_. + +`lineThickness (dimension)' + The value, in the range [1..250] (the range may be changed at + compile time with the `MIN_LINESIZE' and `MAX_LINESIZE' variables + in `globalconfig.h'), defines the initial thickness of new lines. + The value is preset to _ten mil_. + +`media ( | x+-+-)' + The default (user defined) media of the `PostScript' device. + Predefined values are _a3_, _a4_, _a5_, _letter_, _tabloit_, + _ledger_, _legal_, and _executive_. The second way is to specify + the medias width, height and margins in mil. The resource + defaults to _a4_ size unless changed at compile time with the + `DEFAULT_MEDIASIZE' variable in `globalconfig.h'. + +`offLimitColor (color)' + The area outside the current maximum settings for width and height + is drawn with this color. The default value is determined by + _XtDefaultBackground_. + +`pinColor (color)' +`pinSelectedColor(color)' + This resource defines the drawing color of pins and pads in both + states. The values are preset to _XtDefaultForeground_. + +`pinoutFont (string)' + This fonts are used to display pin names. There is one font for + each zoom value. The values are preset to _XtdefaultFont_. + +`pinoutNameLength (int)' + This resource limits the number of characters which are displayed + for pin names in the pinout window. By default the string length + is limited to _eight_ characters per name. + +`pinoutOffsetX (int)' +`pinoutOffsetY (int)' + These resources determine the offset in _mil_ of the circuit from + the upper left corner of the window when displaying pinout + information. Both default to _100 mil_. + +`pinoutTextOffsetX (int)' +`pinoutTextOffsetY (int)' + The resources determine the distance in mil between the drilling + hole of a pin to the location where its name is displayed in the + pinout window. They default to _X:50_ and _Y:0_. + +`pinoutZoom (int)' + Sets the zoom factor for the pinout window according to the + formula: scale = 1:(2 power value). Its default value is _two_ + which results in a _1:4_ scale. + +`printCommand (string)' + Default file for printouts. If the name starts with a '|' the + output is piped through the command. A %f is replaced by the + current filename. There is no default file or command. + +`raiseLogWindow (boolean)' + The log window will be raised when new messages arrive if this + resource is set _true_, the default. + +`ratCommand (string)' + Default command for reading a netlist. A %f is replaced by the + netlist filename. Its default value is "_cat %f_". + +`ratPath (string)' + Default path to look for netlist files. It's default value is "." + +`resetAfterElement (boolean)' + If set to _true_, all found connections will be reset before a new + element is scanned. This will produce long lists when scanning the + whole layout for connections. The resource is set to _false_ by + default. The feature is only used while looking up connections of + all elements. + +`ringBellWhenFinished (boolean)' + Whether to ring the bell (the default) when a possibly lengthy + operation has finished or not. See also, the command-line option + _-ring-bell-finished_. + +`routeStyle (string)' + Default values for the menu of routing styles (seen in the sizes + menu). The string is a comma separated list of name, line + thickness, via diameter, and via drill size. e.g. + "Fat,50,100,40:Skinny,8,35,20:75Ohm,110,110,20" See also, the + command-line option _-route-styles_ and _Sizes Menu_ + +`rubberBandMode (boolean)' + Whether rubberband move and rotate (attached lines stretch like + rubberbands) is enabled (the default). + +`saveCommand (string)' + This command is used to save data to a layout file. The filename + may be indicated by placing `%f' in the string. It must read the + data from its standard input. The default command is: + cat - > %f + See also, the command-line option _-save-command_. + +`saveInTMP (boolean)' + Enabling this resource will save all data which would otherwise be + lost in a temporary file `/tmp/PCB.%i.save'. The file name may be + changed at compile time with the `EMERGENCY_NAME' variable in + `globalconfig.h'. . _%i_ is replaced by the process ID. As an + example, loading a new layout when the old one hasn't been saved + would use this resource. See also, the command-line option + _-save-in-tmp_. + +`saveLastCommand (boolean)' + Enables the saving of the last entered user command. The option is + _disabled_ by default. See also, the command-line option + _-save-last-command_. + +`Shrink (dimension)' + Specifies the minimum overlap (touching) design rule in mils. + +`size (x)' + Defines the width and height of a new layout. The default is + _7000x5000_ unless changed at compile time with the `DEFAULT_SIZE' + variable in `globalconfig.h'. + +`stipllePolygons (boolean)' + Determines whether to display polygons on the screen with a + stippled pattern. Stippling can create some amount of + transparency so that you can still (to some extent) see layers + beneath polygons. It defaults to False. + +`textScale (dimension)' + The font scaling in percent is defined by this resource. The + default is _100_ percent. + +`useLogWindow (boolean)' + Several subroutines send messages to the user if an error occurs. + This resource determines if they appear inside the log window or + as a separate dialog box. See also, the resource _raiseLogWindow_ + and the command line option _-loggeometry_. The default value is + _true_. + +`viaColor (color)' + +`viaSelectedColor (color)' + This resource defines the drawing color of vias in both states. + The values are preset to _XtDefaultForeground_. + +`viaThickness (dimension)' +`viaDrillingHole (dimension)' + The initial thickness and drilling hole of new vias. The values + must be in the range [30..400] (the range may be changed at compile + time with the `MIN_PINORVIASIZE' and `MAX_PINEORVIASIZE' variables + in `globalconfig.h'), with at least 20 mil of copper. The default + thickness is _40 mil_ and the default drilling hole is _20 mil_. + +`volume (int)' + The value is passed to `XBell()' which sets the volume of the `X' + speaker. The value lies in the range -100..100 and it defaults to + the maximum volume of _100_. + +`warnColor (color)' + This resources defines the color to be used for drawing pins and + pads when a warning has been issued about them. + +`zoom (int)' + The initial value for output scaling is set according to the + following formula: scale = 1:(2 power value). It defaults to + _three_ which results in an output scale of _1:8_. + + + Refer also to *note Command-Line Options::. + + +File: pcb.info, Node: Actions, Next: Translations, Prev: Resources, Up: X11 Interface + +7.2 Actions +=========== + +All user accessible commands may be bound to almost any `X' event. +Almost no default binding for commands is done in the binaries, so it +is vital for the application that at least a system-wide application +resource file exists. This file normally resides in the `share/pcb' +directory and is called `Pcb'. The bindings to which the manual refers +to are the ones as defined by the shipped resource file. Besides +binding an action to an X11 event, you can also execute any action +command using a ":" command (see *note User Commands::). + + Take special care about translations related to the functions keys +and the pointer buttons because most of the window managers use them +too. Change the file according to your hardware/software environment. +You may have to replace all occurances of _baseTranslations_ to +_translations_ if you use a `X11R4' server. + + Passing _Object_ as an argument to an action routine causes the +object at the cursor location to be changed, removed or whatever. If +more than one object is located at the cross hair position the smallest +type is used. If there are two of the same type the newer one is taken. +_SelectedObjects_ will handle all selected and visible objects. + +`AddRats(AllRats|SelectedRats)' + Adds rat-lines to the layout using the loaded netlist file (see + the _:rn_, *note User Commands::.). Rat lines are added on the + active layer using the current line thickness shown in the status + line. Only missing connectivity is added by the AddRats command + so if, for example, the layout is complete nothing will be added. + Rat lines may be drawn different to other lines on the screen to + make them easier to identify since they cannot appear in a + completed layout. The rat-lines are added in the minimum length + straight-line tree pattern (always ending on pins or pads) that + satisfies the missing connectivity in the circuit. If a SMD pad + is unreachable on the active layer, a warning will be issued about + it and the rat-line to that pad will not be generated. If + connections exist on the board which are not listed in the netlist + while AllRats are being added, warning messages will be issued and + the affected pins and pads will be drawn in a special _warnColor_ + until the next _Notify()_ event. If the entire layout agrees + completely with the net-list a message informs you that the layout + is complete and no rat-lines are added (since none are needed). + If _SelectedRats_ is passed as the argument, only those missing + connections that might connect among the selected pins and pads + are drawn. Default: + Nonew: AddRats(AllRats) + !Shiftw: AddRats(SelectedRats) + Noneo: DeleteRats(AllRats) AddRats(AllRats) + !Shifto: DeleteRats(SelectedRats) AddRats(SelectedRats) + +`ApplyVendor()' + Applies an already loaded vendor drill map to the design. + ApplyVendor() + +`Atomic(Save|Restore|Block|Close)' + Controls the undo grouping of sequences of actions. Before the + first action in a group, Atomic(Save) should be issued. After + each action that might be undoable, Atomic(Restore) should be + issued. Atomic(Block) concludes and save the undo grouping if + there was anything in the group to undo. Atomic(Close) concludes + and save the undo grouping even if nothing was actually done. + Thus it might produce an "empty" undo. This can be useful when + you want to use undo in a group of actions. + +`Bell([-100..100])' + Rings the bell of your display. If no value is passed the setting + of the resource _volume_ will be used. + +`ChangeClearSize(Object, value[, unit])' +`ChangeClearSize(SelectedPins|SelectedVias, value[, unit])' + The effect of this action depends on if the soldermask display is + presently turned on or off. If soldermask is displayed, then the + soldermask relief size will be changed. If soldermask display is + turned off, then the clearance to polygons will be changed. + _unit_ is "mil" or "mm". If not specified the units will default + to the internal unit of 0.01 mil. + !Mod1k: ChangeClearSize(Object, +2, mil) + !Mod1 Shiftk: ChangeClearSize(Object, -2, mil) + +`ChangeDrillSize(Object, value[, unit])' +`ChangeDrillSize(SelectedPins|SelectedVias, value[, unit])' + This action routine changes the drilling hole of pins and vias. + If _value_ starts with + or -, then it adds (or subtracts) _value_ + from the current hole diameter, otherwise it sets the diameter to + the value. _unit_ is "mil" or "mm". If not specified the units + will default to the internal unit of 0.01 mil. Default: + !Mod1s: Change2ndSize(Object, +5, mil) + !Mod1 Shifts: Change2ndSize(Object, -5, mil) + +`ChangeFlag(Object|SelectElements|SelectedPins|SelectedVias|Selected,thermal|octagon|square,0|1)' + Sets/clears the indicated flag. This adds/removes thermals, + adds/removes the flag which indicates a pin/pad should be square, + or adds/removes the flag which indicates a pin/pad should be + octagonal. + :ChangeFlag(SelectedVias,thermal,1) + :ChangeFlag(SelectedPads,square,0) + +`ChangeHole(Object|SelectedVias)' + This action routine converts a via to and from a hole. A hole is + a via that has no copper annulus. The drill size for the via + determines the hole diameter. + !Ctrlh: ChangeHole(Object) + +`ChangeName(Object)' +`ChangeName(Layer|Layout)' + Changes the name of the visible object at the cursor location. A + text object doesn't have a name therefore the text string itself + is changed. The element name currently used for display is always + the one changed with this command. See + _Display(Description|NameOnPCB|Value)_ for details. Passing + _Layer_ changes the current layers name. Default: + Nonen: ChangeName(Object) + +`ChangeOctagon(Object|SelectElements|SelectedPins|SelectedVias|Selected)' + Toggles what shape the affected pin(s) or via(s) will be drawn + when they are not square. The shape will either be round or + octagonal. Default: + !Ctrlo: ChangeOctagon(Object) + +`ChangePinName(ElementName, PinNumber, PinName)' + Changes the name for a specified pin or pad number on a specified + element. This action is typically used to forward annotate + pin/pad names from a schematic to the layout. + ChangePinName(U1, 14, VDD) + +`ChangeSize(Object, value[, unit])' +`ChangeSize(SelectedLines|SelectedPins|SelectedVias, value[, unit])' +`ChangeSize(SelectedPads|SelectedTexts|SelectedNames, value[, unit])' +`ChangeSize(SelectedElements, value[, unit])' + To change the size of an object you have to bind these action to + some `X' event (or use :ChangeSize(...)). If _value_ begins with + a + or - then the value will be added (or subtracted) from the + current size, otherwise the size is set equal to _value_. Range + checking is done to insure that none of the maximum/minimums of + any size are violated. If _Object_ is passed then a single object + at the cursor location is changed. If any of the _Selected_ + arguments are passed then all selected and visible objects of that + type are changed. If the type being modified is an element, then + the thickness of the silkscreen lines defining the element is + changed. _unit_ is "mil" or "mm". If not specified the units + will default to the internal unit of 0.01 mil. Default: + Nones: ChangeSize(Object, +5) + !Shifts: ChangeSize(Object, -5) + +`ChangeSquare(Object|SelectedElements|SelectedPins)' + Toggles the setting of the square flag. The flag is used to + identify a certain pin, normally the first one, of circuits. It is + also used to make SMD pads have square ends. + Noneq: ChangeSquare(Object) + +`ClrFlag(Object|SelectElements|SelectedPins|SelectedVias|Selected,thermal|octagon|square)' + Clears the indicated flag. This removes thermals, removes the flag + which indicates a pin/pad should be square, or removes the flag + which indicates a pin/pad should be octagonal. + :ClrFlag(SelectedVias,thermal) + +`Command()' + Calling _Command()_ pops up an input line at the bottom of the + window which allows you to enter commands. Including all action + commands! The dialog ends when _NoneReturn_ to confirm or + _NoneEscape_ to abort is entered. Default: + colon: Command() + +`Connection(Find)' +`Connection(ResetFoundLinesAndRectangles|ResetPinsViasAndPads|Reset)' + The _Connection()_ action is used to mark all connections from one + pin, line or via to others. The _ResetFoundLinesAndRectangles, + ResetFoundPinsAndVias_ and _Reset_ arguments may be used to reset + all marked lines and rectangles, vias and pins or all of them. The + search starts with the pin or via at the cursor position. All + found objects are drawn with the color defined by the resource + _connectedColor_. See also, + _Display(Description|NameOnPCB|Value)_. Default: + !Shiftc: Connection(Reset) + Nonef: Connection(Find) + !Shiftf: Connection(Reset) + +`DeleteRats(AllRats|SelectedRats)' + This routine deletes either all rat-lines in the layout, or only + the selected and visible ones. Non-rat-lines and other layout + objects are unaffected. Default: + Nonee: DeleteRats(AllRats) + !Shifte: DeleteRats(SelectedRats) + +`DisableVendor()' + Disables automatic drill size mapping to the loaded vendor drill + table. + DisableVendor() + +`DisperseElements(All|Selected)' + Disperses either all elements or only the selected elements in the + layout. This action should be used at the start of a design to + spread out all footprints before any placement or routing is done. + DisperseElements(All) + +`Display(Description|NameOnPCB|Value)' +`Display(Toggle45Degree|CycleClip)' +`Display(Grid|ToggleGrid)' +`Display(ToggleRubberBandMode)' +`Display(Center|ClearAndRedraw|Redraw)' +`Display(Pinout|PinOrPadName)' + This action routines handles some output related settings. It is + used to center the display around the cursor location and to + redraw the output area optionally after clearing the window. + Centering is done with respect to the _grid_ setting. Displaying + the grid itself may be switched on and off by _Grid_ but only if + the distance between two pixels exceeds 4 pixels. `Pcb' is able + to handle several labels of an element. One of them is a + description of the functionality (eg resistor), the second should + be a unique identifier (R1) whereas the last one is a value (100k). + The _Display()_ action selects which of the names is displayed. + It also controls which name will be affected by the _ChangeName_ + command. If _ToggleGrid_ is passed, `Pcb' changes between relative + ('rel' in the statusline) and absolute grid (an 'abs' in the + statusline). Relative grid means the pointer position when the + command is issued is used as the grid origin; while (0,0) is used + in the absolute grid case. Passing _Pinout_ displays the pinout + of the element at the current cursor location whereas + _PinOrPadName_ toggles displaying of the pins or pads name under + the cursor. If none of them matches but the cursor is inside of an + element, the flags is toggled for all of its pins and pads. For + details about rubberbands see also the details about _Mode_. + Default: + Nonec: Display(Center) + Noned: Display(PinOrPadName) + !Shiftd: Display(Pinout) + Noner: Display(ClearAndRedraw) + None.: Display(Toggle45Degree) + None/: Display(CycleClip) + +`DRC()' + Initiates design rule checking of the entire layout. Must be + repeated until no errors are found. + +`ExecuteFile(filename)' + Executes the PCB actions contained in the specified file. This + can be used to automate a complex sequence of operations. + :ExecuteFile(custom.cmd) + The command file contains a list of PCB actions. Blank lines are + ignored and lines starting with a # are treated as comment lines. + For example + # This is a comment line + Display(Grid) + SetValue(Zoom,2) + DRC() + +`EditLayerGroups()' + Pops up a dialog box to edit the layergroup setting. The function + is also available from the _Objects_ menu. There are no defaults. + +`EnableVendor()' + Enables automatic drill size mapping to the loaded vendor drill + table. + EnableVendor() + +`Load(ElementToBuffer|Layout|LayoutToBuffer|Nelist)' + This routine pops up a fileselect box to load layout, element data, + or netlist. The passed filename for layout data is saved and may + be reused. _ElementToBuffer_ and _LayoutToBuffer_ load the data + into the current buffer. There are no defaults. + +`LoadVendor(vendorfile)' + Loads the specified vendor resource file. + LoadVendor(myvendor.res) + +`MarkCrosshair()' + This routine marks the current cursor location with an X, and then + the cursor display shows both absolute position and position + relative to the mark. If a mark is already present, this routine + removes it and stops displaying relative cursor coordinates. + Defaults: + !Ctrlm: MarkCrosshair() + +`Mode(Copy|InsertPoint|Line|Move|None|PasteBuffer|Polygon|Thermal)' +`Mode(Remove|Rectangle|RubberbandMove|Text|Via)' +`Mode(Cycle)' +`Mode(Notify)' +`Mode(Save|Restore)' + Switches to a new mode of operation. The active mode is displayed + by a thick line around the matching mode selector button. Most of + the functionality of `Pcb' is implemented by selecting a mode and + calling _Mode(Notify)_. The arguments _Line_, _Polygon_, + _Rectangle_, _Text_ and _Via_ are used to create the appropriate + object whenever _Mode(Notify)_ is called. Some of them, such as + _Polygon_, need more than one call for one object to be created. + _InsertPoint_ adds points to existing polygons or lines. _Save_ + and _Restore_ are used to temporarily save the mode, switch to + another one, call _Mode(Notify)_ and restore the saved one. Have a + look at the application resource file for examples. _Copy_ and + _Move_ modes are used to change an object's location and, + optionally, to create a new one. The first call of _Mode(Notify)_ + attaches the object at the pointer location to the cross hair + whereas the second one drops it to the layout. The _rubberband_ + version of move performs the move while overriding the current + rubberband mode. Passing _PasteBuffer_ attaches the contents of + the currently selected buffer to the cross hair. Each call to + _Mode(Notify)_ pastes this contents to the layout. _Mode(Cycle)_ + cycles through the modes available in the mode-button pallet. + _Mode(None)_ switches all modes off. Default: + Escape: Mode(None) + space: Mode(Cycle) + NoneBackSpace: Mode(Save) Mode(Remove) Mode(Notify) Mode(Restore) + NoneDelete: Mode(Save) Mode(Remove) Mode(Notify) Mode(Restore) + NoneF1: Mode(Via) + NoneF2: Mode(Line) + NoneF3: Mode(PasteBuffer) + NoneF4: Mode(Rectangle) + NoneF5: Mode(Text) + NoneF6: Mode(Polygon) + NoneF7: Mode(Thermal) + NoneF8: Mode(Arc) + NoneInsert: Mode(InsertPoint) + None[: Mode(Save) Mode(Move) Mode(Notify) + None]: Mode(Notify) Mode(Restore) + None: Mode(Notify) + !Shift Ctrl: Mode(Save) Mode(Remove) Mode(Notify) Mode(Restore) + None: Mode(Save) Mode(Move) Mode(Notify) + None: Mode(Notify) Mode(Restore) + !Mod1: Mode(Save) Mode(Copy) Mode(Notify) + !Mod1: Mode(Notify) Mode(Restore) + Shift BTNMOD: Mode(Save) Mode(RubberbandMove) Mode(Notify) + +`MovePointer(delta_x, delta_y)' + With this function it is possible to move the cross hair cursor by + using the cursor keys. The `X' server's pointer follows because + the necessary events are generated by `Pcb'. All movements are + performed with respect to the currently set grid value. Default: + NoneUp: MovePointer(0, -1) + !ShiftUp: MovePointer(0, -10) + NoneDown: MovePointer(0, 1) + !ShiftDown: MovePointer(0, 10) + NoneRight: MovePointer(1, 0) + !ShiftRight: MovePointer(10, 0) + NoneLeft: MovePointer(-1, 0) + !ShiftLeft: MovePointer(-10, 0) + +`MoveToCurrentLayer(Object|SelectedObjects)' + The function moves a single object at the cross hair location or + all selected objects to the current layer. Elements are not + movable by this function. They have to be deleted and replaced on + the other side. If a line segment is moved and the movement would + result in a loss of connectivity to another segment then via(s) + are automatically added to maintain the connectivity. + Nonem: MoveToCurrentLayer(Object) + !Shiftm: MoveToCurrentLayer(SelectedObjects) + +`New()' + Clear the current layout and starts a new one after entering its + name. Refer to the resource _backup_ for more information. No + defaults. + +`PasteBuffer(AddSelected|Clear|1..5)' +`PasteBuffer(Rotate, 1..3)' +`PasteBuffer(Convert)' + This action routine controls and selects the pastebuffer as well + as all cut-and-paste operations. Passing a buffer number selects + one in of the range 1..5. The statusline is updated with the new + number. _Rotate_ performs a number of 90 degree counter clockwise + rotations of the buffer contents. _AddSelected_ as first argument + copies all selected and visible objects into the buffer. Passing + _Clear_ removes all objects from the currently selected buffer. + _Convert_ causes the contents of the buffer (lines, arc, vias) to + be converted into an element definition. Refer to *note + Pastebuffer:: for examples. Default: + !Ctrlx: PasteBuffer(Clear) PasteBuffer(AddSelected) + Mode(PasteBuffer) + !Shift Ctrlx: PasteBuffer(Clear) PasteBuffer(AddSelected) + RemoveSelected() Mode(PasteBuffer) + !Mod1c: PasteBuffer(Clear) PasteBuffer(AddSelected) + !Mod1x: PasteBuffer(Clear) PasteBuffer(AddSelected) + RemoveSelected() + !Shift1: PasteBuffer(1) + !Shift2: PasteBuffer(2) + !Shift3: PasteBuffer(3) + !Shift4: PasteBuffer(4) + !Shift5: PasteBuffer(5) + NoneF3: Mode(PasteBuffer) + +`Polygon((Close|PreviousPoint)' + Polygons need a special action routine to make life easier. Calling + _Polygon(PreviousPoint)_ resets the newly entered corner to the + previous one. The Undo action will call Polygon(PreviousPoint) + when appropriate to do so. _Close_ creates the final segment of + the polygon. This may fail if clipping to 45 degree lines is + switched on, in which case a warning is issued. Default: + Nonep: Polygon(Close) + !Shiftp: Polygon(Close) + +`Print()' + Pops up a print control box that lets you select the output + device, scaling and many more options. Each run creates all files + that are supported by the selected device. These are mask files as + well as drilling files, silk screens and so on. The table shows + the filenames for all possible files: + POSIX (extension) 8.3 filename + --------------------------------------------- + *_componentmask.* cmsk.* + *_componentsilk.* cslk.* + *_soldermask.* smsk.* + *_soldersilk.* sslk.* + *_drill.* dril.* + *_groundplane.* gpl.* + *_group[1..8].* [..8].* + The output may be sent to a post-processor by starting the + filename with the _pipe_ `("|")' character. Any `"%f"' in a + command is replaced with the current filename. The function is + available from the _file_ menu. There are no defaults. + +`Quit()' + Quits the application after confirming the operation. Default: + WM_PROTOCOLS: Quit() + +`Redo()' + This routine allows you to recover from the last undo command. + You might want to do this if you thought that undo was going to + revert something other than what it actually did (in case you are + confused about which operations are un-doable), or if you have + been backing up through a long undo list and over-shoot your + stopping point. Any change that is made since the undo in + question will trim the redo list. For example if you add ten + lines, then undo three of them you could use redo to put them + back, but if you move a line on the board before performing the + redo, you will lose the ability to "redo" the three "undone" lines. + Default: + !Shiftr: Redo() + +`RemoveSelected()' + This routine removes all visible and selected objects. There are + no defaults. + +`Report(Object|DrillReport)' + This routine pops up a dialog box describing the various + characteristics of an object (or piece of an object such as a pad + or pin) in the layout at the cursor position, or a report about + all of the drill holes in the layout. There are no defaults. + +`RouteStyle(1|2|3|4)' + This routine copies the sizes corresponding to the numbered route + style into the active line thickens, via diameter, and via drill + size. Defaults: + !Ctrl1: RouteStyle(1) + ... + !CtrlNUM_STYLES: RouteStyle(NUM_STYLES) + The variable `NUM_STYLES' is set at compile time in + `globalconfig.h'. + +`Save(Layout|LayoutAs)' +`Save(AllConnections|AllUnusedPins|ElementConnections)' + Passing _Layout_ saves the layout using the file from which it was + loaded or, if it is a new layout, calls _Save(LayoutAs)_ which + queries the user for a filename. The values: _AllConnections_, + _AllUnusedPins_ and _ElementConnections_ start a connection scan + and save all connections, all unused pins or the connections of a + single element to a file. There are no defaults. + +`Select(All|Block|Connection|ToggleObject)' +`Select(ElementByName|ObjectByName|PadByName|PinByName)' +`Select(TextByName|ViaByName)' + Toggles either the selection flag of the object at the cross hair + position (_ToggleObject_) or selects all visible objects, all + inside a rectangle or all objects which have been found during the + last connection scan. The _ByName_ functions use a *note Regular + Expressions:: search, always case insensitive, to select the + objects. Default: + None: Select(ToggleObject) + None,None: See resource file - this is complex + +`SetFlag(Object|SelectElements|SelectedPins|SelectedVias|Selected,thermal|octagon|square)' + Sets the indicated flag. This adds thermals, sets the flag which + indicates a pin/pad should be square, or sets the flag which + indicates a pin/pad should be octagonal. + :SetFlag(Selected,thermal) + +`SetValue(Grid|LineSize|TextScale|ViaDrillingHole|ViaSize|Zoom, value)' + Some internal values may be changed online by this function. The + first parameter specifies which data has to be changed. The other + one determines if the resource is set to the passed value, if + _value_ is specified without sign, or increments/decrements if it + is specified with a plus or minus sign. The function doesn't + change any existing object only the initial values of new objects. + Use the _ChangeSize()_ and _ChangeDrillSize()_ to change existing + objects. Default: + Noneg: SetValue(Grid, +5) + !Shiftg: SetValue(Grid, -5) + Nonel: SetValue(LineSize, +5) + !Shiftl: SetValue(LineSize, -5) + Nonet: SetValue(TextScale, +10) + !Shiftt: SetValue(TextScale, -10) + Nonev: SetValue(ViaSize, +5) + !Shiftv: SetValue(ViaSize, -5) + !Mod1v: SetValue(ViaDrillingHole, +5) + !Mod1 Shiftv: SetValue(ViaDrillingHole, -5) + Nonez: SetValue(Zoom, -1) + !Shiftz: SetValue(Zoom, +1) + +`SwapSides()' + This routine changes the board side you are viewing. Default: + NoneTab: SwapSides() + +`SwitchDrawingLayer(value)' + Makes layer number 1..MAX_LAYER the current one. Default: + None1: SwitchDrawingLayer(1) + ... + NoneMAX_LAYER: SwitchDrawingLayer(MAX_LAYER) + +`ToggleHideName(Object|SelectedElements)' + Toggles whether the element's name is displayed or hidden. If it + is hidden you won't see it on the screen and it will not appear on + the silk layer when you print the layout. + Noneh: ToggleHideName(Object) + !Shifth: ToggleHideName(SelectedElements) + +`ToggleVendor()' + Toggles automatic drill size mapping to the loaded vendor drill + table. + ToggleVendor() + +`ToggleVisibility(Layer)' + Toggles the visibility of the layer. + Mod11: ToggleVisibility(1) + Mod12: ToggleVisibility(2) + Mod13: ToggleVisibility(3) + Mod14: ToggleVisibility(4) + +`Undo()' +`Undo(ClearList)' + The unlimited undo feature of `Pcb' allows you to recover from + most operations that materially affect you work. Calling _Undo()_ + without any parameter recovers from the last (non-undo) operation. + _ClearList_ is used to release the allocated memory. _ClearList_ + is called whenever a new layout is started or loaded. See also + _Redo_. Default: + Noneu: Undo() + !Shift Ctrlu: Undo(ClearList) + +`UnloadVendor()' + Unloads the loaded vendor drill table. + UnloadVendor() + +`Unselect(All|Block|Connection)' + Unselects all visible objects, all inside a rectangle or all + objects which have been found during the last connection scan. + Default: + !Shift : Mode(Save) Mode(None) Unselect(Block) + !Shift : Unselect(Block) Mode(Restore) + + + +File: pcb.info, Node: Translations, Prev: Actions, Up: X11 Interface + +7.3 Default Translations +======================== + +This section covers some default translations of key and button events +as defined in the shipped default application resource file. Most of +them have already been listed in *note Actions::. `Pcb' makes use of a +nice `X11' feature; calling several action routines for one event. + +`NoneBackSpace:' + +`NoneDelete:' +`!ShiftBackSpace:' +`!Shift Ctrl:' + The object at the cursor location is removed by + _NoneBackSpace_ or _Shift Ctrl_ whereas + _ShiftBackSpace_ also removes all other objects that are + fully-connected to the one at the cursor location. + +`!Mod1 CtrlLeft:' +`!Mod1 CtrlRight:' +`!Mod1 CtrlUp:' +`!Mod1 CtrlDown:' + Scroll one page in one of the four directions. + +`NoneLeft:, !ShiftLeft:' +`NoneRight:, !ShiftRight:' +`NoneUp:, !ShiftUp:' +`NoneDown:, !ShiftDown:' + Move cross hair either one or ten points in grid. + +`NoneReturn:' + Finished user input, selects the 'default' button of dialogs. + +`NoneEscape:' + _Mode(Reset)_, aborts user input, selects the 'abort' button of + dialogs or resets all modes. + +`None, Btn2, None:' +`!Mod1, Btn2, !Mod1:' + The first sequence moves the object or element name at the cursor + location. The second one copies the objects. Copying isn't + available for element names. + + + +File: pcb.info, Node: File Formats, Next: Library Creation, Prev: X11 Interface, Up: Top + +8 File Formats +************** + +All files used by `Pcb' are read from the standard output of a command +or written to the standard input of one as plain seven bit `ASCII'. This +makes it possible to use any editor to change the contents of a layout +file. It is the only way for element or font description files to be +created. To do so you'll need to study the example files `example/*' +and `default_font' which are shipped with `Pcb'. For an overview refer +to *note Intro::. + + The following sections provide the necessary information about the +syntax of the files. Netlist files are not created by `Pcb', but it +does use them. For information on the format of a netlist file see the +_:rn_, *note User Commands::. The commands described allow you to add +almost any additional functionality you may need. Examples are +compressed read and write access as well as archives. The commands +themselves are defined by the resources _elementCommand_, +_fileCommand_, _fontCommand_, _libraryCommand_, +_libraryContentsCommand_ and _saveCommand_. Note that the commands are +not saved along with the data. It is considered an advantage to have +the layout file contain all necessary information, independent of any +other files. + + One thing common to all files is they may include comments, newlines, +and carriage returns at any place except within quoted strings. + +* Menu: + +* Pad and Line Representation:: +* Layout File:: +* Element File:: +* Font File:: +* Netlist File:: +* Library Contents File:: +* Library File:: +* File Syntax:: +* Object Flags:: +* PCBFlags:: + + +File: pcb.info, Node: Pad and Line Representation, Next: Layout File, Up: File Formats + +8.1 Pad and Line Representation +=============================== + +Pads and lines (copper traces, silk screen lines, etc) are represented +by the line end points and the aperture used to draw the line. It is +important to understand this when creating the pads for a new +footprint. The following figure illustrates a pad or line which is +drawn using a square aperture. The end points (X0,Y0), (X1,Y1) specify +the center of the aperture. The size parameter specifies the size of +the aperture. + + [image src="pad.png" alt="Pad Layout"] + +Pads and lines are represented in this way because this is how lines are +specified in RS-274X (Gerber) files which are used for creating the +masks used in board manufacturing. In fact, older mask making +equipment created lines in precisely this fashion. A physical aperture +was used to pass light through onto a photosensitive film. + + +File: pcb.info, Node: Layout File, Next: Element File, Prev: Pad and Line Representation, Up: File Formats + +8.2 Layout File Format +====================== + +The layout file describes a complete layout including symbols, vias, +elements and layers with lines, rectangles and text. This is the most +complex file of all. As `Pcb' has evolved, the file format has changed +several times to accommodate new features. `Pcb' has always been able +to read all older versions of the `.pcb' file. This allows the +migration of older designs to newer versions of the program. Obviously +older versions of `Pcb' will not be able to properly read layout files +stored in newer versions of the file format. + + In practice it is very common for footprint libraries to contain +elements which have been defined in various versions of the `Pcb' file +format. When faced with trying to understand an element file or layout +file which includes syntax not defined here, the best approach is to +examine the file `src/parse_y.y' which is the definitive definition of +the file format. + + The PCB layout file contains the following contents, in this order +(individual items are defined in *note File Syntax::: + +`PCB' + This names the board and sets its size + +`Grid' + Optional. + +`Cursor' + Optional. + +`Flags' + Optional. + +`Groups' + Optional. + +`Styles' + Optional. + +`Symbols' + Optional. + +`Vias, Rats, Layers, and Elements' + These may occur in any order, at this point in the file. + +`Netlists' + Optional. + + + +File: pcb.info, Node: Element File, Next: Font File, Prev: Layout File, Up: File Formats + +8.3 Element File Format +======================= + +Element files are used to describe one component which then may be used +several times within one or more layouts. You will normally split the +file into two parts, one for the pinout and one for the package +description. Using `m4' allows you to define pin names as macros in +one file and include a package description file which evaluates the +macros. See the resource _elementCommand_ for more information. The +pins (and pads) must appear in sequential order in the element file +(new in 1.5) so that pin 1 must be the first PIN(...) in the file. + + Doing things this way makes it possible to use one package file for +several different circuits. See the sample files `dil*'. + + The lowest x and y coordinates of all sub-objects of an element are +used as an attachment point for the cross hair cursor of the main +window, unless the element has a mark, in which case that's the +attachment point. + + +File: pcb.info, Node: Font File, Next: Netlist File, Prev: Element File, Up: File Formats + +8.4 Font File Format +==================== + +A number of user defined Symbols are called a font. There is only one +per layout. All symbols are made of lines. See the file `default_font' +as an example. + + The lowest x and y coordinates of all lines of a font are +transformed to (0,0). + + +File: pcb.info, Node: Netlist File, Next: Library Contents File, Prev: Font File, Up: File Formats + +8.5 Netlist File Format +======================= + +Netlists read by `Pcb' must have this simple text form: + + netname [style] NAME-PINNUM NAME2-PINNUM2 NAME3-PINNUM3 ... [\] + +for each net on the layout. where "netname" is the name of the net +which must be unique for each net, [style] is an optional route-style +name, NAME is the layout-name name given to an element, and PINNUM is +the (usually numeric) pin number of the element that connects to the net +(for details on pin numbering see *note Element Objects::). Spaces or +tabs separate the fields. If the line ends with a "\" the net +continues on the next line and the "\" is treated exactly as if it were +a space. If a NAME ends with a lower-case letter, all lower-case +letters are stripped from the end of the NAME to determine the matching +layout-name name. For example: + + Data U1-3 U2abc-4 FLOP1a-7 Uabc3-A9 + + specifies that the net called "Data" should have pin 3 of U1 +connected to pin 4 of U2, to pin 7 of FLOP1 and to pin A9 of Uabc3. +Note that element name and pin number strings are case-sensitive. It +is up to you to name the elements so that their layout-name names +agrees with the netlist. + + +File: pcb.info, Node: Library Contents File, Next: Library File, Prev: Netlist File, Up: File Formats + +8.6 Library Contents File Format +================================ + +There is nothing like a special library format. The ones that have been +introduced in 1.4.1 just use some nice (and time consuming) features of +GNU `m4'. The only predefined format is the one of the contents file +which is read during startup. It is made up of two basic line types: + + menu entry = "TYPE="name + contents line = template":"package":"value":"description + name = String + template = String + package = String + value = String + description = String + String = + + No leading white spaces or comments are allowed in this file. If you +need either one, define a command that removes them before loading. +Have a look to the _libraryContentsCommand_ resource. + + The menu entry will appear in the selection menu at the top and of +the library window. + + +File: pcb.info, Node: Library File, Next: File Syntax, Prev: Library Contents File, Up: File Formats + +8.7 Library File Format +======================= + +This section provides an overview about the existing `m4' definitions +of the elements. There are basically two different types of files. One +to define element specific data like the pinout, package and so on, the +other to define the values. For example the static RAM circuits 43256 +and 62256 are very similar. They therefore share a common definition in +the macro file but are defined with two different value labels. + + The macro file entry: + define(`Description_43256_dil', `SRAM 32Kx8') + define(`Param1_43256_dil', 28) + define(`Param2_43256_dil', 600) + define(`PinList_43256_dil', ``pin1', `pin2', ...') + + And the list file: + 43256_dil:N:43256:62256 + + The macro must define a description, the pin list and up to two +additional parameters that are passed to the package definitions. The +first one is the number of pins whereas the second one defines for +example the width of a package. + + It is very important to select a unique identifier for each macro. In +the example this would be _43256_dil_ which is also the templates name. +It is required by some low-level macros that _Description_, Param1_, +Param2__ and _PinList__ are perpended. + + The list file uses a syntax: + template:package:value[:more values] + + This means that the shown example will create two element entries +with the same package and pinout but with different names. + + A number of packages are defined in `common.m4'. Included are: + + DIL packages with suffix D, DW, J, JD, JG, N, NT, P + PLCC + TO3 + generic connectors + DIN 41.612 connectors + zick-zack (SD suffix) + 15 pin multiwatt + + If you are going to start your own library please take care about +`m4' functions. Be aware of quoting and so on and, most important check +your additional entry by calling the macro: + + CreateObject(`template', `value', `package suffix') + + If quoting is incorrect an endless loop may occur (broken by a +out-of-memory message). + + The scripts in the `lib' directory handle the creation of libraries +as well as of their contents files. Querying is also supported. + + I know quite well that this description of the library +implementation is not what some out there expect. But in my opinion +it's much more useful to look at the comments and follow the macros +step by step. + + +File: pcb.info, Node: File Syntax, Next: Object Flags, Prev: Library File, Up: File Formats + +8.8 File Syntax +=============== + +A special note about units: Older versions of `pcb' used mils (1/1000 +inch) as the base unit; a value of 500 in the file meant half an inch. +Newer versions uses a "high resolution" syntax, where the base unit is +1/100 of a mil (0.000010 inch); a value of 500 in the file means 5 +mils. As a general rule, the variants of each entry listed below which +use square brackets are the high resolution formats and use the 1/100 +mil units, and the ones with parentheses are the older variants and use +1 mil units. Note that when multiple variants are listed, the most +recent (and most preferred) format is the first listed. + + Symbolic and numeric flags (SFlags and NFlags) are described in +*note Object Flags::. + +* Menu: + +* Arc syntax:: +* Attribute syntax:: +* Connect syntax:: +* Cursor syntax:: +* DRC syntax:: +* Element syntax:: +* ElementArc syntax:: +* ElementLine syntax:: +* FileVersion syntax:: +* Flags syntax:: +* Grid syntax:: +* Groups syntax:: +* Layer syntax:: +* Line syntax:: +* Mark syntax:: +* Net syntax:: +* Netlist syntax:: +* Pad syntax:: +* PCB syntax:: +* Pin syntax:: +* PolyArea syntax:: +* Polygon syntax:: +* Rat syntax:: +* Styles syntax:: +* Symbol syntax:: +* SymbolLine syntax:: +* Text syntax:: +* Thermal syntax:: +* Via syntax:: + + +File: pcb.info, Node: Arc syntax, Next: Attribute syntax, Up: File Syntax + +8.8.1 Arc +--------- + +Arc [X Y Width Height Thickness Clearance StartAngle DeltaAngle SFlags] +Arc (X Y Width Height Thickness Clearance StartAngle DeltaAngle NFlags) +Arc (X Y Width Height Thickness StartAngle DeltaAngle NFlags) + +X Y + Coordinates of the center of the arc. + +WIDTH HEIGHT + The width and height, from the center to the edge. The bounds of + the circle of which this arc is a segment, is thus 2*Width by + 2*Height. + +THICKNESS + The width of the copper trace which forms the arc. + +CLEARANCE + The amount of space cleared around the arc when the line passes + through a polygon. The clearance is added to the thickness to get + the thickness of the clear; thus the space between the arc and the + polygon is Clearance/2 wide. + +STARTANGLE + The angle of one end of the arc, in degrees. In PCB, an angle of + zero points left (negative X direction), and 90 degrees points down + (positive Y direction). + +DELTAANGLE + The sweep of the arc. This may be negative. Positive angles sweep + counterclockwise. + +SFLAGS + Symbolic or numeric flags. + +NFLAGS + Numeric flags. + + +File: pcb.info, Node: Attribute syntax, Next: Connect syntax, Prev: Arc syntax, Up: File Syntax + +8.8.2 Attribute +--------------- + +Attribute ("Name" "Value") + +Attributes allow boards and elements to have arbitrary data attached to +them, which is not directly used by PCB itself but may be of use by +other programs or users. + +NAME + The name of the attribute + +VALUE + The value of the attribute. Values are always stored as strings, + even if the value is interpreted as, for example, a number. + + + +File: pcb.info, Node: Connect syntax, Next: Cursor syntax, Prev: Attribute syntax, Up: File Syntax + +8.8.3 Connect +------------- + +Connect ("PinPad") + +PINPAD + The name of a pin or pad which is included in this net. Pin and + Pad names are named by the refdes and pin name, like `"U14-7"' for + pin 7 of U14, or `"T4-E"' for pin E of T4. + + +File: pcb.info, Node: Cursor syntax, Next: DRC syntax, Prev: Connect syntax, Up: File Syntax + +8.8.4 Cursor +------------ + +Cursor [X Y Zoom] +Cursor (X Y Zoom) + +X Y + Location of the cursor when the board was saved. + +ZOOM + The current zoom factor. Note that a zoom factor of "0" means 1 + mil per screen pixel, N means 2^N mils per screen pixel, etc. The + first variant accepts floating point numbers. The special value + "1000" means "zoom to fit" + + +File: pcb.info, Node: DRC syntax, Next: Element syntax, Prev: Cursor syntax, Up: File Syntax + +8.8.5 DRC +--------- + +DRC [Bloat Shrink Line Silk Drill Ring] +DRC [Bloat Shrink Line Silk] +DRC [Bloat Shrink Line] + +BLOAT + Minimum spacing between copper. + +SHRINK + Minimum copper overlap to guarantee connectivity. + +LINE + Minimum line thickness. + +SILK + Minimum silk thickness. + +DRILL + Minimum drill size. + +RING + Minimum width of the annular ring around pins and vias. + + +File: pcb.info, Node: Element syntax, Next: ElementArc syntax, Prev: DRC syntax, Up: File Syntax + +8.8.6 Element +------------- + +Element [SFlags "Desc" "Name" "Value" MX MY TX TY TDir TScale TSFlags] ( +Element (NFlags "Desc" "Name" "Value" MX MY TX TY TDir TScale TNFlags) ( +Element (NFlags "Desc" "Name" "Value" TX TY TDir TScale TNFlags) ( +Element (NFlags "Desc" "Name" TX TY TDir TScale TNFlags) ( +Element ("Desc" "Name" TX TY TDir TScale TNFlags) ( + ... contents ... +) + +SFLAGS + Symbolic or numeric flags, for the element as a whole. + +NFLAGS + Numeric flags, for the element as a whole. + +DESC + The description of the element. This is one of the three strings + which can be displayed on the screen. + +NAME + The name of the element, usually the reference designator. + +VALUE + The value of the element. + +MX MY + The location of the element's mark. This is the reference point + for placing the element and its pins and pads. + +TX TY + The upper left corner of the text (one of the three strings). + +TDIR + The relative direction of the text. 0 means left to right for an + unrotated element, 1 means up, 2 left, 3 down. + +TSCALE + Size of the text, as a percentage of the "default" size of of the + font (the default font is about 40 mils high). Default is 100 (40 + mils). + +TSFLAGS + Symbolic or numeric flags, for the text. + +TNFLAGS + Numeric flags, for the text. + + Elements may contain pins, pads, element lines, element arcs, +attributes, and (for older elements) an optional mark. Note that +element definitions that have the mark coordinates in the element line, +only support pins and pads which use relative coordinates. The pin and +pad coordinates are relative to the mark. Element definitions which do +not include the mark coordinates in the element line, may have a Mark +definition in their contents, and only use pin and pad definitions +which use absolute coordinates. + + +File: pcb.info, Node: ElementArc syntax, Next: ElementLine syntax, Prev: Element syntax, Up: File Syntax + +8.8.7 ElementArc +---------------- + +ElementArc [X Y Width Height StartAngle DeltaAngle Thickness] +ElementArc (X Y Width Height StartAngle DeltaAngle Thickness) + +X Y + Coordinates of the center of the arc. These are relative to the + Element's mark point for new element formats, or absolute for older + formats. + +WIDTH HEIGHT + The width and height, from the center to the edge. The bounds of + the circle of which this arc is a segment, is thus 2*Width by + 2*Height. + +STARTANGLE + The angle of one end of the arc, in degrees. In PCB, an angle of + zero points left (negative X direction), and 90 degrees points down + (positive Y direction). + +DELTAANGLE + The sweep of the arc. This may be negative. Positive angles sweep + counterclockwise. + +THICKNESS + The width of the silk line which forms the arc. + + +File: pcb.info, Node: ElementLine syntax, Next: FileVersion syntax, Prev: ElementArc syntax, Up: File Syntax + +8.8.8 ElementLine +----------------- + +ElementLine [X1 Y1 X2 Y2 Thickness] +ElementLine (X1 Y1 X2 Y2 Thickness) + +X1 Y1 X2 Y2 + Coordinates of the endpoints of the line. These are relative to + the Element's mark point for new element formats, or absolute for + older formats. + +THICKNESS + The width of the silk for this line. + + +File: pcb.info, Node: FileVersion syntax, Next: Flags syntax, Prev: ElementLine syntax, Up: File Syntax + +8.8.9 FileVersion +----------------- + +FileVersion[Version] + +VERSION + File format version. This version number represents the date when + the pcb file format was last changed. + + Any version of pcb build from sources equal to or newer than this +number should be able to read the file. If this line is not present in +the input file then file format compatibility is not checked. + + +File: pcb.info, Node: Flags syntax, Next: Grid syntax, Prev: FileVersion syntax, Up: File Syntax + +8.8.10 Flags +------------ + +Flags(Number) + +NUMBER + A number, whose value is normally given in hex, individual bits of + which represent pcb-wide flags as defined in *note PCBFlags::. + + + +File: pcb.info, Node: Grid syntax, Next: Groups syntax, Prev: Flags syntax, Up: File Syntax + +8.8.11 Grid +----------- + +Grid [Step OffsetX OffsetY Visible] +Grid (Step OffsetX OffsetY Visible) +Grid (Step OffsetX OffsetY) + +STEP + Distance from one grid point to adjacent points. This value may + be a floating point number for the first two variants. + +OFFSETX OFFSETY + The "origin" of the grid. Normally zero. + +VISIBLE + If non-zero, the grid will be visible on the screen. + + +File: pcb.info, Node: Groups syntax, Next: Layer syntax, Prev: Grid syntax, Up: File Syntax + +8.8.12 Groups +------------- + +Groups("String") + +STRING + Encodes the layer grouping information. Each group is separated + by a colon, each member of each group is separated by a comma. + Group members are either numbers from `1'..N for each layer, and + the letters `c' or `s' representing the component side and solder + side of the board. Including `c' or `s' marks that group as being + the top or bottom side of the board. + + Groups("1,2,c:3:4:5,6,s:7,8") + + + +File: pcb.info, Node: Layer syntax, Next: Line syntax, Prev: Groups syntax, Up: File Syntax + +8.8.13 Layer +------------ + +Layer (LayerNum "Name") ( + ... contents ... +) + +LAYERNUM + The layer number. Layers are numbered sequentially, starting with + 1. The last two layers (9 and 10 by default) are solder-side silk + and component-side silk, in that order. + +NAME + The layer name. + +CONTENTS + The contents of the layer, which may include attributes, lines, + arcs, rectangles, text, and polygons. + + +File: pcb.info, Node: Line syntax, Next: Mark syntax, Prev: Layer syntax, Up: File Syntax + +8.8.14 Line +----------- + +Line [X1 Y1 X2 Y2 Thickness Clearance SFlags] +Line (X1 Y1 X2 Y2 Thickness Clearance NFlags) +Line (X1 Y1 X2 Y2 Thickness NFlags) + +X1 Y1 X2 Y2 + The end points of the line + +THICKNESS + The width of the line + +CLEARANCE + The amount of space cleared around the line when the line passes + through a polygon. The clearance is added to the thickness to get + the thickness of the clear; thus the space between the line and the + polygon is Clearance/2 wide. + +SFLAGS + Symbolic or numeric flags + +NFLAGS + Numeric flags. + + +File: pcb.info, Node: Mark syntax, Next: Net syntax, Prev: Line syntax, Up: File Syntax + +8.8.15 Mark +----------- + +Mark [X Y] +Mark (X Y) + +X Y + Coordinates of the Mark, for older element formats that don't have + the mark as part of the Element line. + + +File: pcb.info, Node: Net syntax, Next: Netlist syntax, Prev: Mark syntax, Up: File Syntax + +8.8.16 Net +---------- + +Net ("Name" "Style") ( + ... connects ... +) + +NAME + The name of this net. + +STYLE + The routing style that should be used when autorouting this net. + + +File: pcb.info, Node: Netlist syntax, Next: Pad syntax, Prev: Net syntax, Up: File Syntax + +8.8.17 Netlist +-------------- + +Netlist ( ) ( + ... nets ... +) + + +File: pcb.info, Node: Pad syntax, Next: PCB syntax, Prev: Netlist syntax, Up: File Syntax + +8.8.18 Pad +---------- + +Pad [rX1 rY1 rX2 rY2 Thickness Clearance Mask "Name" "Number" SFlags] +Pad (rX1 rY1 rX2 rY2 Thickness Clearance Mask "Name" "Number" NFlags) +Pad (aX1 aY1 aX2 aY2 Thickness "Name" "Number" NFlags) +Pad (aX1 aY1 aX2 aY2 Thickness "Name" NFlags) + +RX1 RY1 RX2 RY2 + Coordinates of the endpoints of the pad, relative to the element's + mark. Note that the copper extends beyond these coordinates by + half the thickness. To make a square or round pad, specify the + same coordinate twice. + +AX1 AY1 AX2 AY2 + Same, but absolute coordinates of the endpoints of the pad. + +THICKNESS + width of the pad. + +CLEARANCE + add to thickness to get clearance width. + +MASK + width of solder mask opening. + +NAME + name of pin + +NUMBER + number of pin + +SFLAGS + symbolic or numerical flags + +NFLAGS + numerical flags only + + +File: pcb.info, Node: PCB syntax, Next: Pin syntax, Prev: Pad syntax, Up: File Syntax + +8.8.19 PCB +---------- + +PCB ["Name" Width Height] +PCB ("Name" Width Height] +PCB ("Name") + +NAME + Name of the PCB project + +WIDTH HEIGHT + Size of the board + + If you don't specify the size of the board, a very large default is +chosen. + + +File: pcb.info, Node: Pin syntax, Next: PolyArea syntax, Prev: PCB syntax, Up: File Syntax + +8.8.20 Pin +---------- + +Pin [rX rY Thickness Clearance Mask Drill "Name" "Number" SFlags] +Pin (rX rY Thickness Clearance Mask Drill "Name" "Number" NFlags) +Pin (aX aY Thickness Drill "Name" "Number" NFlags) +Pin (aX aY Thickness Drill "Name" NFlags) +Pin (aX aY Thickness "Name" NFlags) + +RX RY + coordinates of center, relative to the element's mark + +AX AY + absolute coordinates of center. + +THICKNESS + outer diameter of copper annulus + +CLEARANCE + add to thickness to get clearance diameter + +MASK + diameter of solder mask opening + +DRILL + diameter of drill + +NAME + name of pin + +NUMBER + number of pin + +SFLAGS + symbolic or numerical flags + +NFLAGS + numerical flags only + + +File: pcb.info, Node: PolyArea syntax, Next: Polygon syntax, Prev: Pin syntax, Up: File Syntax + +8.8.21 PolyArea +--------------- + +PolyArea [Area] + +AREA + Minimum area of polygon island to retain. If a polygon has + clearances that cause an isolated island to be created, then will + only be retained if the area exceeds this minimum area. + + +File: pcb.info, Node: Polygon syntax, Next: Rat syntax, Prev: PolyArea syntax, Up: File Syntax + +8.8.22 Polygon +-------------- + +Polygon (SFlags) ( + ... (X Y) ... + ... [X Y] ... + Hole ( + ... (X Y) ... + ... [X Y] ... + ) + ... +) + +SFLAGS + Symbolic or numeric flags. + +X Y + Coordinates of each vertex. You must list at least three + coordinates. + +HOLE (...) + Defines a hole within the polygon's outer contour. There may be + zero or more such sections. + + +File: pcb.info, Node: Rat syntax, Next: Styles syntax, Prev: Polygon syntax, Up: File Syntax + +8.8.23 Rat +---------- + +Rat [X1 Y1 Group1 X2 Y2 Group2 SFlags] +Rat (X1 Y1 Group1 X2 Y2 Group2 NFlags) + +X1 Y1 X2 Y2 + The endpoints of the rat line. + +GROUP1 GROUP2 + The layer group each end is connected on. + +SFLAGS + Symbolic or numeric flags. + +NFLAGS + Numeric flags. + + +File: pcb.info, Node: Styles syntax, Next: Symbol syntax, Prev: Rat syntax, Up: File Syntax + +8.8.24 Styles +------------- + +Styles("String") + +STRING + Encodes the four routing styles `pcb' knows about. The four styles + are separated by colons. Each style consists of five parameters + as follows: + + NAME + The name of the style. + + THICKNESS + Width of lines and arcs. + + DIAMETER + Copper diameter of pins and vias. + + DRILL + Drill diameter of pins and vias. + + KEEPAWAY + Minimum spacing to other nets. If omitted, 10 mils is the + default. + + + + Styles("Signal,10,40,20:Power,25,60,35:Fat,40,60,35:Skinny,8,36,20") + Styles["Logic,1000,3600,2000,1000:Power,2500,6000,3500,1000: + Line,4000,6000,3500,1000:Breakout,600,2402,1181,600"] + +Note that strings in actual files cannot span lines; the above example +is split across lines only to make it readable. + + +File: pcb.info, Node: Symbol syntax, Next: SymbolLine syntax, Prev: Styles syntax, Up: File Syntax + +8.8.25 Symbol +------------- + +Symbol [Char Delta] ( +Symbol (Char Delta) ( + ... symbol lines ... +) + +CHAR + The character or numerical character value this symbol represents. + Characters must be in single quotes. + +DELTA + Additional space to allow after this character. + + +File: pcb.info, Node: SymbolLine syntax, Next: Text syntax, Prev: Symbol syntax, Up: File Syntax + +8.8.26 SymbolLine +----------------- + +SymbolLine [X1 Y1 X2 Y1 Thickness] +SymbolLine (X1 Y1 X2 Y1 Thickness) + +X1 Y1 X2 Y2 + The endpoints of this line. + +THICKNESS + The width of this line. + + +File: pcb.info, Node: Text syntax, Next: Thermal syntax, Prev: SymbolLine syntax, Up: File Syntax + +8.8.27 Text +----------- + +Text [X Y Direction Scale "String" SFlags] +Text (X Y Direction Scale "String" NFlags) +Text (X Y Direction "String" NFlags) + +X Y + The location of the upper left corner of the text. + +DIRECTION + 0 means text is drawn left to right, 1 means up, 2 means right to + left (i.e. upside down), and 3 means down. + +SCALE + Size of the text, as a percentage of the "default" size of of the + font (the default font is about 40 mils high). Default is 100 (40 + mils). + +STRING + The string to draw. + +SFLAGS + Symbolic or numeric flags. + +NFLAGS + Numeric flags. + + +File: pcb.info, Node: Thermal syntax, Next: Via syntax, Prev: Text syntax, Up: File Syntax + +8.8.28 Thermal +-------------- + +Thermal [Scale] + +SCALE + Relative size of thermal fingers. A value of 1.0 makes the finger + width twice the clearance gap width (measured across the gap, not + diameter). The normal value is 0.5, which results in a finger + width the same as the clearance gap width. + + +File: pcb.info, Node: Via syntax, Prev: Thermal syntax, Up: File Syntax + +8.8.29 Via +---------- + +Via [X Y Thickness Clearance Mask Drill "Name" SFlags] +Via (X Y Thickness Clearance Mask Drill "Name" NFlags) +Via (X Y Thickness Clearance Drill "Name" NFlags) +Via (X Y Thickness Drill "Name" NFlags) +Via (X Y Thickness "Name" NFlags) + +X Y + coordinates of center + +THICKNESS + outer diameter of copper annulus + +CLEARANCE + add to thickness to get clearance diameter + +MASK + diameter of solder mask opening + +DRILL + diameter of drill + +NAME + string, name of via (vias have names?) + +SFLAGS + symbolic or numerical flags + +NFLAGS + numerical flags only + + +File: pcb.info, Node: Object Flags, Next: PCBFlags, Prev: File Syntax, Up: File Formats + +8.9 Object Flags +================ + +Note that object flags can be given numerically (like `0x0147') or +symbolically (like `"found,showname,square"'. Some numeric values are +reused for different object types. The table below lists the numeric +value followed by the symbolic name. + +`0x0001 pin' + If set, this object is a pin. This flag is for internal use only. + +`0x0002 via' + Likewise, for vias. + +`0x0004 found' + If set, this object has been found by `FindConnection()'. + +`0x0008 hole' + For pins and vias, this flag means that the pin or via is a hole + without a copper annulus. + +`0x0010 rat' + If set for a line, indicates that this line is a rat line instead + of a copper trace. + +`0x0010 pininpoly' + For pins and pads, this flag is used internally to indicate that + the pin or pad overlaps a polygon on some layer. + +`0x0010 clearpoly' + For polygons, this flag means that pins and vias will normally + clear these polygons (thus, thermals are required for electrical + connection). When clear, polygons will solidly connect to pins and + vias. + +`0x0010 hidename' + For elements, when set the name of the element is hidden. + +`0x0020 showname' + For elements, when set the names of pins are shown. + +`0x0020 clearline' + For lines and arcs, the line/arc will clear polygons instead of + connecting to them. + +`0x0020 fullpoly' + For polygons, the full polygon is drawn (i.e. all parts instead of + only the biggest one). + +`0x0040 selected' + Set when the object is selected. + +`0x0080 onsolder' + For elements and pads, indicates that they are on the solder side. + +`0x0080 auto' + For lines and vias, indicates that these were created by the + autorouter. + +`0x0100 square' + For pins and pads, indicates a square (vs round) pin/pad. + +`0x0200 rubberend' + For lines, used internally for rubber band moves. + +`0x0200 warn' + For pins, vias, and pads, set to indicate a warning. + +`0x0400 usetherm' + Obsolete, indicates that pins/vias should be drawn with thermal + fingers. + +`0x0400' + Obsolete, old files used this to indicate lines drawn on silk. + +`0x0800 octagon' + Draw pins and vias as octagons. + +`0x1000 drc' + Set for objects that fail DRC. + +`0x2000 lock' + Set for locked objects. + +`0x4000 edge2' + For pads, indicates that the second point is closer to the edge. + For pins, indicates that the pin is closer to a horizontal edge + and thus pinout text should be vertical. + +`0x8000 marker' + Marker used internally to avoid revisiting an object. + +`0x10000 nopaste' + For pads, set to prevent a solderpaste stencil opening for the + pad. Primarily used for pads used as fiducials. + + +File: pcb.info, Node: PCBFlags, Prev: Object Flags, Up: File Formats + +8.10 PCBFlags +============= + +`0x00001' + Pinout displays pin numbers instead of pin names. + +`0x00002' + Use local reference for moves, by setting the mark at the + beginning of each move. + +`0x00004' + When set, only polygons and their clearances are drawn, to see if + polygons have isolated regions. + +`0x00008' + Display DRC region on crosshair. + +`0x00010' + Do all move, mirror, rotate with rubberband connections. + +`0x00020' + Display descriptions of elements, instead of refdes. + +`0x00040' + Display names of elements, instead of refdes. + +`0x00080' + Auto-DRC flag. When set, PCB doesn't let you place copper that + violates DRC. + +`0x00100' + Enable 'all-direction' lines. + +`0x00200' + Switch starting angle after each click. + +`0x00400' + Force unique names on board. + +`0x00800' + New lines/arc clear polygons. + +`0x01000' + Crosshair snaps to pins and pads. + +`0x02000' + Show the solder mask layer. + +`0x04000' + Draw with thin lines. + +`0x08000' + Move items orthogonally. + +`0x10000' + Draw autoroute paths real-time. + +`0x20000' + New polygons are full ones. + +`0x40000' + Names are locked, the mouse cannot select them. + +`0x80000' + Everything but names are locked, the mouse cannot select anything + else. + +`0x100000' + New polygons are full polygons. + +`0x200000' + When set, element names are not drawn. + + +File: pcb.info, Node: Library Creation, Next: Schematic Frontends, Prev: File Formats, Up: Top + +9 Library Creation +****************** + +This chapter provides a detailed look at how footprint libraries are +created and used. The chapter is split into two section, the first +section covers the "old" style libraries which use the `m4' macro +processor and the second section covers the "new" style libraries. + + Despite the names "old" and "new", both styles of libraries are +useful and the "old" style should not be discounted because of its +name. The advantage of the old style libraries is that one can define +a family of footprints, say a DIP package, and then quickly produce all +the members of that family. Because the individual packages make use +of a base definition, corrections made to the base definition propagate +to all the members of a family. The primary drawback to using this +library approach is that the effort to create a single footprint is +more than a graphical interface and may take even longer if the user +has not used the `m4' macro language previously. + + The new style of footprint libraries stores each footprint in its own +file. The footprints are created graphically by placing pads and then +converting a group of pads to a component. This library method has the +advantage of being quick to learn and it is easily to build single +footprints quickly. If you are building a family of parts, however, the +additional effort in creating each one individually makes this approach +undesirable. In addition, creating a part with a large pin count can +be quite tedious when done by hand. + +9.1 Old Style (m4) Libraries +============================ + +The old style libraries for pcb use the `m4' macro processor to allow +the definition of a family of parts. There are several files +associated with the old style library. The file `common.m4' is the top +level file associated with the library. `common.m4' defines a few +utility macros which are used by other portions of the library, and +then includes a predefined set of library files (the lines like +`include(geda.inc)'). + +9.1.1 Overview of Oldlib Operation +---------------------------------- + +The big picture view of the old style library system is that the library +is simply a collection of macro definitions. The macros are written in +the `m4' macro language. An example of a macro and what it expands to +is the following. One of the predefined footprints in the library +which comes with PCB is the `PKG_SO8' macro. Note that all the +footprint macros begin with `PKG_'. For this particular example, +`PKG_SO8' is a macro for an 8-pin small outline surface mount package. +All of the footprint macros take 3 arguments. The first is the +canonical name of the footprint on the board. In this case "SO8" is an +appropriate name. The second argument is the reference designator on +the board such as "U1" or "U23". The third and final argument is the +value. For an integrated circuit this is usually the part number such +as "MAX4107" or "78L05" and for a component such as a resistor or +capacitor it is the resistance or capacitance. The complete call to the +macro in our example is `PKG_SO8(SO8, U1, MAX4107)'. When processed by +`m4' using the macros defined in the PCB library, this macro expands to + Element(0x00 "SO8" "U1" "MAX4107" 146 50 3 100 0x00) + ( + Pad(10 25 38 25 20 "1" 0x00) + Pad(10 75 38 75 20 "2" 0x100) + Pad(10 125 38 125 20 "3" 0x100) + Pad(10 175 38 175 20 "4" 0x100) + Pad(214 175 242 175 20 "5" 0x100) + Pad(214 125 242 125 20 "6" 0x100) + Pad(214 75 242 75 20 "7" 0x100) + Pad(214 25 242 25 20 "8" 0x100) + ElementLine(0 0 151 0 10) + ElementArc(126 0 25 25 0 180 10) + ElementLine(101 0 252 0 10) + ElementLine(252 0 252 200 10) + ElementLine(252 200 0 200 10) + ElementLine(0 200 0 0 10) + Mark(29 25) + ) + which is the actual definition of the footprint that the PCB program +works with. As a user of PCB the only time you will need or want to run +`m4' directly is when you are debugging a new library addition. In +normal operation, the calls to `m4' are made by helper scripts that +come with PCB. + + Tools such as `gsch2pcb' (used to interface the gEDA schematic +capture program to PCB layout) will call `m4' to produce an initial PCB +layout that includes all the components on a schematic. In addition, +when manually instantiating parts from within PCB, `m4' will be called +by PCB's helper scripts to produce the footprints. + +9.1.2 The Library Scripts +------------------------- + +There are several scripts that are used for processing the m4 +libraries. This section briefly describes these scripts and details how +they are used by PCB. + +9.1.2.1 Scripts Used During Compilation +....................................... + +The scripts described in this section are used during compilation of +PCB. They are run automatically by the build system, but are described +here to help document the complete library processing that occurs. +During the build of PCB, the following actions are taken. The +`CreateLibrary.sh' script is run to produce an M4 "frozen file". This +frozen file is simply a partially processed M4 input file which can be +loaded by M4 more quickly than the original input file. + + A typical call to `CreateLibrary.sh' used during the compilation of +PCB is: + ./CreateLibrary.sh -I . pcblib ./common.m4 TTL_74xx_DIL.m4 + connector.m4 crystal.m4 generic.m4 genericsmt.m4 gtag.m4 + jerry.m4 linear.m4 logic.m4 lsi.m4 memory.m4 optical.m4 pci.m4 + resistor_0.25W.m4 resistor_adjust.m4 resistor_array.m4 + texas_inst_amplifier.m4 texas_inst_voltage_reg.m4 + transistor.m4 geda.m4 + The `-I .' says to search in the current directory for the `.m4' +files. The output frozen file is `pcblib'. The main `common.m4' file +is listed as well as all of the `*.m4' files which define the +components in the library. + + In addition, a library contents file is created during the build with +the `CreateLibraryContents.sh' script. A typical call to +`CreateLibrary.sh' used during the compilation of PCB is: + ./CreateLibraryContents.sh -I . ./common.m4 TTL_74xx_DIL.list + connector.list crystal.list generic.list genericsmt.list gtag.list + jerry.list linear.list logic.list lsi.list memory.list optical.list + pci.list resistor_0.25W.list resistor_adjust.list resistor_array.list + texas_inst_amplifier.list texas_inst_voltage_reg.list transistor.list + geda.list > pcblib.contents + + The `pcblib.contents' file is used by the PCB program to define the +libraries and components which will be displayed when you bring up the +library window from within PCB. An example of part of the +`pcblib.contents' file is: + TYPE=~TTL 74xx DIL + 7400_dil:N:7400:4 dual-NAND + 7401_dil:N:7401:4 dual-NAND OC + 7402_dil:N:7402:4 dual-NOR + TYPE=~geda + geda_DIP6:DIP6:DIP6:Dual in-line package, narrow (300 mil) + geda_DIP8:DIP8:DIP8:Dual in-line package, narrow (300 mil) + geda_DIP14:DIP14:DIP14:Dual in-line package, narrow (300 mil) + geda_ACY300:ACY300:ACY300:Axial non-polar component, + The `TYPE=' lines define the library name that will show up in the +library window in PCB. The other lines define the actual components in +the library. + +9.1.2.2 Scripts Used by PCB at Runtime +...................................... + +When PCB is first executed, it makes a call to the +`ListLibraryContents.sh' script. This script provides the PCB program +with the contents of the library contents file created when PCB was +compiled. A typical call to `ListLibraryContents.sh' is + ../lib/ListLibraryContents.sh .:/tmp/pcb-20030903/src/../lib pcblib + This command says to search the path +`.:/tmp/pcb-20030903/src/../lib' for a file called `pcblib.contents' +(the `.contents' part is added automatically) and display the contents +of the file. PCB parses this output and generates the library window +entries. + + When you pick a library component from the library window, PCB calls +the `QueryLibrary.sh' script to actually pull the footprint into the +layout. For example, when the ACY300 component is selected from the +`~geda' library, the generated call may be: + + /tmp/pcb-20030903/src/../lib/QueryLibrary.sh + .:/tmp/pcb-20030903/src/../lib pcblib geda_ACY300 ACY300 + ACY300 + If you were to run this command by hand you would see the PCB code +for the element: + Element(0x00 "Axial non-polar component," "" "ACY300" 245 70 0 100 0x00) + ( + Pin(0 25 50 20 "1" 0x101) + Pin(300 25 50 20 "2" 0x01) + + ElementLine(0 25 75 25 10) + ElementLine(225 25 300 25 10) + + ElementLine(75 0 225 0 10) + ElementLine(225 0 225 50 10) + ElementLine(225 50 75 50 10) + ElementLine(75 50 75 0 10) + + # ElementArc(X1 Y 50 50 270 180 10) + # ElementArc(X2 Y 50 50 90 180 10) + + Mark(75 25) + ) + +9.1.3 Creating an Oldlib Footprint +---------------------------------- + +This section provides a complete example of defining a family of +footprints using the M4 style library. As a vehicle for this example, a +family of footprints for surface mount resistors and capacitors will be +developed. The file `example.inc' should have been installed on your +system as `$prefix/share/examples/oldlib/example.inc' where `$prefix' +is often times `/usr/local'. + + The `example.inc' file defines a macro called `COMMON_PKG_RCSMT' +which is a generic definition for a surface mount footprint with two +identical, rectangular pads. This macro will be called with different +parameters to fill out the family of parts. The arguments to the +`COMMON_PKG_RCSMT' are: + # ------------------------------------------------------------------- + # the definition for surface mount resistors and capacitors + # $1: canonical name + # $2: name on PCB + # $3: value + # $4: pad width (in direction perpendicular to part) + # $5: pad length (in direction parallel with part) + # $6: pad spacing (center to center) + # $7: distance from edge of pad to silk (in direction + # perpendicular to part) + # $8: distance from edge of pad to silk (in direction parallel + # with part) + # $9: Set to "no" to skip silk screen on the sides of the part + + define(`COMMON_PKG_RCSMT', + `define(`XMIN', `eval( -1*`$6'/2 - `$5'/2 - `$8')') + define(`XMAX', `eval( `$6'/2 + `$5'/2 + `$8')') + define(`YMIN', `eval(-1*`$4'/2 - `$7')') + define(`YMAX', `eval( `$4'/2 + `$7')') + Element(0x00 "$1" "$2" "$3" eval(XMIN+20) eval(YMAX+20) 0 100 0x00) + ( + ifelse(0, eval($4>$5), + # Pads which have the perpendicular pad dimension less + # than or equal to the parallel pad dimension + Pad(eval(-1*( $6 + $5 - $4)/2) 0 + eval((-1*$6 + $5 - $4)/2) 0 eval($4) "1" 0x100) + Pad(eval(-1*(-1*$6 + $5 - $4)/2) 0 + eval(( $6 + $5 - $4)/2) 0 eval($4) "2" 0x100) + , + # Pads which have the perpendicular pad dimension greater + # than or equal to the parallel pad dimension + Pad(eval(-1*$6/2) eval(-1*($4 - $5)/2) + eval(-1*$6/2) eval(($4 - $5)/2) eval($5) "1" 0x100) + Pad(eval( $6/2) eval(-1*($4 - $5)/2) + eval( $6/2) eval(($4 - $5)/2) eval($5) "2" 0x100) + ) + + # silk screen + # ends + ElementLine(XMIN YMIN XMIN YMAX 10) + ElementLine(XMAX YMAX XMAX YMIN 10) + # sides + ifelse($9,"no", + #skip side silk + , + ElementLine(XMIN YMIN XMAX YMIN 10) + ElementLine(XMAX YMAX XMIN YMAX 10) + ) + Mark(0 0) + )') + Note that the part has been defined with the mark located at `(0,0)' +and that the pads have been placed with the mark at the common centroid +of the footprint. While not a requirement, this is highly desirable +when developing a library that will need to interface with a pick and +place machine used for factory assembly of a board. + + The final part of `example.inc' defines particular versions of the +generic footprint we have created. These particular versions correspond +to various industry standard package sizes. + # 0402 package + # + # 30x30 mil pad, 15 mil metal-metal spacing=> + # 15 + 15 + 15 = 45 center-to-center + define(`PKG_RC0402', + `COMMON_PKG_RCSMT(`$1', `$2', `$3', 30, 30, 45, 0, 10, "no")') + + # 0603 package + # + # 40x40 mil pad, 30 mil metal-metal spacing=> + # 30 + 20 + 20 = 70 center-to-center + define(`PKG_RC0603', + `COMMON_PKG_RCSMT(`$1', `$2', `$3', 40, 40, 70, 10, 10)') + + # 1206 package + # + # 40x60 mil pad, 90 mil metal-metal spacing=> + # 90 + 20 + 20 = 130 center-to-center + define(`PKG_RC1206', + `COMMON_PKG_RCSMT(`$1', `$2', `$3', 60, 40, 130, 10, 10)') + + At this point, the `example.inc' file could be used by third party +tools such as `gsch2pcb'. However to fully integrate our footprints +into PCB we need to create the `example.m4' and `example.list' files. +The `example.m4' file defines descriptions for the new footprints. + define(`Description_my_RC0402', + ``Standard SMT resistor/capacitor (0402)'') + define(`Description_my_RC0603', + ``Standard SMT resistor/capacitor (0603)'') + define(`Description_my_RC1206', + ``Standard SMT resistor/capacitor (1206)'') + Finally we need to create the `example.list' file. + my_RC0402:RC0402:RES0402 + my_RC0402:RC0402:CAP0402 + my_RC0603:RC0603:RES0603 + my_RC0603:RC0603:CAP0603 + my_RC1206:RC1206:RES1206 + my_RC1206:RC1206:CAP1206 + The first field in the list file has the name corresponding to the +Description definitions in `example.m4'. The second field is the +template name which corresponds to the macros `PKG_*' we defined in +`example.inc' with the leading `PKG_' removed. It is the second field +which controls what footprint will actually appear on the board. The +final field is the name of the part type on the board. The first line +in our `example.list' file will produce a menu entry in the library +window that reads: + CAP0402, Standard SMT resistor/capacitor (0402) + The `CAP0402' portion comes directly from the third field in +`example.list' and the longer description comes from descriptions +macros in `example.m4'. Please note that any extra white space at the +end of a line in the `.list' files will cause them to not work properly. + +9.1.4 Troubleshooting Old Style Libraries +----------------------------------------- + +A powerful technique to help debug problems with libraries is to invoke +the `m4' processor directly. This approach will provide error output +which is not visible from within PCB. The following example shows how +one might try to debug an 8 pin small outline (SO8) package. The macro +name for the package is PKG_SO8. In this example, the canonical name +that is to be associated with the part is SO8, the reference designator +is U1, and the value is MAX4107 (the part number). + + echo "PKG_SO8(SO8, U1, MAX4107)" | \ + gm4 common.m4 - | \ + awk '/^[ \t]*$/ {next} {print}' | \ + more + The `awk' call simply removes blank lines which make the output hard +to read. + + For this particular example, the output is: + Element(0x00 "SO8" "U1" "MAX4107" 146 50 3 100 0x00) + ( + Pad(10 25 38 25 20 "1" 0x00) + Pad(10 75 38 75 20 "2" 0x100) + Pad(10 125 38 125 20 "3" 0x100) + Pad(10 175 38 175 20 "4" 0x100) + Pad(214 175 242 175 20 "5" 0x100) + Pad(214 125 242 125 20 "6" 0x100) + Pad(214 75 242 75 20 "7" 0x100) + Pad(214 25 242 25 20 "8" 0x100) + ElementLine(0 0 151 0 10) + ElementArc(126 0 25 25 0 180 10) + ElementLine(101 0 252 0 10) + ElementLine(252 0 252 200 10) + ElementLine(252 200 0 200 10) + ElementLine(0 200 0 0 10) + Mark(29 25) + ) + +9.2 New Style Libraries +======================= + +Footprints for the new style library are created graphically using the +PCB program. A single footprint is saved in each file. + +9.2.1 Creating Newlib Footprints +-------------------------------- + +To create + 1. Start PCB with an empty layout. + + 2. Make the component layer active. + + 3. For a leaded part, select the via tool and place vias where the + pads for the part should go. For surface mount pads, draw line + segments. Note that until the footprint is completed, the surface + mount pads will remain rounded. Currently a rectangle or polygon + may not be used as a pad. + + 4. For each via and line segment which will become a pad, select it + and press 'n' to be able to enter a name. Enter the pin number + and press enter. + + 5. Make the silk layer active. + + 6. Using the line and arc tools, draw a silk screen outline for the + part. + + 7. Using the selection tool, select all of the pins and silk screen + for the part. + + 8. Place the pointer above the reference point for the part. This is + typically the common centroid. Keeping the pointer there, + shift-right-click to bring up the popup menu and choose "convert + selection to element". + + 9. At this point, the vias, line segments, and silk screen will have + been converted to an element. To change any of the line segments + to have square ends rather than round ends, select the pads by + holding down the shift key and clicking each pad with the center + mouse button. Now under the Select menu, "Change square-flag of + selected objects" section, choose "Pins". + + 10. Select the element, shift-right-click to bring up the popup menu, + and choose "Copy Selection to Buffer". Now left-click on the + center of the new element. + + 11. Under the buffer menu, choose "save buffer elements to file" to + save the new footprint to a file. + + 12. Press ESC to exit from buffer mode. + +9.2.2 Modifying Newlib Footprints +--------------------------------- + + 1. In the `Pcb' program, instantiate the footprint you wish to modify. + + 2. Using the selection tool, select the footprint. + + 3. Now left-click on the selected element, this brings up a popup + menu, choose "Cut Selection to Buffer" from the popup menu. + + 4. Under the buffer menu, choose "break buffer element to pieces", + and then left-click to place the broken apart footprint to an open + area of the layout. Note that you must use the items under the + buffer menu, the items with the same names in the popup menu do + not work. + + 5. Make your desired modifications to the footprint and then convert + the pieces back to an element using the same procedure as when + starting from scratch on a new footprint. + + +File: pcb.info, Node: Schematic Frontends, Next: Installation, Prev: Library Creation, Up: Top + +10 Schematic Capture for PCB +**************************** + +When designing a circuit board of any complexity, a schematic capture +front-end for the design is highly desired. Any schematic capture +program which is able to generate a netlist in a user defined format as +well as a bill of materials can be made to work with PCB. Currently, we +are aware of two freely available schematic capture programs which can +interface with PCB. This chapter shows how a design can be taken from +start to finish using either of these two tools for schematic capture +and PCB for layout. + +* Menu: + +* gEDA:: Interfacing with GNU EDA (gEDA). +* xcircuit:: Interfacing with xcircuit. + + +File: pcb.info, Node: gEDA, Next: xcircuit, Up: Schematic Frontends + +10.1 gEDA +========= + +This section shows how to use gEDA as the schematic capture front-end +for a PCB design. This section is not intended to be complete +documentation on gEDA and it is assumed that the user has at least some +familiarity with the gEDA suite of programs. + + The basic steps in a gEDA + PCB design flow are: + 1. Set up project directories + + 2. Set up gEDA (gschem/gnetlist) config files + + 3. Set up gsch2pcb config files + + 4. Capture schematics using `gschem' (part of gEDA) + + 5. Create any unique PCB footprints needed for the design + + 6. Generate initial PCB design using `gsch2pcb' (part of gEDA) + + 7. Layout circuit board using `pcb' + + 8. Make any additional schematic changes with `gschem' and forward + annotate to PCB with `gsch2pcb' + + 9. Generate photoplot files (RS-274X, also known as "Gerber") for + board vendor + +10.1.1 Set Up Project Directories +--------------------------------- + +Although not required, a typical project directory will contain the +schematics and board layout at the top level. Schematic symbols and +circuit board footprints which are unique to this project are stored in +subdirectories. For this example, `sym' contains the project specific +schematic symbols and `pkg' contains the project specific footprints. +Set up the project subdirectory and subdirectories by executing: + mkdir ~/myproj + cd ~/myproj + mkdir sym + mkdir pkg + mkdir pkg/newlib + mkdir pkg/m4 + +10.1.2 Set Up gEDA Config Files +------------------------------- + +The gEDA tools, specifically `gschem' and `gnetlist', use configuration +files to set the search path for symbol libraries in addition to other +user preferences. Create a file in the top level project directory +called `gschemrc'. Add the following lines to that file: + + ;; list libraries here. Order matters as it sets the + ;; search order + (component-library "./sym") + This sets the local search path for the schematic capture program +`gschem'. Now the netlister, `gnetlist', must also be configured. +This can be done by copying the file `gschemrc' to `gnetlistrc' by +running `cp gschemrc gnetlistrc'. Alternatively, you can create a soft +link so only a single file needs to be updated if additional symbol +paths are added. The link is created by running `ln -s gschemrc +gnetlistrc'. + +10.1.3 Set Up `gsch2pcb' Config Files +------------------------------------- + +The program `gsch2pcb', not to be confused with the older `gschem2pcb' +script, is used to link the schematic to layout. `gsch2pcb' is +responsible for creating the netlist used to provide connectivity +information to PCB as well creating an initial layout with all +components instantiated in the design. Forward annotation of schematic +changes to the layout is also done using `gsch2pcb'. `gsch2pcb' uses a +project file to set up the schematic file names, PCB library locations, +and output file names. Create a project file called `project' using +the following as an example: + + # List all the schematics to be netlisted + # and laid out on the pc board. + schematics first.sch second.sch third.sch + + # For an output-name of foo, gsch2pcb generates files + # foo.net, foo.pcb, and foo.new.pcb. If there is no + # output-name specified, the file names are derived from + # the first listed schematic, i.e. first.net, etc. + output-name preamp + +10.1.4 Capture Schematics Using `gschem' +---------------------------------------- + +This section is fairly brief and assumes familiarity with using the +`gschem' schematic capture program. As you are creating your +schematics, be sure to observe the following rules: + * Make sure that each component in the schematic has a `footprint' + attribute that corresponds to a footprint in the PCB library or a + footprint you plan on creating. + + * Make sure all reference designators are unique. One way to ensure + this is to run the `refdes_renum' script (part of gEDA) after the + schematics are created. + +10.1.5 Create Any Unique PCB Footprints +--------------------------------------- + +Create the new footprints you design needs using either the m4 style or +newlib style of PCB libraries. Refer to *note Library Creation:: for +details on this process. For m4 style footprints, store them in the +`pkg/m4' subdirectory and for newlib footprints, store them in the +`pkg/newlib' subdirectory. + +10.1.6 Generate Initial PCB Design Using `gsch2pcb' +--------------------------------------------------- + +The `gsch2pcb' program connects the schematic and layout. It basic +operation is to call `gnetlist' to generate the connectivity netlist +that PCB used to verify connectivity and to instantiate all elements +found in the schematic to a new layout. The default, as of `gsch2pcb' +version 0.9, is to use any found m4 style parts first and then search +for newlib style if no old style part was found. By using the +`--use-files' or `-f' flag to `gsch2pcb' priority is given to newlib +style parts even if m4 style are found. You may wish to verify this in +the `gsch2pcb' documentation in case this changes in the future. To +start your layout, run `gsch2pcb project' where `project' is the +project file created previously. This will create a new netlist file, +`preamp.net', and a new layout file, `preamp.pcb'. + +10.1.7 Layout Circuit Board +--------------------------- + +Run PCB on the new layout by running `pcb preamp.pcb'. Load the +netlist file by selecting "load netlist file" from the "file" menu. In +the file selection dialog box, choose `preamp.net'. This loads +connectivity information into PCB. + + Using the selection tool, grab and move apart the various footprints +with the middle mouse button. Once the parts are moved apart from each +other, choose "optimize rats-nest" from the "Connects" menu. This menu +choice will display and optimize the rats nest. Use the rats nest to +help guide placement of the parts. You may wish to re-run the "optimize +rats-nest" command after moving parts around. + + After the placement is complete, use the line tool to add traces to +the board. As traces are added, the corresponding rats line will +disappear. + +10.1.8 Forward Annotation of Schematic Changes +---------------------------------------------- + +If schematic changes are made after the layout has started, `gsch2pcb' +can be used to forward annotate these changes to the layout. To +forward annotate schematic changes, run `gsch2pcb project'. This +command will create the files `preamp.new.pcb', `preamp.net', and +modify the file `preamp.pcb'. The modifications to `preamp.pcb' +include forward annotation of schematic component value changes, adds +any new components, and removes any deleted components. + +10.1.9 Generate Photoplot Files (RS-274X) +----------------------------------------- + +After the layout is complete, choose "edit layer-groupings" from the +"Settings" menu. The LayerGroups form lets you specify which layers +will appear in each output layer group. For example, in the default +form, layer group 1 has "front" and "front side" in it. The output +file `1.gbr' if DOS file names are used, or `somename_front.gbr' if +long file names are used will contain the "front" and "front side" +layers in it. Usually the defaults are sufficient, but this form is +still a useful reference. + + Choose "print layout..." from the "File" menu. In the print dialog +box, select "Gerber/RS-274X" for the device driver. Select the +"outline", "alignment", and "drillhelper" options. To get DOS +compatible file names, select the "DOS (8.3) names" option, otherwise +enter "preamp" for the filename. Press "OK". + + The following output files should have been created in the project +directory. The names in parentheses correspond to the DOS compatible +output file names. +`preamp_frontsilk.gbr (csilk.gbr)' + Top side silk screen. + +`preamp_frontmask.gbr (cmask.gbr)' + Top side soldermask relief. + +`preamp_front.gbr (1.gbr)' + Top copper. + +`preamp_backmask.gbr (smask.gbr)' + Bottom side soldermask relief. + +`preamp_back.gbr (2.gbr)' + Bottom Copper. + +`preamp_fab.gbr (fab.gbr)' + Fabrication drawing. Also known as the drill drawing. This + drawing is used for reference by the board vendor but is not + directly used in the fabrication process. + +`preamp_plated-drill.cnc (pdrill.cnc)' + NC Drill format file for the plated through holes. + +`preamp_unplated-drill.cnc (udrill.cnc)' + NC Drill format file for the unplated through holes. + +`preamp_bom.txt (bom.txt)' + A bill of materials for the layout. + +`preamp_xy.txt (xy.txt)' + Centroid (X-Y) data for driving automated assembly equipment. + + +File: pcb.info, Node: xcircuit, Prev: gEDA, Up: Schematic Frontends + +10.2 xcircuit +============= + +If anyone cares to contribute this section, it will get added. Please +submit changes to the bug tracking system for PCB which can be found +from the PCB homepage at `http://pcb.gpleda.org'. + + +File: pcb.info, Node: Installation, Next: Custom Menus, Prev: Schematic Frontends, Up: Top + +Appendix A Installation and Troubleshooting +******************************************* + +Compiling and installing the package should be straightforward. If any +problems occur, please contact the author , +or the current maintainer to find a +solution and include it into the next release. + +* Menu: + +* compiling:: Compiling and installing. +* problems:: Troubleshooting. + + +File: pcb.info, Node: compiling, Next: problems, Up: Installation + +A.1 Compiling and Installing +============================ + +This section covers the steps which are necessary to compile the +package. + +* Menu: + +* quickstart:: Quick start. +* running configure:: Customizing Pcb with Configure + + +File: pcb.info, Node: quickstart, Next: running configure, Up: compiling + +A.1.1 Quick Start +----------------- + +Starting with version 2.0, `Pcb' has switched to a GNU +autoconf/automake build system. Installation of `Pcb' consists of +three steps: configuration, building, and installing. In a typical +installation, these steps are as simple as + ./configure + make + make install + + +File: pcb.info, Node: running configure, Prev: quickstart, Up: compiling + +A.1.2 Running the configure Script +---------------------------------- + +The `configure' script accepts all of the standard GNU configure +options. For a complete list of configuration options, run +`./configure --help'. + +`INFOLIBDIR' + must be set to the directory where your GNU info files are located. + +`PCBLIBDIR' + is the path of a directory where the font files will be installed. + +`DEFAULTFONT' + the name of the default font file. + +`DEFAULTLIBRARY' + the name of the default library. + +`GNUM4' + the name of GNUs m4 version. + +`BTNMOD' + If your window manager has already bound _Mod1_ together with some + function keys you may want to change this setting. This is true + for HP-VUE. + + + If you find things which must be changed to compile on your system, +please add the appropriate autoconf tests (if you are familiar with +that) and mail a copy to the maintainer, harry eaton, at +. + + If you do not have the appropriate permissions you should run +`./pcbtest.sh' in the `src' directory to run `Pcb' from the +installation directory. + + +File: pcb.info, Node: problems, Prev: compiling, Up: Installation + +A.2 Troubleshooting +=================== + +There are some known problems. Most of them are related to missing +parts of a standard `X11' distribution. Some others are caused by third +party applications such as `X' servers. To make this list more complete +please mail your problems and, if available, solutions to the author. +The mail address may be found at the beginning of this chapter. In any +case, read *note X11::. + + By the way, you `MUST HAVE AN ANSI COMPILER' to make `Pcb' work. + + Another source of problems are older versions of `flex' and `bison'. +`Pcb' definitely works with `flex-2.4.7' and `bison-1.22' or later. The +problems will result in a _syntax error_ while parsing files. This +should only be a problem if you have modified the `flex' or `bison' +input files. + + The following list gives you just an idea because I'm not able to +test all `Pcb' releases on all platforms. + +* Menu: + +* HP:: Hewlett-Packard series 700 and 800 running HP-UX 10.* +* Sun:: Sun, Solaris 2.5 +* SGI:: SGI, IRIX 5.3 and 6.* +* DEC Alpha:: DEC Alpha, DEC UNIX 3.2c and 4.0 +* SCO:: SCO Unix ODT 3.0, PC hardware +* Linux:: Linux 0.99pl14 and later +* BSD:: FreeBSD, NetBSD ... +* X11:: Refers to `X11R4', `X11R5', and `OpenWindows' +* TeX and Manuals:: Problems creating the `pcb.dvi' + + +File: pcb.info, Node: HP, Next: Sun, Up: problems + +A.2.1 HP Series 700 and 800 +--------------------------- + +You have to install several `X11' include files or, better, install a +complete `X11R5' release. Hewlett-Packard doesn't support the Athena +Widgets. So the header files and libraries are missing from the +application media, but they are available as a patch. They also do not +ship the `ANSI' compiler with the normal operating system release so +you have to buy one or use `GCC'. Some of the tools are available as +patches. + + In addition, `Pcb' has been successfully tested on these platforms +with `HPUX 9.*, 10.*' running self-compiled `X11R5'. + + +File: pcb.info, Node: Sun, Next: SGI, Prev: HP, Up: problems + +A.2.2 Sun SPARC architecture +---------------------------- + +There are no known problems with Sun machines if they use `X11R5' +instead of `OpenWindows'. `Pcb' compiled successfully with all kinds of +SPARCstations `Solaris-2.[345]'. + + For problems with `OpenWindows' refer to *note X11::. + + +File: pcb.info, Node: SGI, Next: DEC Alpha, Prev: Sun, Up: problems + +A.2.3 Silicon Graphics +---------------------- + +`Pcb' has been tested on some boxes running either `IRIX-4.0.5' or +`IRIX-5.3'. The former one uses a `X11R4' server. There are no +problems. For known problems with `X11R4', see *note X11::. + + +File: pcb.info, Node: DEC Alpha, Next: SCO, Prev: SGI, Up: problems + +A.2.4 DEC Alpha +--------------- + +`Pcb' compiled and runs without problems on `DEC UNIX V3.2c'. + + +File: pcb.info, Node: SCO, Next: Linux, Prev: DEC Alpha, Up: problems + +A.2.5 SCO Unix +-------------- + +John DuBois wrote: + `SCO-ODT-3.0' requires the latest version of tls003, the Athena + widget library (available from sosco.sco.com). The main problems + I have encountered are it core dumps fairly often, especially + while loading/dropping elements... + I'll see what I am able to do as soon as I have access to an `SCO' +system. + + +File: pcb.info, Node: Linux, Next: BSD, Prev: SCO, Up: problems + +A.2.6 Linux +----------- + +Since the `X11' version of `Pcb' has been developed on a Linux system +here are no known problems. + + +File: pcb.info, Node: BSD, Next: X11, Prev: Linux, Up: problems + +A.2.7 FreeBSD and NetBSD +------------------------ + +`Pcb' has been tested on NetBSD and works without any problems. You +may also be able to find a NetBSD package at +`ftp://ftp.netbsd.org/pub/NetBSD/packages/cad/pcb/README.html' or a +FreeBSD port at +`http://www.freebsd.org/cgi/url.cgi?ports/cad/pcb/pkg-descr'. + + +File: pcb.info, Node: X11, Next: TeX and Manuals, Prev: BSD, Up: problems + +A.2.8 Problems related to X11 +----------------------------- + +There are a some problems related to `X11R4' or systems derived from +`X11' such as `OpenWindows'. *Note Sun::. You at least have to change +all occurances of _baseTranslations_ in the resource files to +_translations_ if you are using a `X11R4' server. Look at the `X11R5' +_Intrinsics_ manual for details. + + The panner widget (print dialog box) appears only in release `X11R5' +and later. It really simplifies adjusting the offsets. With earlier +releases the printout will always appear in the center of the page. + + You may have some problems in a mixed `X11-OpenWindows' environment. + + `Pcb' has been tested successfully with `X11R6' under Linux 1.1.59 +and later. + + +File: pcb.info, Node: TeX and Manuals, Prev: X11, Up: problems + +A.2.9 Problems related to TeX +----------------------------- + +If your `TeX' installation complains about a missing `texinfo.tex' file +copy the one included in this release (directory `doc' to your `TeX' +macro directory. Note, there are probably newer versions of this file +available from some FTP sites. `TeX-3.0' failed, `TeX-3.14' worked +just fine. Check our FTP server _ftp.uni-ulm.de_ for ready-to-print +versions of the manuals. + + +File: pcb.info, Node: Custom Menus, Next: Regular Expressions, Prev: Installation, Up: Top + +Appendix B Customizing the Menus +******************************** + +The menu system is driven off a data file that contains "resources". A +resource is a hierarchical description of a data tree which, in this +case, is mapped to the hierarchical menus used by Pcb. + +* Menu: + +* Resource Syntax:: What a resource file looks like. +* Menu Definitions:: Using a resource to define a menu. +* Menu Files and Defaults:: Where Pcb looks for its menu resource. + + +File: pcb.info, Node: Resource Syntax, Next: Menu Definitions, Up: Custom Menus + +B.1 Resource Syntax +=================== + +A resource file is a simple text file. It contains curly braces to +group things, spaces between things, and double quotes when strings +need to include spaces. There are four fundamental ways of adding data +to a resource. + + First, a string (either a single word or a quoted string with spaces, +we call both "strings" in this appendix) can be added all by itself, to +add a string resource to the current resource. This is used, for +example, to define the string printed on a menu button. In this +example, four strings are added to the FILE resource: + + File = { + Sample + "longer sample" + some text + } + + Second, a named string may be added by giving two strings separated +by an equals sign. This is used to specify X resources and a few other +optional parameters of menus, for example. Note that a string all by +itself is thus an "unnamed" string. + + {"Layer groups" foreground=red sensitive=false} + + Third, an unnamed subresource may be added. This is used to create +submenus and menu buttons. To add a subresource, simply group other +things in curly braces. This example describes a resource containing +one string and three subresources: + + {File + {New do_new()} + {Save do_save()} + {Quit do_quit()} + } + + Lastly, a named subresource may be added by prefixing an unnamed +subresource with a string and an equals sign, just as when naming +strings. This syntax is used to name the resources used for the main +menu and popup menus: + + MainMenu = { + ... + } + + Additionally, the menu parser allows for "hooks" whereby portions of +the menu system can be programmatically created at runtime by the +application. These hooks are invoked by a single word proceeded by an +at sign, such as this example where most of the Sizes menu is created +automatically: + + {Sizes + @sizes + {"Adjust active sizes ..." AdjustStyle(0)} + } + + In addition to all that, any unquoted pound sign (`#') begins a +comment. Commented text continues until the end of the containing +line. Comments may begin at the beginning of a line, or after other +text on the line: + + # This is a comment + MainMenu = { # This is also a comment + + +File: pcb.info, Node: Menu Definitions, Next: Menu Files and Defaults, Prev: Resource Syntax, Up: Custom Menus + +B.2 Menu Definitions +==================== + +To best understand this section, you should find the `pcb-menu.res' +file that your Pcb uses and refer to it for examples (*note Menu Files +and Defaults::). Note that the lesstif GUI uses `pcb-menu.res' and the +GTK+ GUI uses `gpcb-menu.res'. The file format is identical however +and if so desired, one can make one file be a soft link to the other. + + A resource defines a menu when it meets certain semantic +requirements. The menu hierarchy is reflected as a hierarchy of unnamed +subresources, with the first string of each subresource defining the +label used for the menu button. A subresource that itself contains +subresources becomes a submenu, a subresource that does not becomes a +button. + + A submenu should only contain subresources for the buttons or +submenus within that submenu. Two exceptions are allowed: an initial +string sets the label, and the string "-" (a single dash) will create a +separator. + + A button should not contain subresources, but will contain many +strings, named and unnamed. The first member shall be an unnamed +string which is the label for the button. Any other unnamed strings +within the button's resource will be used as actions (much like the +.Xdefaults action strings), which are functions that will be called +when the button is pressed (or popped up, or created, depending on the +action). As a convenience, if a left parenthesis is seen, the current +"word" will continue at least until the matching right parenthesis. +This allows you to pass strings with spaces as arguments to actions +without needing to quote the action. + + Named resources in button resources will be used as X resources. +Such resources can be used to set the font, color, and spacing of +buttons. As a convenience, "fg" can be used as an abbreviation for +"foreground". + + Within the menu's resource file, Pcb will look for a few key named +subresources. At the moment, the only one it looks for is one called +`MainMenu'. This will be used for the main menu bar. In the future, +other named subresources will be used for popup resources. + + Given all this, a small sample `pcb-menu.res' would be: + + MainMenu = { + {File + {"Load layout" Load(Layout)} + - + {"Quit Program" Quit() fg=red font=10x20} + } + } + + Within the Pcb sources are specially crafted comments that mark all +the actions, flags, menu hooks, and whatnot that Pcb offers. Read the +file `src/gather-actions' in the Pcb source tree for documentation for +these comments. + + +File: pcb.info, Node: Menu Files and Defaults, Prev: Menu Definitions, Up: Custom Menus + +B.3 Menu Files and Defaults +=========================== + +Pcb will look for a file which defines its menus, trying the following +names (the example is for the lesstif GUI, the GTK+ GUI has +"gpcb-menu.res" in place of "pcb-menu.res"): + + ./pcb-menu.res + $HOME/.pcb-menu.res + $PCBLIBDIR/pcb-menu.res + + + Note that PCBLIBDIR defaults to `/usr/local/share/pcb' (hence, +`/usr/local/share/pcb/pcb-menu.res'). The `' entry refers to +a menu definition within the Pcb application itself. The master file +for all this is the file `src/pcb-menu.res' in the Pcb source tree. +This master source is used to create the internal menu definition as +well as being installed in `$pcblibdir'. + + +File: pcb.info, Node: Regular Expressions, Next: Standard Drill Sizes, Prev: Custom Menus, Up: Top + +Appendix C Element Search/Regular Expressions +********************************************* + +C.1 Element Search/Regular Expressions +====================================== + +`Pcb''s search is based on POSIX 1003.2 Regular Expressions. Full POSIX +Regular Expressions are supported by `Pcb' if the regex library was +available when `Pcb' was built. One difference from the regular +expressions found in tools like awk or grep is that PCB implicitly adds +a "^" to the begining of a regular expression and "$" to the end of the +regular expression. For example, if you enter "C1", the actual regular +expression used internally is "^C1$". Another difference is that +search patterns in pcb are not case sensitive. That is, "CON" is +treated the same as "con". + + It is easier to show by example how to search than explain POSIX +1003.2. With regular expressions most characters are just themselves, +but some are special: + +`*' + Matches 0 or more instances of preceding character. + +`+' + Matches 1 or more instances of preceding character. + +`?' + Matches 0 or 1 instances of preceding character. + +`.' + Matches any single character other than the newline character. + +`|' + The vertical bar is the alternation operator. It combines two + regular expressions. The result matches if either of them matches. + +`\' + A backslash indicates the next character should not be interpreted + literally if it normally is, and should be interpreted literally + if it normally isn't. + +`{n}' + An integer n enclosed in curly brackets matches the preceding item + if it occurs exactly n times. + +`[ ]' + A pair of square brackets matches every character they contain. + Characters may be given explicitly, or as ranges. + +`-' + A hyphen in the context of square brackets denotes the range + between the preceding and the following character. E.g., the + range of digits is "0-9" . The range of letters from C to K is + "C-K" . + +`\^ inside square brackets' + Inside square brackets the caret is an anti operator. Its presence + makes the square prackets match anything except the contents of + the brackets. + +`( )' + Round parenthesis group parts of a regular expression. This is + very much like they do in math formulars. + + + If you need a special character literally, you can escape it with a +backslash. + + The following examples illustrate how regular expressions can be +used to specify element names (reference designators) to search for. +`C5' + Select the element whose name is exactly "C5". + +`C5 | R3' + Select C5 and R3. + +`C.*' + Select all elements whose name start with the letter "C", such as + C5, or C42, or CF1. + +`C.*1' + Select all elements that start with "C" and end with "1", such as + C1, or C51 or C5/9B71. + +`R10?' + Search for R1 or R10, but will not select R100 or R105. The + question mark is a quantifier for the character "0". + +`R128+' + Selects R128, R1288, R12888, etc. + +`TB.' + Select all terminal blocks having exactly one character designator + after "TB" such as TB1, TBA, or TBx but not TB. + +`TB..' + Select all terminal blocks having a two character designator such + as TB21 or TB1a. + +`TB.*' + Select all terminal blocks with any designator. + +`.*31' + Select all items, whose name ends with "31" such as Q31, or R31, + or R531. + +`Q[12]' + Select Q1 and Q2. + +`[A-D].*' + Select all items, whose name starts with "A", "B", "C", or "D". + +`.*N{2}.*' + Select all items, whose name contains two "N" in a row such as + CONN23, or connA, but not CON5 + +`[^D].*' + Select all items that do not start with the letter "D", such as + C2, or R34, but not D34 + + + +File: pcb.info, Node: Standard Drill Sizes, Next: Centroid File Format, Prev: Regular Expressions, Up: Top + +Appendix D Standard Drill Size Tables +************************************* + +D.1 American Standard Wire Size Drills +====================================== + +Drill Diameter Drill Diameter Drill Diameter +Size (inches) Size (inches) Size (inches) +97 .0059 96 .0063 95 .0067 +94 .0071 93 .0075 92 .0079 +91 .0083 90 .0087 89 .0091 +88 .0095 87 .0100 86 .0105 +85 .0110 84 .0115 83 .0120 +82 .0125 81 .0130 80 .0135 +79 .0145 78 .0160 77 .0180 +76 .0200 75 .0210 74 .0225 +73 .0240 72 .0250 71 .0260 +70 .0280 69 .0292 68 .0310 +67 .0320 66 .0330 65 .0350 +64 .0360 63 .0370 62 .0380 +61 .0390 60 .0400 59 .0410 +58 .0420 57 .0430 56 .0465 +55 .0520 54 .0550 53 .0595 +52 .0635 51 .0670 50 .0700 +49 .0730 48 .0760 47 .0785 +46 .0810 45 .0820 44 .0860 +43 .0890 42 .0935 41 .0960 +40 .0980 39 .0995 38 .1015 +37 .1040 36 .1065 35 .1100 +34 .1110 33 .1130 32 .1160 +31 .1200 30 .1285 29 .1360 +28 .1405 27 .1440 26 .1470 +25 .1495 24 .1520 23 .1540 +22 .1570 21 .1590 20 .1610 +19 .1660 18 .1695 17 .1730 +16 .1770 15 .1800 14 .1820 +13 .1850 12 .1890 11 .1910 +10 .1935 9 .1960 8 .1990 +7 .2010 6 .2040 5 .2055 +4 .2090 3 .2130 2 .2210 +1 .2280 + +D.2 American Standard Letter Size Drills +======================================== + +Drill Diameter Drill Diameter Drill Diameter +Size (inches) Size (inches) Size (inches) +A .2340 B .2380 C .2420 +D .2460 E .2500 F .2570 +G .2610 H .2660 I .2720 +J .2770 K .2810 L .2900 +M .2950 N .3020 O .3160 +P .3230 Q .3320 R .3390 +S .3480 T .3580 U .3680 +V .3770 W .3860 X .3970 +Y .4040 Z .4130 + +D.3 Fractional Inch Size Drills +=============================== + +Drill Diameter Drill Diameter Drill Diameter +Size (inches) Size (inches) Size (inches) +1/64 .0156 1/32 .0313 3/64 .0469 +1/16 .0625 5/64 .0781 3/32 .0938 +7/64 .1094 1/8 .1250 9/64 .1406 +5/32 .1562 11/64 .1719 3/16 .1875 +13/64 .2031 7/32 .2188 15/64 .2344 +1/4 .2500 17/64 .2656 9/32 .2812 +19/64 .2969 5/16 .3125 21/64 .3281 +11/32 .3438 23/64 .3594 3/8 .3750 +25/64 .3906 13/32 .4062 27/64 .4219 +7/16 .4375 29/64 .4531 15/32 .4688 +31/64 .4844 1/2 .5000 33/64 .5156 +17/32 .5313 35/64 .5469 9/16 .5625 +37/64 .5781 19/32 .5938 39/64 .6094 +5/8 .6250 41/64 .6406 21/32 .6562 +43/64 .6719 11/16 .6875 45/64 .7031 +23/32 .7188 47/64 .7344 3/4 .7500 +49/64 .7656 25/32 .7812 51/64 .7969 +13/16 .8125 53/64 .8281 27/32 .8438 +55/64 .8594 7/8 .8750 57/64 .8906 +29/32 .9062 59/64 .9219 15/16 .9375 +61/64 .9531 31/32 .9688 63/64 .9844 +1 1.0000 + +D.4 Metric Drills +================= + +Drill Diameter Drill Diameter Drill Diameter +Size (inches) Size (inches) Size (inches) +0.20 mm .00787 0.25 mm .00984 0.30 mm .0118 +0.35 mm .0138 0.40 mm .0158 0.45 mm .0177 +0.50 mm .0197 0.55 mm .0217 0.60 mm .0236 +0.65 mm .0256 0.70 mm .0276 0.75 mm .0295 +0.80 mm .0315 0.85 mm .0335 0.90 mm .0354 +0.95 mm .0374 1.00 mm .0394 1.05 mm .0413 +1.10 mm .0433 1.15 mm .0453 1.20 mm .0472 +1.25 mm .0492 1.30 mm .0512 1.35 mm .0531 +1.40 mm .0551 1.45 mm .0571 1.50 mm .0591 +1.55 mm .0610 1.60 mm .0630 1.65 mm .0650 +1.70 mm .0669 1.75 mm .0689 1.80 mm .0709 +1.85 mm .0728 1.90 mm .0748 1.95 mm .0768 +2.00 mm .0787 2.05 mm .0807 2.10 mm .0827 +2.15 mm .0846 2.20 mm .0866 2.25 mm .0886 +2.30 mm .0906 2.35 mm .0925 2.40 mm .0945 +2.45 mm .0965 2.50 mm .0984 2.55 mm .1004 +2.60 mm .1024 2.65 mm .1043 2.70 mm .1063 +2.75 mm .1083 2.80 mm .1102 2.85 mm .1122 +2.90 mm .1142 2.95 mm .1161 3.00 mm .1181 +3.10 mm .1220 3.15 mm .1240 3.20 mm .1260 +3.25 mm .1280 3.30 mm .1299 3.40 mm .1339 +3.50 mm .1378 3.60 mm .1417 3.70 mm .1457 +3.75 mm .1476 3.80 mm .1496 3.90 mm .1535 +4.00 mm .1575 4.10 mm .1614 4.20 mm .1654 +4.25 mm .1673 4.30 mm .1693 4.40 mm .1732 +4.50 mm .1772 4.60 mm .1811 4.70 mm .1850 +4.75 mm .1870 4.80 mm .1890 4.90 mm .1929 +5.00 mm .1969 5.10 mm .2008 5.20 mm .2047 +5.25 mm .2067 5.30 mm .2087 5.40 mm .2126 +5.50 mm .2165 5.60 mm .2205 5.70 mm .2244 +5.75 mm .2264 5.80 mm .2283 5.90 mm .2323 +6.00 mm .2362 6.10 mm .2402 6.20 mm .2441 +6.25 mm .2461 6.30 mm .2480 6.40 mm .2520 +6.50 mm .2559 6.60 mm .2598 6.70 mm .2638 +6.75 mm .2657 6.80 mm .2677 6.90 mm .2717 +7.00 mm .2756 7.10 mm .2795 7.20 mm .2835 +7.25 mm .2854 7.30 mm .2874 7.40 mm .2914 +7.50 mm .2953 7.60 mm .2992 7.70 mm .3031 +8.00 mm .3150 8.10 mm .3189 8.20 mm .3228 +8.25 mm .3248 8.30 mm .3268 8.40 mm .3307 +8.50 mm .3346 8.60 mm .3386 8.70 mm .3425 +8.75 mm .3445 8.80 mm .3465 8.90 mm .3504 +9.00 mm .3543 9.10 mm .3583 9.20 mm .3622 +9.25 mm .3642 9.30 mm .3661 9.40 mm .3701 +9.50 mm .3740 9.60 mm .3780 9.70 mm .3819 +9.75 mm .3839 9.80 mm .3858 9.90 mm .3898 +10.00 mm .3937 10.10 mm .3976 10.20 mm .4016 +10.25 mm .4035 10.30 mm .4055 10.40 mm .4094 +10.50 mm .4134 10.60 mm .4173 10.70 mm .4213 +10.80 mm .4252 10.90 mm .4291 11.00 mm .4331 +11.10 mm .4370 11.20 mm .4409 11.25 mm .4429 +11.30 mm .4449 11.40 mm .4488 11.50 mm .4528 +11.60 mm .4567 11.70 mm .4606 11.75 mm .4626 +11.80 mm .4646 11.90 mm .4685 12.00 mm .4724 +12.50 mm .4921 13.00 mm .5118 13.50 mm .5315 +14.00 mm .5512 14.50 mm .5709 15.00 mm .5906 +15.50 mm .6102 16.00 mm .6299 16.50 mm .6496 +17.00 mm .6693 17.50 mm .6890 18.00 mm .7087 +18.50 mm .7283 19.00 mm .7480 19.50 mm .7677 +20.00 mm .7874 20.50 mm .8071 21.00 mm .8268 +21.50 mm .8465 22.00 mm .8661 22.50 mm .8858 +23.00 mm .9055 23.50 mm .9252 24.00 mm .9449 +24.50 mm .9646 25.00 mm .9843 + + +File: pcb.info, Node: Centroid File Format, Next: Action Reference, Prev: Standard Drill Sizes, Up: Top + +Appendix E Centroid (X-Y) File Format +************************************* + +E.1 Overview +============ + +E.2 File Format +=============== + +The centroid output file is in a standard comma seperated values (CSV) +format. Comment lines begin with a "#". The output file contains a +header with an RCS Id tag (useful for those who will check the file +into a version control system), a version number for the file format, +some comments containing the author and title of the board, and a +comment describing the remainder of the file format. + + An example centroid file is shown below. + + + # $Id$ + # PcbXY Version 1.0 + # Date: Fri Jul 22 03:40:08 2005 UTC + # Author: PCB User + # Title: MyBoard - PCB X-Y + # RefDes, Description, Value, X, Y, rotation, top/bottom + # X,Y in mils. rotation in degrees. + # -------------------------------------------- + R61,"0603","10",2610.00,3560.00,90,top + J5,"AMPHENOL_ARFX1231","unknown",2390.00,4220.00,180,top + C13,"0402","0.01u",2340.00,3014.00,270,top + +E.3 Computation of Centroid and Rotation +======================================== + +The center of each element is found by averaging the (X,Y) coordinates +for the center of each pin and pad in the element. For example if an +element has 2 pins, 1 at (1,0) and another at (1,4) then the centroid +will be at (1,2). + + The calculation of rotation is a bit more complex. Currently a +rotation is not stored for each element but rather the rotated element +is stored. In other words if the element from the library has a pin at +(0,0) and (0,2) and it has been rotated by 90 degrees, then the `.pcb' +file will store (0,0) and (2,0) for the pin locations with no +indication that they have been rotated from the original. + + In the event that the element has only 1 pin, then the rotation is +set to zero. If the element has only one pad (as opposed to a +through-hole pin), then the rotation of the pad is used. + + When the element has multiple pins, the location of pin #1 is placed +in the coordinate system which has the centroid of the part at (0,0). +Then which quadrant pin #1 falls in determines the rotation. Zero +degrees of rotation is defined as pin #1 being in the upper left +quadrant. Increasing angles correspond to counterclockwise rotation so +a rotation of 90 degrees places pin #1 in the lower left quadrant. +Currently, the only allowed rotations are 0, 90, 180, and 270 degrees. + + If pin #1 happens to be at the centroid of the part, then pin #2 is +examined to see which quadrant it is located in. The same rules apply +for the definitions of rotation. In other words, when pin #1 is at the +centroid of the part and pin #2 is in the upper left quadrant, the +rotation is declared to be zero degrees. + + +File: pcb.info, Node: Action Reference, Next: Glossary, Prev: Centroid File Format, Up: Top + +Appendix F Action Reference +*************************** + +Many actions take a `delta' parameter as the last parameter, which is +an amount to change something. That `delta' may include units, as an +additional parameter, such as `Action(Object,5,mm)'. If no units are +specified, the default is PCB's native units (currently 1/100 mil). +Also, if the delta is prefixed by `+' or `-', the size is increased or +decreased by that amount. Otherwise, the size size is set to the given +amount. + + Action(Object,5,mil) + Action(Object,+0.5,mm) + Action(Object,-1) + + Actions which take a `delta' parameter which do not accept all these +options will specify what they do take. + + Many actions act on indicated objects on the board. They will have +parameters like `ToggleObject' or `SelectedVias' to indicate what group +of objects they act on. Unless otherwise specified, these parameters +are defined as follows: + +`Object' +`ToggleObject' + Affects the object under the mouse pointer. If this action is + invoked from a menu or script, the user will be prompted to click + on an object, which is then the object affected. + +`Selected' +`SelectedObjects' + Affects all objects which are currently selected. At least, all + selected objects for which the given action makes sense. + +`SelectedPins' +`SelectedVias' +`SelectedTYPE' +`etc' + Affects all objects which are both selected and of the TYPE + specified. + + +* Menu: + +* core actions:: +* common actions:: +* gtk actions:: +* lesstif actions:: + + +File: pcb.info, Node: core actions, Next: common actions, Up: Action Reference + +F.1 Core actions +================ + +* Menu: + +* AddRats Action:: Add one or more rat lines to the board. +* ApplyVendor Action:: Applies the currently loaded vendor drill table to the current design. +* Atomic Action:: Save or restore the undo serial number. +* Attributes Action:: Let the user edit the attributes of the layout, current or given +layer, or selected element. +* AutoPlaceSelected Action:: Auto-place selected components. +* AutoRoute Action:: Auto-route some or all rat lines. +* ChangeClearSize Action:: Changes the clearance size of objects. +* ChangeDrillSize Action:: Changes the drilling hole size of objects. +* ChangeFlag Action:: Sets or clears flags on objects. +* ChangeHole Action:: Changes the hole flag of objects. +* ChangeJoin Action:: Changes the join (clearance through polygons) of objects. +* ChangeName Action:: Sets the name of objects. +* ChangeOctagon Action:: Changes the octagon-flag of pins and vias. +* ChangePaste Action:: Changes the no paste flag of objects. +* ChangePinName Action:: Sets the name of a specific pin on a specific element. +* ChangeSize Action:: Changes the size of objects. +* ChangeSquare Action:: Changes the square flag of pins and pads. +* ClearOctagon Action:: Clears the octagon-flag of pins and vias. +* ClearSquare Action:: Clears the square-flag of pins and pads. +* ClrFlag Action:: Clears flags on objects. +* Connection Action:: Searches connections of the object at the cursor position. +* Delete Action:: Delete stuff. +* DeleteRats Action:: Delete rat lines. +* DisableVendor Action:: Disables automatic drill size mapping. +* DisperseElements Action:: Disperses elements. +* Display Action:: Several display-related actions. +* djopt Action:: Perform various optimizations on the current board. +* DRC Action:: Invoke the DRC check. +* DumpLibrary Action:: Display the entire contents of the libraries. +* elementlist Action:: Adds the given element if it doesn't already exist. +* elementsetattr Action:: Sets or clears an element-specific attribute. +* EnableVendor Action:: Enables automatic drill size mapping. +* execcommand Action:: Runs a command. +* ExecuteFile Action:: Run actions from the given file. +* Flip Action:: Flip an element to the opposite side of the board. +* FontEdit Action:: Convert the current font to a PCB for editing. +* FontSave Action:: Convert the current PCB back to a font. +* FreeRotateBuffer Action:: Rotates the current paste buffer contents by the specified angle. The +angle is given in degrees. If no angle is given, the user is prompted +for one. + +* GlobalPuller Action:: Pull all traces tight. +* h Action:: Print a help message for commands. +* Import Action:: Import schematics. +* l Action:: Loads layout data. +* le Action:: Loads an element into the current buffer. +* LoadFootprint Action:: Loads a single footprint by name. +* LoadFrom Action:: Load layout data from a file. +* LoadVendorFrom Action:: Loads the specified vendor resource file. +* m Action:: Loads a layout into the current buffer. +* MarkCrosshair Action:: Set/Reset the Crosshair mark. +* Message Action:: Writes a message to the log window. +* MinClearGap Action:: Ensures that polygons are a minimum distance from objects. +* MinMaskGap Action:: Ensures the mask is a minimum distance from pins and pads. +* Mode Action:: Change or use the tool mode. +* MorphPolygon Action:: Converts dead polygon islands into separate polygons. +* MoveLayer Action:: Moves/Creates/Deletes Layers. +* MoveObject Action:: Moves the object under the crosshair. +* MoveToCurrentLayer Action:: Moves objects to the current layer. +* Netlist Action:: Perform various actions on netlists. +* New Action:: Starts a new layout. +* OptAutoOnly Action:: Toggles the optimize-only-autorouted flag. +* PasteBuffer Action:: Various operations on the paste buffer. +* Polygon Action:: Some polygon related stuff. +* Puller Action:: Pull an arc-line junction tight. +* q Action:: Quits the application after confirming. +* q! Action:: Quits the application without confirming. +* Quit Action:: Quits the application after confirming. +* Redo Action:: Redo recent``undo''operations. +* RemoveSelected Action:: Removes any selected objects. +* Renumber Action:: Renumber all elements. The changes will be recorded to filename +for use in backannotating these changes to the schematic. +* Report Action:: Produce various report. +* ReportDialog Action:: Report on the object under the crosshair +* RipUp Action:: Ripup auto-routed tracks, or convert an element to parts. +* rn Action:: Reads netlist. +* RouteStyle Action:: Copies the indicated routing style into the current sizes. +* s Action:: Saves layout data. +* SaveSettings Action:: Saves settings. +* SaveTo Action:: Saves data to a file. +* Select Action:: Toggles or sets the selection. +* SetFlag Action:: Sets flags on objects. +* SetOctagon Action:: Sets the octagon-flag of objects. +* SetSame Action:: Sets current layer and sizes to match indicated item. +* SetSquare Action:: sets the square-flag of objects. +* SetThermal Action:: Set the thermal (on the current layer) of pins or vias to the given style. +Style = 0 means no thermal. +Style = 1 has diagonal fingers with sharp edges. +Style = 2 has horizontal and vertical fingers with sharp edges. +Style = 3 is a solid connection to the plane.Style = 4 has diagonal fingers with rounded edges. +Style = 5 has horizontal and vertical fingers with rounded edges. + +* SetValue Action:: Change various board-wide values and sizes. +* ToggleHideName Action:: Toggles the visibility of element names. +* ToggleVendor Action:: Toggles the state of automatic drill size mapping. +* Undo Action:: Undo recent changes. +* UnloadVendor Action:: Unloads the current vendor drill mapping table. +* Unselect Action:: Unselects the object at the pointer location or the specified objects. +* w Action:: Saves layout data. +* wq Action:: Saves the layout data and quits. + + +File: pcb.info, Node: AddRats Action, Next: ApplyVendor Action, Up: core actions + +F.1.1 AddRats +------------- + +AddRats(AllRats|SelectedRats|Close) + +Add one or more rat lines to the board. + +`AllRats' + Create rat lines for all loaded nets that aren't already connected + on with copper. + +`SelectedRats' + Similarly, but only add rat lines for nets connected to selected + pins and pads. + +`Close' + Selects the shortest unselected rat on the board. + + + +File: pcb.info, Node: ApplyVendor Action, Next: Atomic Action, Prev: AddRats Action, Up: core actions + +F.1.2 ApplyVendor +----------------- + +ApplyVendor() + +Applies the currently loaded vendor drill table to the current design. + + This will modify all of your drill holes to match the list of allowed +sizes for your vendor. + + +File: pcb.info, Node: Atomic Action, Next: Attributes Action, Prev: ApplyVendor Action, Up: core actions + +F.1.3 Atomic +------------ + +Atomic(Save|Restore|Close|Block) + +Save or restore the undo serial number. + + This action allows making multiple-action bindings into an atomic +operation that will be undone by a single Undo command. For example, +to optimize rat lines, you'd delete the rats and re-add them. To group +these into a single undo, you'd want the deletions and the additions to +have the same undo serial number. So, you `Save', delete the rats, +`Restore', add the rats - using the same serial number as the deletes, +then `Block', which checks to see if the deletions or additions +actually did anything. If not, the serial number is set to the saved +number, as there's nothing to undo. If something did happen, the +serial number is incremented so that these actions are counted as a +single undo step. + +`Save' + Saves the undo serial number. + +`Restore' + Returns it to the last saved number. + +`Close' + Sets it to 1 greater than the last save. + +`Block' + Does a Restore if there was nothing to undo, else does a Close. + + + +File: pcb.info, Node: Attributes Action, Next: AutoPlaceSelected Action, Prev: Atomic Action, Up: core actions + +F.1.4 Attributes +---------------- + +Attributes(Layout|Layer|Element) +Attributes(Layer,layername) + +Let the user edit the attributes of the layout, current or given layer, +or selected element. + + This just pops up a dialog letting the user edit the attributes of +the pcb, an element, or a layer. + + +File: pcb.info, Node: AutoPlaceSelected Action, Next: AutoRoute Action, Prev: Attributes Action, Up: core actions + +F.1.5 AutoPlaceSelected +----------------------- + +AutoPlaceSelected() + +Auto-place selected components. + + Attempts to re-arrange the selected components such that the nets +connecting them are minimized. Note that you cannot undo this. + + +File: pcb.info, Node: AutoRoute Action, Next: ChangeClearSize Action, Prev: AutoPlaceSelected Action, Up: core actions + +F.1.6 AutoRoute +--------------- + +AutoRoute(AllRats|SelectedRats) + +Auto-route some or all rat lines. + +`AllRats' + Attempt to autoroute all rats. + +`SelectedRats' + Attempt to autoroute the selected rats. + + + Before autorouting, it's important to set up a few things. First, +make sure any layers you aren't using are disabled, else the autorouter +may use them. Next, make sure the current line and via styles are set +accordingly. Last, make sure "new lines clear polygons" is set, in +case you eventually want to add a copper pour. + + Autorouting takes a while. During this time, the program may not be +responsive. + + +File: pcb.info, Node: ChangeClearSize Action, Next: ChangeDrillSize Action, Prev: AutoRoute Action, Up: core actions + +F.1.7 ChangeClearSize +--------------------- + +ChangeClearSize(Object, delta) +ChangeClearSize(SelectedPins|SelectedPads|SelectedVias, delta) +ChangeClearSize(SelectedLines|SelectedArcs, delta +ChangeClearSize(Selected|SelectedObjects, delta) + +Changes the clearance size of objects. + + If the solder mask is currently showing, this action changes the +solder mask clearance. If the mask is not showing, this action changes +the polygon clearance. + + +File: pcb.info, Node: ChangeDrillSize Action, Next: ChangeFlag Action, Prev: ChangeClearSize Action, Up: core actions + +F.1.8 ChangeDrillSize +--------------------- + +ChangeDrillSize(Object, delta) +ChangeDrillSize(SelectedPins|SelectedVias|Selected|SelectedObjects, delta) + +Changes the drilling hole size of objects. + + +File: pcb.info, Node: ChangeFlag Action, Next: ChangeHole Action, Prev: ChangeDrillSize Action, Up: core actions + +F.1.9 ChangeFlag +---------------- + +ChangeFlag(Object|Selected|SelectedObjects, flag, value) +ChangeFlag(SelectedLines|SelectedPins|SelectedVias, flag, value) +ChangeFlag(SelectedPads|SelectedTexts|SelectedNames, flag, value) +ChangeFlag(SelectedElements, flag, value) +flag = square | octagon | thermal | join +value = 0 | 1 + +Sets or clears flags on objects. + + Toggles the given flag on the indicated object(s). The flag may be +one of the flags listed above (square, octagon, thermal, join). The +value may be the number 0 or 1. If the value is 0, the flag is +cleared. If the value is 1, the flag is set. + + +File: pcb.info, Node: ChangeHole Action, Next: ChangeJoin Action, Prev: ChangeFlag Action, Up: core actions + +F.1.10 ChangeHole +----------------- + +ChangeHole(ToggleObject|Object|SelectedVias|Selected) + +Changes the hole flag of objects. + + The "hole flag" of a via determines whether the via is a +plated-through hole (not set), or an unplated hole (set). + + +File: pcb.info, Node: ChangeJoin Action, Next: ChangeName Action, Prev: ChangeHole Action, Up: core actions + +F.1.11 ChangeJoin +----------------- + +ChangeJoin(ToggleObject|SelectedLines|SelectedArcs|Selected) + +Changes the join (clearance through polygons) of objects. + + The join flag determines whether a line or arc, drawn to intersect a +polygon, electrically connects to the polygon or not. When joined, the +line/arc is simply drawn over the polygon, making an electrical +connection. When not joined, a gap is drawn between the line and the +polygon, insulating them from each other. + + +File: pcb.info, Node: ChangeName Action, Next: ChangeOctagon Action, Prev: ChangeJoin Action, Up: core actions + +F.1.12 ChangeName +----------------- + +ChangeName(Object) +ChangeName(Layout|Layer) + +Sets the name of objects. + +`Object' + Changes the name of the element under the cursor. + +`Layout' + Changes the name of the layout. This is printed on the fab + drawings. + +`Layer' + Changes the name of the currently active layer. + + + +File: pcb.info, Node: ChangeOctagon Action, Next: ChangePaste Action, Prev: ChangeName Action, Up: core actions + +F.1.13 ChangeOctagon +-------------------- + +ChangeOctagon(Object|ToggleObject|SelectedObjects|Selected) +ChangeOctagon(SelectedElements|SelectedPins|SelectedVias) + +Changes the octagon-flag of pins and vias. + + Pins, pads, and vias can have various shapes. All may be round. +Pins and pads may be square (obviously "square" pads are usually +rectangular). Pins and vias may be octagonal. When you change a shape +flag of an element, you actually change all of its pins and pads. + + Note that the square flag takes precedence over the octagon flag, +thus, if both the square and octagon flags are set, the object is +square. When the square flag is cleared, the pins and pads will be +either round or, if the octagon flag is set, octagonal. + + +File: pcb.info, Node: ChangePaste Action, Next: ChangePinName Action, Prev: ChangeOctagon Action, Up: core actions + +F.1.14 ChangePaste +------------------ + +ChangePaste(ToggleObject|Object|SelectedPads|Selected) + +Changes the no paste flag of objects. + + The "no paste flag" of a pad determines whether the solderpaste +stencil will have an opening for the pad (no set) or if there wil be +no solderpaste on the pad (set). This is used for things such as +fiducial pads. + + +File: pcb.info, Node: ChangePinName Action, Next: ChangeSize Action, Prev: ChangePaste Action, Up: core actions + +F.1.15 ChangePinName +-------------------- + +ChangePinName(ElementName,PinNumber,PinName) + +Sets the name of a specific pin on a specific element. + + This can be especially useful for annotating pin names from a +schematic to the layout without requiring knowledge of the pcb file +format. + + ChangePinName(U3, 7, VCC) + + +File: pcb.info, Node: ChangeSize Action, Next: ChangeSquare Action, Prev: ChangePinName Action, Up: core actions + +F.1.16 ChangeSize +----------------- + +ChangeSize(Object, delta) +ChangeSize(SelectedObjects|Selected, delta) +ChangeSize(SelectedLines|SelectedPins|SelectedVias, delta) +ChangeSize(SelectedPads|SelectedTexts|SelectedNames, delta) +ChangeSize(SelectedElements, delta) + +Changes the size of objects. + + For lines and arcs, this changes the width. For pins and vias, this +changes the overall diameter of the copper annulus. For pads, this +changes the width and, indirectly, the length. For texts and names, +this changes the scaling factor. For elements, this changes the width +of the silk layer lines and arcs for this element. + + +File: pcb.info, Node: ChangeSquare Action, Next: ClearOctagon Action, Prev: ChangeSize Action, Up: core actions + +F.1.17 ChangeSquare +------------------- + +ChangeSquare(ToggleObject) +ChangeSquare(SelectedElements|SelectedPins) +ChangeSquare(Selected|SelectedObjects) + +Changes the square flag of pins and pads. + + Note that `Pins' means both pins and pads. + + Pins, pads, and vias can have various shapes. All may be round. +Pins and pads may be square (obviously "square" pads are usually +rectangular). Pins and vias may be octagonal. When you change a shape +flag of an element, you actually change all of its pins and pads. + + Note that the square flag takes precedence over the octagon flag, +thus, if both the square and octagon flags are set, the object is +square. When the square flag is cleared, the pins and pads will be +either round or, if the octagon flag is set, octagonal. + + +File: pcb.info, Node: ClearOctagon Action, Next: ClearSquare Action, Prev: ChangeSquare Action, Up: core actions + +F.1.18 ClearOctagon +------------------- + +ClearOctagon(ToggleObject|Object|SelectedObjects|Selected) +ClearOctagon(SelectedElements|SelectedPins|SelectedVias) + +Clears the octagon-flag of pins and vias. + + Pins, pads, and vias can have various shapes. All may be round. +Pins and pads may be square (obviously "square" pads are usually +rectangular). Pins and vias may be octagonal. When you change a shape +flag of an element, you actually change all of its pins and pads. + + Note that the square flag takes precedence over the octagon flag, +thus, if both the square and octagon flags are set, the object is +square. When the square flag is cleared, the pins and pads will be +either round or, if the octagon flag is set, octagonal. + + +File: pcb.info, Node: ClearSquare Action, Next: ClrFlag Action, Prev: ClearOctagon Action, Up: core actions + +F.1.19 ClearSquare +------------------ + +ClearSquare(ToggleObject|SelectedElements|SelectedPins) + +Clears the square-flag of pins and pads. + + Note that `Pins' means pins and pads. + + Pins, pads, and vias can have various shapes. All may be round. +Pins and pads may be square (obviously "square" pads are usually +rectangular). Pins and vias may be octagonal. When you change a shape +flag of an element, you actually change all of its pins and pads. + + Note that the square flag takes precedence over the octagon flag, +thus, if both the square and octagon flags are set, the object is +square. When the square flag is cleared, the pins and pads will be +either round or, if the octagon flag is set, octagonal. + + +File: pcb.info, Node: ClrFlag Action, Next: Connection Action, Prev: ClearSquare Action, Up: core actions + +F.1.20 ClrFlag +-------------- + +ClrFlag(Object|Selected|SelectedObjects, flag) +ClrFlag(SelectedLines|SelectedPins|SelectedVias, flag) +ClrFlag(SelectedPads|SelectedTexts|SelectedNames, flag) +ClrFlag(SelectedElements, flag) +flag = square | octagon | thermal | join + +Clears flags on objects. + + Turns the given flag off, regardless of its previous setting. See +`ChangeFlag'. + + ClrFlag(SelectedLines,join) + + +File: pcb.info, Node: Connection Action, Next: Delete Action, Prev: ClrFlag Action, Up: core actions + +F.1.21 Connection +----------------- + +Connection(Find|ResetLinesAndPolygons|ResetPinsAndVias|Reset) + +Searches connections of the object at the cursor position. + + Connections found with this action will be highlighted in the +"connected-color" color and will have the "found" flag set. + +`Find' + The net under the cursor is "found". + +`ResetLinesAndPolygons' + Any "found" lines and polygons are marked "not found". + +`ResetPinsAndVias' + Any "found" pins and vias are marked "not found". + +`Reset' + All "found" objects are marked "not found". + + + +File: pcb.info, Node: Delete Action, Next: DeleteRats Action, Prev: Connection Action, Up: core actions + +F.1.22 Delete +------------- + +Delete(Object|Selected) +Delete(AllRats|SelectedRats) + +Delete stuff. + + +File: pcb.info, Node: DeleteRats Action, Next: DisableVendor Action, Prev: Delete Action, Up: core actions + +F.1.23 DeleteRats +----------------- + +DeleteRats(AllRats|Selected|SelectedRats) + +Delete rat lines. + + +File: pcb.info, Node: DisableVendor Action, Next: DisperseElements Action, Prev: DeleteRats Action, Up: core actions + +F.1.24 DisableVendor +-------------------- + +DisableVendor() + +Disables automatic drill size mapping. + + When drill mapping is enabled, new instances of pins and vias will +have their drill holes mapped to one of the allowed drill sizes +specified in the currently loaded vendor drill table. + + +File: pcb.info, Node: DisperseElements Action, Next: Display Action, Prev: DisableVendor Action, Up: core actions + +F.1.25 DisperseElements +----------------------- + +DisperseElements(All|Selected) + +Disperses elements. + + Normally this is used when starting a board, by selecting all +elements and then dispersing them. This scatters the elements around +the board so that you can pick individual ones, rather than have all the +elements at the same 0,0 coordinate and thus impossible to choose from. + + +File: pcb.info, Node: Display Action, Next: djopt Action, Prev: DisperseElements Action, Up: core actions + +F.1.26 Display +-------------- + +Display(NameOnPCB|Description|Value) +Display(Grid|Redraw) +Display(CycleClip|CycleCrosshair|Toggle45Degree|ToggleStartDirection) +Display(ToggleGrid|ToggleRubberBandMode|ToggleUniqueNames) +Display(ToggleMask|ToggleName|ToggleClearLine|ToggleFullPoly|ToggleSnapPin) +Display(ToggleThindraw|ToggleThindrawPoly|ToggleOrthoMove|ToggleLocalRef) +Display(ToggleCheckPlanes|ToggleShowDRC|ToggleAutoDRC) +Display(ToggleLiveRoute|LockNames|OnlyNames) +Display(Pinout|PinOrPadName) + +Several display-related actions. + +`NameOnPCB' + +`Description' + +`Value' + Specify whether all elements show their name, description, or + value. + +`Redraw' + Redraw the whole board. + +`Toggle45Degree' + When clear, lines can be drawn at any angle. When set, lines are + restricted to multiples of 45 degrees and requested lines may be + broken up according to the clip setting. + +`CycleClip' + Changes the way lines are restricted to 45 degree increments. The + various settings are: straight only, orthogonal then angled, and + angled then orthogonal. If AllDirections is set, this action + disables it. + +`CycleCrosshair' + Changes crosshair drawing. Crosshair may accept form of 4-ray, + 8-ray and 12-ray cross. + +`ToggleRubberBandMode' + If set, moving an object moves all the lines attached to it too. + +`ToggleStartDirection' + If set, each time you set a point in a line, the Clip toggles + between orth-angle and angle-ortho. + +`ToggleUniqueNames' + If set, you will not be permitted to change the name of an element + to match that of another element. + +`ToggleSnapPin' + If set, pin centers and pad end points are treated as additional + grid points that the cursor can snap to. + +`ToggleLocalRef' + If set, the mark is automatically set to the beginning of any + move, so you can see the relative distance you've moved. + +`ToggleThindraw' + If set, objects on the screen are drawn as outlines (lines are + drawn as center-lines). This lets you see line endpoints hidden + under pins, for example. + +`ToggleThindrawPoly' + If set, polygons on the screen are drawn as outlines. + +`ToggleShowDRC' + If set, pending objects (i.e. lines you're in the process of + drawing) will be drawn with an outline showing how far away from + other copper you need to be. + +`ToggleLiveRoute' + If set, the progress of the autorouter will be visible on the + screen. + +`ToggleAutoDRC' + If set, you will not be permitted to make connections which violate + the current DRC and netlist settings. + +`ToggleCheckPlanes' + If set, lines and arcs aren't drawn, which usually leaves just the + polygons. If you also disable all but the layer you're interested + in, this allows you to check for isolated regions. + +`ToggleOrthoMove' + If set, the crosshair is only allowed to move orthogonally from its + previous position. I.e. you can move an element or line up, down, + left, or right, but not up+left or down+right. + +`ToggleName' + Selects whether the pinouts show the pin names or the pin numbers. + +`ToggleLockNames' + If set, text will ignore left mouse clicks and actions that work on + objects under the mouse. You can still select text with a lasso + (left mouse drag) and perform actions on the selection. + +`ToggleOnlyNames' + If set, only text will be sensitive for mouse clicks and actions + that work on objects under the mouse. You can still select other + objects with a lasso (left mouse drag) and perform actions on the + selection. + +`ToggleMask' + Turns the solder mask on or off. + +`ToggleClearLine' + When set, the clear-line flag causes new lines and arcs to have + their "clear polygons" flag set, so they won't be electrically + connected to any polygons they overlap. + +`ToggleFullPoly' + When set, the full-poly flag causes new polygons to have their + "full polygon" flag set, so all parts of them will be displayed + instead of only the biggest one. + +`ToggleGrid' + Resets the origin of the current grid to be wherever the mouse + pointer is (not where the crosshair currently is). If you provide + two numbers after this, the origin is set to that coordinate. + +`Grid' + Toggles whether the grid is displayed or not. + +`Pinout' + Causes the pinout of the element indicated by the cursor to be + displayed, usually in a separate window. + +`PinOrPadName' + Toggles whether the names of pins, pads, or (yes) vias will be + displayed. If the cursor is over an element, all of its pins and + pads are affected. + + + +File: pcb.info, Node: djopt Action, Next: DRC Action, Prev: Display Action, Up: core actions + +F.1.27 djopt +------------ + +djopt(debumpify|unjaggy|simple|vianudge|viatrim|orthopull) +djopt(auto) - all of the above +djopt(miter) + +Perform various optimizations on the current board. + + The different types of optimizations change your board in order to +reduce the total trace length and via count. + +`debumpify' + Looks for U-shaped traces that can be shortened or eliminated. + +`unjaggy' + Looks for corners which could be flipped to eliminate one or more + corners (i.e. jaggy lines become simpler). + +`simple' + Removing uneeded vias, replacing two or more trace segments in a + row with a single segment. This is usually performed + automatically after other optimizations. + +`vianudge' + Looks for vias where all traces leave in the same direction. + Tries to move via in that direction to eliminate one of the traces + (and thus a corner). + +`viatrim' + Looks for traces that go from via to via, where moving that trace + to a different layer eliminates one or both vias. + +`orthopull' + Looks for chains of traces all going in one direction, with more + traces orthogonal on one side than on the other. Moves the chain + in that direction, causing a net reduction in trace length, + possibly eliminating traces and/or corners. + +`splitlines' + Looks for lines that pass through vias, pins, or pads, and splits + them into separate lines so they can be managed separately. + +`auto' + Performs the above options, repeating until no further + optimizations can be made. + +`miter' + Replaces 90 degree corners with a pair of 45 degree corners, to + reduce RF losses and trace length. + + + +File: pcb.info, Node: DRC Action, Next: DumpLibrary Action, Prev: djopt Action, Up: core actions + +F.1.28 DRC +---------- + +DRC() + +Invoke the DRC check. + + Note that the design rule check uses the current board rule settings, +not the current style settings. + + +File: pcb.info, Node: DumpLibrary Action, Next: elementlist Action, Prev: DRC Action, Up: core actions + +F.1.29 DumpLibrary +------------------ + +DumpLibrary() + +Display the entire contents of the libraries. + + +File: pcb.info, Node: elementlist Action, Next: elementsetattr Action, Prev: DumpLibrary Action, Up: core actions + +F.1.30 elementlist +------------------ + +ElementList(Start|Done|Need,,,) + +Adds the given element if it doesn't already exist. + +`Start' + Indicates the start of an element list; call this before any Need + actions. + +`Need' + Searches the board for an element with a matching refdes. + + If found, the value and footprint are updated. + + If not found, a new element is created with the given footprint + and value. + +`Done' + Compares the list of elements needed since the most recent `start' + with the list of elements actually on the board. Any elements + that weren't listed are selected, so that the user may delete them. + + + +File: pcb.info, Node: elementsetattr Action, Next: EnableVendor Action, Prev: elementlist Action, Up: core actions + +F.1.31 elementsetattr +--------------------- + +ElementSetAttr(refdes,name[,value]) + +Sets or clears an element-specific attribute. + + If a value is specified, the named attribute is added (if not already +present) or changed (if it is) to the given value. If the value is not +specified, the given attribute is removed if present. + Index: trunk/doc-orig/pcb.info-2 =================================================================== --- trunk/doc-orig/pcb.info-2 (nonexistent) +++ trunk/doc-orig/pcb.info-2 (revision 1037) @@ -0,0 +1,3304 @@ +This is pcb.info, produced by makeinfo version 4.13 from pcb.texi. + +INFO-DIR-SECTION Miscellaneous +START-INFO-DIR-ENTRY +* pcb: (pcb). An interactive printed circuit board editor. +END-INFO-DIR-ENTRY + + This file documents how to use Pcb, the open source, interactive +printed circuit board layout system. + + Copyright (C) 1994,1995,1996, 2004 Thomas Nau + + Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 harry eaton + + Copyright (C) 2003, 2004, 2005, 2006, 2007, 2009 Dan McMahill + + Copyright (C) 2004 DJ Delorie + + This program is free software; you may redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or (at +your option) any later version. + + This program is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANT-ABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +General Public License for more details. + + +File: pcb.info, Node: EnableVendor Action, Next: execcommand Action, Prev: elementsetattr Action, Up: core actions + +F.1.32 EnableVendor +------------------- + +EnableVendor() + +Enables automatic drill size mapping. + + When drill mapping is enabled, new instances of pins and vias will +have their drill holes mapped to one of the allowed drill sizes +specified in the currently loaded vendor drill table. To enable drill +mapping, a vendor resource file containing a drill table must be loaded +first. + + +File: pcb.info, Node: execcommand Action, Next: ExecuteFile Action, Prev: EnableVendor Action, Up: core actions + +F.1.33 execcommand +------------------ + +ExecCommand(command) + +Runs a command. + + Runs the given command, which is a system executable. + + +File: pcb.info, Node: ExecuteFile Action, Next: Flip Action, Prev: execcommand Action, Up: core actions + +F.1.34 ExecuteFile +------------------ + +ExecuteFile(filename) + +Run actions from the given file. + + Lines starting with `#' are ignored. + + +File: pcb.info, Node: Flip Action, Next: FontEdit Action, Prev: ExecuteFile Action, Up: core actions + +F.1.35 Flip +----------- + +Flip(Object|Selected|SelectedElements) + +Flip an element to the opposite side of the board. + + Note that the location of the element will be symmetric about the +cursor location; i.e. if the part you are pointing at will still be at +the same spot once the element is on the other side. When flipping +multiple elements, this retains their positions relative to each other, +not their absolute positions on the board. + + +File: pcb.info, Node: FontEdit Action, Next: FontSave Action, Prev: Flip Action, Up: core actions + +F.1.36 FontEdit +--------------- + +FontEdit() + +Convert the current font to a PCB for editing. + + +File: pcb.info, Node: FontSave Action, Next: FreeRotateBuffer Action, Prev: FontEdit Action, Up: core actions + +F.1.37 FontSave +--------------- + +FontSave() + +Convert the current PCB back to a font. + + +File: pcb.info, Node: FreeRotateBuffer Action, Next: GlobalPuller Action, Prev: FontSave Action, Up: core actions + +F.1.38 FreeRotateBuffer +----------------------- + +FreeRotateBuffer([Angle]) + +Rotates the current paste buffer contents by the specified angle. The +angle is given in degrees. If no angle is given, the user is prompted +for one. + + Rotates the contents of the pastebuffer by an arbitrary angle. If no +angle is given, the user is prompted for one. + + +File: pcb.info, Node: GlobalPuller Action, Next: h Action, Prev: FreeRotateBuffer Action, Up: core actions + +F.1.39 GlobalPuller +------------------- + +GlobalPuller() + +Pull all traces tight. + + +File: pcb.info, Node: h Action, Next: Import Action, Prev: GlobalPuller Action, Up: core actions + +F.1.40 h +-------- + +h + +Print a help message for commands. + + This is one of the command box helper actions. While it is a regular +action and can be used like any other action, its name and syntax are +optimized for use with the command box (`:') and thus the syntax is +documented for that purpose. + + +File: pcb.info, Node: Import Action, Next: l Action, Prev: h Action, Up: core actions + +F.1.41 Import +------------- + +Import() +Import([gnetlist|make[,source,source,...]]) +Import(setnewpoint[,(mark|center|X,Y)]) +Import(setdisperse,D,units) + +Import schematics. + + Imports element and netlist data from the schematics (or some other +source). The first parameter, which is optional, is the mode. If not +specified, the `import::mode' attribute in the PCB is used. `gnetlist' +means gnetlist is used to obtain the information from the schematics. +`make' invokes `make', assuming the user has a `Makefile' in the +current directory. The `Makefile' will be invoked with the following +variables set: + +`PCB' + The name of the .pcb file + +`SRCLIST' + A space-separated list of source files + +`OUT' + The name of the file in which to put the command script, which may + contain any `Pcb' actions. By default, this is a temporary file + selected by `Pcb', but if you specify an `import::outfile' + attribute, that file name is used instead (and not automatically + deleted afterwards). + + + The target specified to be built is the first of these that apply: + + * The target specified by an `import::target' attribute. + + * The output file specified by an `import::outfile' attribute. + + * If nothing else is specified, the target is `pcb_import'. + + + If you specify an `import::makefile' attribute, then "-f " will be added to the command line. + + If you specify the mode, you may also specify the source files +(schematics). If you do not specify any, the list of schematics is +obtained by reading the `import::srcN' attributes (like `import::src0', +`import::src1', etc). + + For compatibility with future extensions to the import file format, +the generated file _must not_ start with the two characters `#%'. + + If a temporary file is needed the `TMPDIR' environment variable is +used to select its location. + + Note that the programs `gnetlist' and `make' may be overridden by +the user via the `make-program' and `gnetlist' `pcb' settings (i.e. in +`~/.pcb/settings' or on the command line). + + If `Pcb' cannot determine which schematic(s) to import from, the GUI +is called to let user choose (see `ImportGUI()'). + + Note that Import() doesn't delete anything - after an Import, +elements which shouldn't be on the board are selected and may be +removed once it's determined that the deletion is appropriate. + + If `Import()' is called with `setnewpoint', then the location of new +components can be specified. This is where parts show up when they're +added to the board. The default is the center of the board. + +`Import(setnewpoint)' + Prompts the user to click on the board somewhere, uses that point. + If called by a hotkey, uses the current location of the crosshair. + +`Import(setnewpoint,mark)' + Uses the location of the mark. If no mark is present, the point is + not changed. + +`Import(setnewpoint,center)' + Resets the point to the center of the board. + +`Import(setnewpoint,X,Y,units)' + Sets the point to the specific coordinates given. Example: + `Import(setnewpoint,50,25,mm)' + + + Note that the X and Y locations are stored in attributes named +`import::newX' and `import::newY' so you could change them manually if +you wished. + + Calling `Import(setdisperse,D,units)' sets how much the newly placed +elements are dispersed relative to the set point. For example, +`Import(setdisperse,10,mm)' will offset each part randomly up to 10mm +away from the point. The default dispersion is 1/10th of the smallest +board dimension. Dispersion is saved in the `import::disperse' +attribute. + + +File: pcb.info, Node: l Action, Next: le Action, Prev: Import Action, Up: core actions + +F.1.42 l +-------- + +l [name] + +Loads layout data. + + Loads a new datafile (layout) and, if confirmed, overwrites any +existing unsaved data. The filename and the searchpath (_filePath_) +are passed to the command defined by _fileCommand_. If no filename is +specified a file select box will popup. + + This is one of the command box helper actions. While it is a regular +action and can be used like any other action, its name and syntax are +optimized for use with the command box (`:') and thus the syntax is +documented for that purpose. + + +File: pcb.info, Node: le Action, Next: LoadFootprint Action, Prev: l Action, Up: core actions + +F.1.43 le +--------- + +le [name] + +Loads an element into the current buffer. + + The filename and the searchpath (_elementPath_) are passed to the +command defined by _elementCommand_. If no filename is specified a +file select box will popup. + + This is one of the command box helper actions. While it is a regular +action and can be used like any other action, its name and syntax are +optimized for use with the command box (`:') and thus the syntax is +documented for that purpose. + + +File: pcb.info, Node: LoadFootprint Action, Next: LoadFrom Action, Prev: le Action, Up: core actions + +F.1.44 LoadFootprint +-------------------- + +LoadFootprint(filename[,refdes,value]) + +Loads a single footprint by name. + + Loads a single footprint by name, rather than by reference or through +the library. If a refdes and value are specified, those are inserted +into the footprint as well. The footprint remains in the paste buffer. + + +File: pcb.info, Node: LoadFrom Action, Next: LoadVendorFrom Action, Prev: LoadFootprint Action, Up: core actions + +F.1.45 LoadFrom +--------------- + +LoadFrom(Layout|LayoutToBuffer|ElementToBuffer|Netlist|Revert,filename) + +Load layout data from a file. + + This action assumes you know what the filename is. The various GUIs +should have a similar `Load' action where the filename is optional, and +will provide their own file selection mechanism to let you choose the +file name. + +`Layout' + Loads an entire PCB layout, replacing the current one. + +`LayoutToBuffer' + Loads an entire PCB layout to the paste buffer. + +`ElementToBuffer' + Loads the given element file into the paste buffer. Element files + contain only a single `Element' definition, such as the "newlib" + library uses. + +`Netlist' + Loads a new netlist, replacing any current netlist. + +`Revert' + Re-loads the current layout from its disk file, reverting any + changes you may have made. + + + +File: pcb.info, Node: LoadVendorFrom Action, Next: m Action, Prev: LoadFrom Action, Up: core actions + +F.1.46 LoadVendorFrom +--------------------- + +LoadVendorFrom(filename) + +Loads the specified vendor resource file. + +FILENAME + Name of the vendor resource file. If not specified, the user will + be prompted to enter one. + + +File: pcb.info, Node: m Action, Next: MarkCrosshair Action, Prev: LoadVendorFrom Action, Up: core actions + +F.1.47 m +-------- + +m [name] + +Loads a layout into the current buffer. + + The filename and the searchpath (_filePath_) are passed to the +command defined by _fileCommand_. If no filename is specified a file +select box will popup. + + This is one of the command box helper actions. While it is a regular +action and can be used like any other action, its name and syntax are +optimized for use with the command box (`:') and thus the syntax is +documented for that purpose. + + +File: pcb.info, Node: MarkCrosshair Action, Next: Message Action, Prev: m Action, Up: core actions + +F.1.48 MarkCrosshair +-------------------- + +MarkCrosshair() +MarkCrosshair(Center) + +Set/Reset the Crosshair mark. + + The "mark" is a small X-shaped target on the display which is +treated like a second origin (the normal origin is the upper let corner +of the board). The GUI will display a second set of coordinates for +this mark, which tells you how far you are from it. + + If no argument is given, the mark is toggled - disabled if it was +enabled, or enabled at the current cursor position of disabled. If the +`Center' argument is given, the mark is moved to the current cursor +location. + + +File: pcb.info, Node: Message Action, Next: MinClearGap Action, Prev: MarkCrosshair Action, Up: core actions + +F.1.49 Message +-------------- + +Message(message) + +Writes a message to the log window. + + This action displays a message to the log window. This action is +primarily provided for use by other programs which may interface with +PCB. If multiple arguments are given, each one is sent to the log +window followed by a newline. + + +File: pcb.info, Node: MinClearGap Action, Next: MinMaskGap Action, Prev: Message Action, Up: core actions + +F.1.50 MinClearGap +------------------ + +MinClearGap(delta) +MinClearGap(Selected, delta) + +Ensures that polygons are a minimum distance from objects. + + Checks all specified objects, and increases the polygon clearance if +needed to ensure a minimum distance between their edges and the polygon +edges. + + +File: pcb.info, Node: MinMaskGap Action, Next: Mode Action, Prev: MinClearGap Action, Up: core actions + +F.1.51 MinMaskGap +----------------- + +MinMaskGap(delta) +MinMaskGap(Selected, delta) + +Ensures the mask is a minimum distance from pins and pads. + + Checks all specified pins and/or pads, and increases the mask if +needed to ensure a minimum distance between the pin or pad edge and the +mask edge. + + +File: pcb.info, Node: Mode Action, Next: MorphPolygon Action, Prev: MinMaskGap Action, Up: core actions + +F.1.52 Mode +----------- + +Mode(Arc|Arrow|Copy|InsertPoint|Line|Lock|Move|None|PasteBuffer) +Mode(Polygon|Rectangle|Remove|Rotate|Text|Thermal|Via) +Mode(Notify|Release|Cancel|Stroke) +Mode(Save|Restore) + +Change or use the tool mode. + +`Arc' +`Arrow' +`Copy' +`InsertPoint' +`Line' +`Lock' +`Move' +`None' +`PasteBuffer' +`Polygon' +`Rectangle' +`Remove' +`Rotate' +`Text' +`Thermal' +`Via' + Select the indicated tool. + +`Notify' + Called when you press the mouse button, or move the mouse. + +`Release' + Called when you release the mouse button. + +`Cancel' + Cancels any pending tool activity, allowing you to restart + elsewhere. For example, this allows you to start a new line + rather than attach a line to the previous line. + +`Escape' + Similar to Cancel but calling this action a second time will return + to the Arrow tool. + +`Stroke' + If your `pcb' was built with libstroke, this invokes the stroke + input method. If not, this will restart a drawing mode if you were + drawing, else it will select objects. + +`Save' + Remembers the current tool. + +`Restore' + Restores the tool to the last saved tool. + + + +File: pcb.info, Node: MorphPolygon Action, Next: MoveLayer Action, Prev: Mode Action, Up: core actions + +F.1.53 MorphPolygon +------------------- + +MorphPolygon(Object|Selected) + +Converts dead polygon islands into separate polygons. + + If a polygon is divided into unconnected "islands", you can use this +command to convert the otherwise disappeared islands into separate +polygons. Be sure the cursor is over a portion of the polygon that +remains visible. Very small islands that may flake off are +automatically deleted. + + +File: pcb.info, Node: MoveLayer Action, Next: MoveObject Action, Prev: MorphPolygon Action, Up: core actions + +F.1.54 MoveLayer +---------------- + +MoveLayer(old,new) + +Moves/Creates/Deletes Layers. + + Moves a layer, creates a new layer, or deletes a layer. + +`old' + The is the layer number to act upon. Allowed values are: + `c' + Currently selected layer. + + `-1' + Create a new layer. + + `number' + An existing layer number. + + +`new' + Specifies where to move the layer to. Allowed values are: + `-1' + Deletes the layer. + + `up' + Moves the layer up. + + `down' + Moves the layer down. + + `c' + Creates a new layer. + + + + +File: pcb.info, Node: MoveObject Action, Next: MoveToCurrentLayer Action, Prev: MoveLayer Action, Up: core actions + +F.1.55 MoveObject +----------------- + +MoveObject(X,Y,dim) + +Moves the object under the crosshair. + + The `X' and `Y' are treated like `delta' is for many other objects. +For each, if it's prefixed by `+' or `-', then that amount is relative. +Otherwise, it's absolute. Units can be `mil' or `mm'; if unspecified, +units are PCB's internal units, currently 1/100 mil. + + +File: pcb.info, Node: MoveToCurrentLayer Action, Next: Netlist Action, Prev: MoveObject Action, Up: core actions + +F.1.56 MoveToCurrentLayer +------------------------- + +MoveToCurrentLayer(Object|SelectedObjects) + +Moves objects to the current layer. + + Note that moving an element from a component layer to a solder layer, +or from solder to component, won't automatically flip it. Use the +`Flip()' action to do that. + + +File: pcb.info, Node: Netlist Action, Next: New Action, Prev: MoveToCurrentLayer Action, Up: core actions + +F.1.57 Netlist +-------------- + +Net(find|select|rats|norats|clear[,net[,pin]]) +Net(freeze|thaw|forcethaw) +Net(add,net,pin) + +Perform various actions on netlists. + + Each of these actions apply to a specified set of nets. NET and PIN +are patterns which match one or more nets or pins; these patterns may +be full names or regular expressions. If an exact match is found, it +is the only match; if no exact match is found, _then_ the pattern is +tried as a regular expression. + + If neither NET nor PIN are specified, all nets apply. If NET is +specified but not PIN, all nets matching NET apply. If both are +specified, nets which match NET and contain a pin matching PIN apply. + +`find' + Nets which apply are marked _found_ and are drawn in the + `connected-color' color. + +`select' + Nets which apply are selected. + +`rats' + Nets which apply are marked as available for the rats nest. + +`norats' + Nets which apply are marked as not available for the rats nest. + +`clear' + Clears the netlist. + +`add' + Add the given pin to the given netlist, creating either if needed. + +`sort' + Called after a list of add's, this sorts the netlist. + +`freeze' +`thaw' +`forcethaw' + Temporarily prevents changes to the netlist from being reflected in + the GUI. For example, if you need to make multiple changes, you + freeze the netlist, make the changes, then thaw it. Note that + freeze/thaw requests may nest, with the netlist being fully thawed + only when all pending freezes are thawed. You can bypass the + nesting by using forcethaw, which resets the freeze count and + immediately updates the GUI. + + + +File: pcb.info, Node: New Action, Next: OptAutoOnly Action, Prev: Netlist Action, Up: core actions + +F.1.58 New +---------- + +New([name]) + +Starts a new layout. + + If a name is not given, one is prompted for. + + +File: pcb.info, Node: OptAutoOnly Action, Next: PasteBuffer Action, Prev: New Action, Up: core actions + +F.1.59 OptAutoOnly +------------------ + +OptAutoOnly() + +Toggles the optimize-only-autorouted flag. + + The original purpose of the trace optimizer was to clean up the +traces created by the various autorouters that have been used with PCB. +When a board has a mix of autorouted and carefully hand-routed traces, +you don't normally want the optimizer to move your hand-routed traces. +But, sometimes you do. By default, the optimizer only optimizes +autorouted traces. This action toggles that setting, so that you can +optimize hand-routed traces also. + + +File: pcb.info, Node: PasteBuffer Action, Next: Polygon Action, Prev: OptAutoOnly Action, Up: core actions + +F.1.60 PasteBuffer +------------------ + +PasteBuffer(AddSelected|Clear|1..MAX_BUFFER) +PasteBuffer(Rotate, 1..3) +PasteBuffer(Convert|Save|Restore|Mirror) +PasteBuffer(ToLayout, X, Y, units) + +Various operations on the paste buffer. + + There are a number of paste buffers; the actual limit is a +compile-time constant `MAX_BUFFER' in `globalconst.h'. It is currently +`5'. One of these is the "current" paste buffer, often referred to as +"the" paste buffer. + +`AddSelected' + Copies the selected objects to the current paste buffer. + +`Clear' + Remove all objects from the current paste buffer. + +`Convert' + Convert the current paste buffer to an element. Vias are + converted to pins, lines are converted to pads. + +`Restore' + Convert any elements in the paste buffer back to vias and lines. + +`Mirror' + Flip all objects in the paste buffer vertically (up/down flip). + To mirror horizontally, combine this with rotations. + +`Rotate' + Rotates the current buffer. The number to pass is 1..3, where 1 + means 90 degrees counter clockwise, 2 means 180 degrees, and 3 + means 90 degrees clockwise (270 CCW). + +`Save' + Saves any elements in the current buffer to the indicated file. + +`ToLayout' + Pastes any elements in the current buffer to the indicated X, Y + coordinates in the layout. The `X' and `Y' are treated like + `delta' is for many other objects. For each, if it's prefixed by + `+' or `-', then that amount is relative to the last location. + Otherwise, it's absolute. Units can be `mil' or `mm'; if + unspecified, units are PCB's internal units, currently 1/100 mil. + +`1..MAX_BUFFER' + Selects the given buffer to be the current paste buffer. + + + +File: pcb.info, Node: Polygon Action, Next: Puller Action, Prev: PasteBuffer Action, Up: core actions + +F.1.61 Polygon +-------------- + +Polygon(Close|PreviousPoint) + +Some polygon related stuff. + + Polygons need a special action routine to make life easier. + +`Close' + Creates the final segment of the polygon. This may fail if + clipping to 45 degree lines is switched on, in which case a + warning is issued. + +`PreviousPoint' + Resets the newly entered corner to the previous one. The Undo + action will call Polygon(PreviousPoint) when appropriate to do so. + + + +File: pcb.info, Node: Puller Action, Next: q Action, Prev: Polygon Action, Up: core actions + +F.1.62 Puller +------------- + +Puller() + +Pull an arc-line junction tight. + + The `Puller()' action is a special-purpose optimization. When +invoked while the crosshair is over the junction of an arc and a line, +it will adjust the arc's angle and the connecting line's endpoint such +that the line intersects the arc at a tangent. In the example below, +the left side is "before" with the black target marking where to put +the crosshair: + + [image src="puller.png" alt="Example of how puller works"] + +The right side is "after" with the black target marking where the +arc-line intersection was moved to. + + +File: pcb.info, Node: q Action, Next: q! Action, Prev: Puller Action, Up: core actions + +F.1.63 q +-------- + +q + +Quits the application after confirming. + + If you have unsaved changes, you will be prompted to confirm (or +save) before quitting. + + This is one of the command box helper actions. While it is a regular +action and can be used like any other action, its name and syntax are +optimized for use with the command box (`:') and thus the syntax is +documented for that purpose. + + +File: pcb.info, Node: q! Action, Next: Quit Action, Prev: q Action, Up: core actions + +F.1.64 q! +--------- + +q! + +Quits the application without confirming. + + Note that this command neither saves your data nor prompts for +confirmation. + + This is one of the command box helper actions. While it is a regular +action and can be used like any other action, its name and syntax are +optimized for use with the command box (`:') and thus the syntax is +documented for that purpose. + + +File: pcb.info, Node: Quit Action, Next: Redo Action, Prev: q! Action, Up: core actions + +F.1.65 Quit +----------- + +Quit() + +Quits the application after confirming. + + If you have unsaved changes, you will be prompted to confirm (or +save) before quitting. + + +File: pcb.info, Node: Redo Action, Next: RemoveSelected Action, Prev: Quit Action, Up: core actions + +F.1.66 Redo +----------- + +Redo() + +Redo recent"undo"operations. + + This routine allows you to recover from the last undo command. You +might want to do this if you thought that undo was going to revert +something other than what it actually did (in case you are confused +about which operations are un-doable), or if you have been backing up +through a long undo list and over-shoot your stopping point. Any +change that is made since the undo in question will trim the redo list. +For example if you add ten lines, then undo three of them you could use +redo to put them back, but if you move a line on the board before +performing the redo, you will lose the ability to "redo" the three +"undone" lines. + + +File: pcb.info, Node: RemoveSelected Action, Next: Renumber Action, Prev: Redo Action, Up: core actions + +F.1.67 RemoveSelected +--------------------- + +RemoveSelected() + +Removes any selected objects. + + +File: pcb.info, Node: Renumber Action, Next: Report Action, Prev: RemoveSelected Action, Up: core actions + +F.1.68 Renumber +--------------- + +Renumber() +Renumber(filename) + +Renumber all elements. The changes will be recorded to filename for +use in backannotating these changes to the schematic. + + +File: pcb.info, Node: Report Action, Next: ReportDialog Action, Prev: Renumber Action, Up: core actions + +F.1.69 Report +------------- + +Report(Object|DrillReport|FoundPins|NetLength|AllNetLengths|[,name]) + +Produce various report. + +`Object' + The object under the crosshair will be reported, describing various + aspects of the object. + +`DrillReport' + A report summarizing the number of drill sizes used, and how many + of each, will be produced. + +`FoundPins' + A report listing all pins and pads which are marked as "found" will + be produced. + +`NetLength' + The name and length of the net under the crosshair will be + reported to the message log. + +`AllNetLengths' + The name and length of the net under the crosshair will be + reported to the message log. An optional parameter specifies mm, + mil, pcb, or in units + + + +File: pcb.info, Node: ReportDialog Action, Next: RipUp Action, Prev: Report Action, Up: core actions + +F.1.70 ReportDialog +------------------- + +ReportDialog() + +Report on the object under the crosshair + + This is a shortcut for `Report(Object)'. + + +File: pcb.info, Node: RipUp Action, Next: rn Action, Prev: ReportDialog Action, Up: core actions + +F.1.71 RipUp +------------ + +RipUp(All|Selected|Element) + +Ripup auto-routed tracks, or convert an element to parts. + +`All' + Removes all lines and vias which were created by the autorouter. + +`Selected' + Removes all selected lines and vias which were created by the + autorouter. + +`Element' + Converts the element under the cursor to parts (vias and lines). + Note that this uses the highest numbered paste buffer. + + + +File: pcb.info, Node: rn Action, Next: RouteStyle Action, Prev: RipUp Action, Up: core actions + +F.1.72 rn +--------- + +rn [name] + +Reads netlist. + + If no filename is given a file select box will pop up. The file is +read via the command defined by the _RatCommand_ resource. The command +must send its output to _stdout_. + + Netlists are used for generating rat's nests (see *note Rats Nest::) +and for verifying the board layout (which is also accomplished by the +_Ratsnest_ command). + + This is one of the command box helper actions. While it is a regular +action and can be used like any other action, its name and syntax are +optimized for use with the command box (`:') and thus the syntax is +documented for that purpose. + + +File: pcb.info, Node: RouteStyle Action, Next: s Action, Prev: rn Action, Up: core actions + +F.1.73 RouteStyle +----------------- + +RouteStyle(1|2|3|4) + +Copies the indicated routing style into the current sizes. + + +File: pcb.info, Node: s Action, Next: SaveSettings Action, Prev: RouteStyle Action, Up: core actions + +F.1.74 s +-------- + +s [name] + +Saves layout data. + + Data and the filename are passed to the command defined by the +resource _saveCommand_. It must read the layout data from _stdin_. If +no filename is entered, either the last one is used again or, if it is +not available, a file select box will pop up. + + This is one of the command box helper actions. While it is a regular +action and can be used like any other action, its name and syntax are +optimized for use with the command box (`:') and thus the syntax is +documented for that purpose. + + +File: pcb.info, Node: SaveSettings Action, Next: SaveTo Action, Prev: s Action, Up: core actions + +F.1.75 SaveSettings +------------------- + +SaveSettings() +SaveSettings(local) + +Saves settings. + + If you pass no arguments, the settings are stored in +`$HOME/.pcb/settings'. If you pass the word `local' they're saved in +`./pcb.settings'. + + +File: pcb.info, Node: SaveTo Action, Next: Select Action, Prev: SaveSettings Action, Up: core actions + +F.1.76 SaveTo +------------- + +SaveTo(Layout|LayoutAs,filename) +SaveTo(AllConnections|AllUnusedPins|ElementConnections,filename) +SaveTo(PasteBuffer,filename) + +Saves data to a file. + +`Layout' + Saves the current layout. + +`LayoutAs' + Saves the current layout, and remembers the filename used. + +`AllConnections' + Save all connections to a file. + +`AllUnusedPins' + List all unused pins to a file. + +`ElementConnections' + Save connections to the element at the cursor to a file. + +`PasteBuffer' + Save the content of the active Buffer to a file. This is the + graphical way to create a footprint. + + + +File: pcb.info, Node: Select Action, Next: SetFlag Action, Prev: SaveTo Action, Up: core actions + +F.1.77 Select +------------- + +Select(Object|ToggleObject) +Select(All|Block|Connection) +Select(ElementByName|ObjectByName|PadByName|PinByName) +Select(ElementByName|ObjectByName|PadByName|PinByName, Name) +Select(TextByName|ViaByName|NetByName) +Select(TextByName|ViaByName|NetByName, Name) +Select(Convert) + +Toggles or sets the selection. + +`ElementByName' + +`ObjectByName' + +`PadByName' + +`PinByName' + +`TextByName' + +`ViaByName' + +`NetByName' + These all rely on having a regular expression parser built into + `pcb'. If the name is not specified then the user is prompted for + a pattern, and all objects that match the pattern and are of the + type specified are selected. + +`Object' + +`ToggleObject' + Selects the object under the cursor. + +`Block' + Selects all objects in a rectangle indicated by the cursor. + +`All' + Selects all objects on the board. + +`Connection' + Selects all connections with the "found" flag set. + +`Convert' + Converts the selected objects to an element. This uses the highest + numbered paste buffer. + + + +File: pcb.info, Node: SetFlag Action, Next: SetOctagon Action, Prev: Select Action, Up: core actions + +F.1.78 SetFlag +-------------- + +SetFlag(Object|Selected|SelectedObjects, flag) +SetFlag(SelectedLines|SelectedPins|SelectedVias, flag) +SetFlag(SelectedPads|SelectedTexts|SelectedNames, flag) +SetFlag(SelectedElements, flag) +flag = square | octagon | thermal | join + +Sets flags on objects. + + Turns the given flag on, regardless of its previous setting. See +`ChangeFlag'. + + SetFlag(SelectedPins,thermal) + + +File: pcb.info, Node: SetOctagon Action, Next: SetSame Action, Prev: SetFlag Action, Up: core actions + +F.1.79 SetOctagon +----------------- + +SetOctagon(Object|ToggleObject|SelectedElements|Selected) + +Sets the octagon-flag of objects. + + Pins, pads, and vias can have various shapes. All may be round. +Pins and pads may be square (obviously "square" pads are usually +rectangular). Pins and vias may be octagonal. When you change a shape +flag of an element, you actually change all of its pins and pads. + + Note that the square flag takes precedence over the octagon flag, +thus, if both the square and octagon flags are set, the object is +square. When the square flag is cleared, the pins and pads will be +either round or, if the octagon flag is set, octagonal. + + +File: pcb.info, Node: SetSame Action, Next: SetSquare Action, Prev: SetOctagon Action, Up: core actions + +F.1.80 SetSame +-------------- + +SetSame() + +Sets current layer and sizes to match indicated item. + + When invoked over any line, arc, polygon, or via, this changes the +current layer to be the layer that item is on, and changes the current +sizes (thickness, keepaway, drill, etc) according to that item. + + +File: pcb.info, Node: SetSquare Action, Next: SetThermal Action, Prev: SetSame Action, Up: core actions + +F.1.81 SetSquare +---------------- + +SetSquare(ToggleObject|SelectedElements|SelectedPins) + +sets the square-flag of objects. + + Note that `Pins' means pins and pads. + + Pins, pads, and vias can have various shapes. All may be round. +Pins and pads may be square (obviously "square" pads are usually +rectangular). Pins and vias may be octagonal. When you change a shape +flag of an element, you actually change all of its pins and pads. + + Note that the square flag takes precedence over the octagon flag, +thus, if both the square and octagon flags are set, the object is +square. When the square flag is cleared, the pins and pads will be +either round or, if the octagon flag is set, octagonal. + + +File: pcb.info, Node: SetThermal Action, Next: SetValue Action, Prev: SetSquare Action, Up: core actions + +F.1.82 SetThermal +----------------- + +SetThermal(Object|SelectedPins|SelectedVias|Selected, Style) + +Set the thermal (on the current layer) of pins or vias to the given +style. Style = 0 means no thermal. Style = 1 has diagonal fingers +with sharp edges. Style = 2 has horizontal and vertical fingers with +sharp edges. Style = 3 is a solid connection to the plane.Style = 4 +has diagonal fingers with rounded edges. Style = 5 has horizontal and +vertical fingers with rounded edges. + + This changes how/whether pins or vias connect to any rectangle or +polygon on the current layer. The first argument can specify one +object, or all selected pins, or all selected vias, or all selected +pins and vias. The second argument specifies the style of connection. +There are 5 possibilities: 0 - no connection, 1 - 45 degree fingers +with sharp edges, 2 - horizontal & vertical fingers with sharp edges, 3 +- solid connection, 4 - 45 degree fingers with rounded corners, 5 - +horizontal & vertical fingers with rounded corners. + + Pins and Vias may have thermals whether or not there is a polygon +available to connect with. However, they will have no effect without +the polygon. + + +File: pcb.info, Node: SetValue Action, Next: ToggleHideName Action, Prev: SetThermal Action, Up: core actions + +F.1.83 SetValue +--------------- + +SetValue(Grid|Line|LineSize|Text|TextScale|ViaDrillingHole|Via|ViaSize, delta) + +Change various board-wide values and sizes. + +`ViaDrillingHole' + Changes the diameter of the drill for new vias. + +`Grid' + Sets the grid spacing. + +`Line' + +`LineSize' + Changes the thickness of new lines. + +`Via' + +`ViaSize' + Changes the diameter of new vias. + +`Text' + +`TextScale' + Changes the size of new text. + + + +File: pcb.info, Node: ToggleHideName Action, Next: ToggleVendor Action, Prev: SetValue Action, Up: core actions + +F.1.84 ToggleHideName +--------------------- + +ToggleHideName(Object|SelectedElements) + +Toggles the visibility of element names. + + If names are hidden you won't see them on the screen and they will +not appear on the silk layer when you print the layout. + + +File: pcb.info, Node: ToggleVendor Action, Next: Undo Action, Prev: ToggleHideName Action, Up: core actions + +F.1.85 ToggleVendor +------------------- + +ToggleVendor() + +Toggles the state of automatic drill size mapping. + + When drill mapping is enabled, new instances of pins and vias will +have their drill holes mapped to one of the allowed drill sizes +specified in the currently loaded vendor drill table. To enable drill +mapping, a vendor resource file containing a drill table must be loaded +first. + + +File: pcb.info, Node: Undo Action, Next: UnloadVendor Action, Prev: ToggleVendor Action, Up: core actions + +F.1.86 Undo +----------- + +Undo() +Undo(ClearList) + +Undo recent changes. + + The unlimited undo feature of `Pcb' allows you to recover from most +operations that materially affect you work. Calling `Undo()' without +any parameter recovers from the last (non-undo) operation. `ClearList' +is used to release the allocated memory. `ClearList' is called whenever +a new layout is started or loaded. See also `Redo' and `Atomic'. + + Note that undo groups operations by serial number; changes with the +same serial number will be undone (or redone) as a group. See `Atomic'. + + +File: pcb.info, Node: UnloadVendor Action, Next: Unselect Action, Prev: Undo Action, Up: core actions + +F.1.87 UnloadVendor +------------------- + +UnloadVendor() + +Unloads the current vendor drill mapping table. + + +File: pcb.info, Node: Unselect Action, Next: w Action, Prev: UnloadVendor Action, Up: core actions + +F.1.88 Unselect +--------------- + +Unselect(All|Block|Connection) +Unselect(ElementByName|ObjectByName|PadByName|PinByName) +Unselect(ElementByName|ObjectByName|PadByName|PinByName, Name) +Unselect(TextByName|ViaByName) +Unselect(TextByName|ViaByName, Name) + +Unselects the object at the pointer location or the specified objects. + +`All' + Unselect all objects. + +`Block' + Unselect all objects in a rectangle given by the cursor. + +`Connection' + Unselect all connections with the "found" flag set. + +`ElementByName' + +`ObjectByName' + +`PadByName' + +`PinByName' + +`TextByName' + +`ViaByName' + These all rely on having a regular expression parser built into + `pcb'. If the name is not specified then the user is prompted for + a pattern, and all objects that match the pattern and are of the + type specified are unselected. + + + +File: pcb.info, Node: w Action, Next: wq Action, Prev: Unselect Action, Up: core actions + +F.1.89 w +-------- + +w [name] + +Saves layout data. + + This commands has been added for the convenience of `vi' users and +has the same functionality as `s'. + + This is one of the command box helper actions. While it is a regular +action and can be used like any other action, its name and syntax are +optimized for use with the command box (`:') and thus the syntax is +documented for that purpose. + + +File: pcb.info, Node: wq Action, Prev: w Action, Up: core actions + +F.1.90 wq +--------- + +wq + +Saves the layout data and quits. + + This command has been added for the convenience of `vi' users and +has the same functionality as `s' combined with `q'. + + This is one of the command box helper actions. While it is a regular +action and can be used like any other action, its name and syntax are +optimized for use with the command box (`:') and thus the syntax is +documented for that purpose. + + +File: pcb.info, Node: common actions, Next: gtk actions, Prev: core actions, Up: Action Reference + +F.2 common actions +================== + +* Menu: + +* LayersChanged Action:: Tells the GUI that the layers have changed. +* LibraryChanged Action:: Tells the GUI that the libraries have changed. +* NetlistChanged Action:: Tells the GUI that the netlist has changed. +* PCBChanged Action:: Tells the GUI that the whole PCB has changed. The optional``revert"parameter can be used as a hint to the GUI that the same design is beingreloaded, and that it might keep some viewport settings +* RouteStylesChanged Action:: Tells the GUI that the routing styles have changed. + + +File: pcb.info, Node: LayersChanged Action, Next: LibraryChanged Action, Up: common actions + +F.2.1 LayersChanged +------------------- + +LayersChanged() + +Tells the GUI that the layers have changed. + + This includes layer names, colors, stacking order, visibility, etc. + + This is one of a number of actions which are part of the HID +interface. The core functions use these actions to tell the current +GUI when to change the presented information in response to changes +that the GUI may not know about. The user normally does not invoke +these directly. + + +File: pcb.info, Node: LibraryChanged Action, Next: NetlistChanged Action, Prev: LayersChanged Action, Up: common actions + +F.2.2 LibraryChanged +-------------------- + +LibraryChanged() + +Tells the GUI that the libraries have changed. + + This is one of a number of actions which are part of the HID +interface. The core functions use these actions to tell the current +GUI when to change the presented information in response to changes +that the GUI may not know about. The user normally does not invoke +these directly. + + +File: pcb.info, Node: NetlistChanged Action, Next: PCBChanged Action, Prev: LibraryChanged Action, Up: common actions + +F.2.3 NetlistChanged +-------------------- + +NetlistChanged() + +Tells the GUI that the netlist has changed. + + This is one of a number of actions which are part of the HID +interface. The core functions use these actions to tell the current +GUI when to change the presented information in response to changes +that the GUI may not know about. The user normally does not invoke +these directly. + + +File: pcb.info, Node: PCBChanged Action, Next: RouteStylesChanged Action, Prev: NetlistChanged Action, Up: common actions + +F.2.4 PCBChanged +---------------- + +PCBChanged([revert]) + +Tells the GUI that the whole PCB has changed. The +optional"revert"parameter can be used as a hint to the GUI that the +same design is beingreloaded, and that it might keep some viewport +settings + + This is one of a number of actions which are part of the HID +interface. The core functions use these actions to tell the current +GUI when to change the presented information in response to changes +that the GUI may not know about. The user normally does not invoke +these directly. + + +File: pcb.info, Node: RouteStylesChanged Action, Prev: PCBChanged Action, Up: common actions + +F.2.5 RouteStylesChanged +------------------------ + +RouteStylesChanged() + +Tells the GUI that the routing styles have changed. + + This is one of a number of actions which are part of the HID +interface. The core functions use these actions to tell the current +GUI when to change the presented information in response to changes +that the GUI may not know about. The user normally does not invoke +these directly. + + +File: pcb.info, Node: gtk actions, Next: lesstif actions, Prev: common actions, Up: Action Reference + +F.3 gtk actions +=============== + +* Menu: + +* gtk About Action:: N_("Tell the user about this version of PCB."); +* gtk AdjustStyle Action:: Open the window which allows editing of the route styles. +* gtk Center Action:: N_("Moves the pointer to the center of the window."); +* gtk Cursor Action:: N_("Move the cursor."); +* gtk DoWindows Action:: N_("Open various GUI windows."); +* gtk EditLayerGroups Action:: Open the preferences window which allows editing of the layer groups. +* gtk GetXY Action:: N_("Get a coordinate."); +* gtk ImportGUI Action:: N_("Asks user which schematics to import into PCB. +"); +* gtk Pan Action:: N_("Start or stop panning (Mode = 1 to start, 0 to stop) +Optional thumb argument is ignored for now in gtk hid. +"); +* gtk Popup Action:: N_("Bring up the popup menu specified by `MenuName'. +If called by a mouse event then the mouse button number +must be specified as the optional second argument."); +* gtk Print Action:: N_("Print the layout."); +* gtk PrintCalibrate Action:: N_("Calibrate the printer."); +* gtk Save Action:: N_("Save layout and/or element data to a user-selected file."); +* gtk SelectLayer Action:: Select which layer is the current layer. +* gtk SetUnits Action:: N_("Set the default measurement units."); +* gtk SwapSides Action:: N_("Swaps the side of the board you're looking at."); +* gtk ToggleView Action:: Toggle the visibility of the specified layer or layer group. +* gtk Zoom Action:: N_("Various zoom factor changes."); + + +File: pcb.info, Node: gtk About Action, Next: gtk AdjustStyle Action, Up: gtk actions + +F.3.1 gtk About +--------------- + +About() + +N_("Tell the user about this version of PCB."); + + This just pops up a dialog telling the user which version of `pcb' +they're running. + + +File: pcb.info, Node: gtk AdjustStyle Action, Next: gtk Center Action, Prev: gtk About Action, Up: gtk actions + +F.3.2 gtk AdjustStyle +--------------------- + +AdjustStyle() + +Open the window which allows editing of the route styles. + + Opens the window which allows editing of the route styles. + + +File: pcb.info, Node: gtk Center Action, Next: gtk Cursor Action, Prev: gtk AdjustStyle Action, Up: gtk actions + +F.3.3 gtk Center +---------------- + +Center() + +N_("Moves the pointer to the center of the window."); + + Move the pointer to the center of the window, but only if it's +currently within the window already. + + +File: pcb.info, Node: gtk Cursor Action, Next: gtk DoWindows Action, Prev: gtk Center Action, Up: gtk actions + +F.3.4 gtk Cursor +---------------- + +Cursor(Type,DeltaUp,DeltaRight,Units) + +N_("Move the cursor."); + + This action moves the mouse cursor. Unlike other actions which take +coordinates, this action's coordinates are always relative to the +user's view of the board. Thus, a positive DELTAUP may move the cursor +towards the board origin if the board is inverted. + + Type is one of `Pan' or `Warp'. `Pan' causes the viewport to move +such that the crosshair is under the mouse cursor. `Warp' causes the +mouse cursor to move to be above the crosshair. + + UNITS can be one of the following: + +`mil' +`mm' + The cursor is moved by that amount, in board units. + +`grid' + The cursor is moved by that many grid points. + +`view' + The values are percentages of the viewport's view. Thus, a pan of + `100' would scroll the viewport by exactly the width of the + current view. + +`board' + The values are percentages of the board size. Thus, a move of + `50,50' moves you halfway across the board. + + + +File: pcb.info, Node: gtk DoWindows Action, Next: gtk EditLayerGroups Action, Prev: gtk Cursor Action, Up: gtk actions + +F.3.5 gtk DoWindows +------------------- + +DoWindows(1|2|3|4|5|6) +DoWindows(Layout|Library|Log|Netlist|Preferences|DRC) + +N_("Open various GUI windows."); + +`1' +`Layout' + Open the layout window. Since the layout window is always shown + anyway, this has no effect. + +`2' +`Library' + Open the library window. + +`3' +`Log' + Open the log window. + +`4' +`Netlist' + Open the netlist window. + +`5' +`Preferences' + Open the preferences window. + +`6' +`DRC' + Open the DRC violations window. + + + +File: pcb.info, Node: gtk EditLayerGroups Action, Next: gtk GetXY Action, Prev: gtk DoWindows Action, Up: gtk actions + +F.3.6 gtk EditLayerGroups +------------------------- + +EditLayerGroups() + +Open the preferences window which allows editing of the layer groups. + + Opens the preferences window which is where the layer groups are +edited. This action is primarily provides to provide menu resource +compatibility with the lesstif HID. + + +File: pcb.info, Node: gtk GetXY Action, Next: gtk ImportGUI Action, Prev: gtk EditLayerGroups Action, Up: gtk actions + +F.3.7 gtk GetXY +--------------- + +GetXY() + +N_("Get a coordinate."); + + Prompts the user for a coordinate, if one is not already selected. + + +File: pcb.info, Node: gtk ImportGUI Action, Next: gtk Pan Action, Prev: gtk GetXY Action, Up: gtk actions + +F.3.8 gtk ImportGUI +------------------- + +ImportGUI() + +N_("Asks user which schematics to import into PCB. "); + + Asks user which schematics to import into PCB. + + +File: pcb.info, Node: gtk Pan Action, Next: gtk Popup Action, Prev: gtk ImportGUI Action, Up: gtk actions + +F.3.9 gtk Pan +------------- + +Pan([thumb], Mode) + +N_("Start or stop panning (Mode = 1 to start, 0 to stop) Optional thumb +argument is ignored for now in gtk hid. "); + + Start or stop panning. To start call with Mode = 1, to stop call +with Mode = 0. + + +File: pcb.info, Node: gtk Popup Action, Next: gtk Print Action, Prev: gtk Pan Action, Up: gtk actions + +F.3.10 gtk Popup +---------------- + +Popup(MenuName, [Button]) + +N_("Bring up the popup menu specified by `MenuName'. If called by a +mouse event then the mouse button number must be specified as the +optional second argument."); + + This just pops up the specified menu. The menu must have been +defined as a named subresource of the Popups resource in the menu +resource file. + + +File: pcb.info, Node: gtk Print Action, Next: gtk PrintCalibrate Action, Prev: gtk Popup Action, Up: gtk actions + +F.3.11 gtk Print +---------------- + +Print() + +N_("Print the layout."); + + This will find the default printing HID, prompt the user for its +options, and print the layout. + + +File: pcb.info, Node: gtk PrintCalibrate Action, Next: gtk Save Action, Prev: gtk Print Action, Up: gtk actions + +F.3.12 gtk PrintCalibrate +------------------------- + +PrintCalibrate() + +N_("Calibrate the printer."); + + This will print a calibration page, which you would measure and type +the measurements in, so that future printouts will be more precise. + + +File: pcb.info, Node: gtk Save Action, Next: gtk SelectLayer Action, Prev: gtk PrintCalibrate Action, Up: gtk actions + +F.3.13 gtk Save +--------------- + +Save() +Save(Layout|LayoutAs) +Save(AllConnections|AllUnusedPins|ElementConnections) +Save(PasteBuffer) + +N_("Save layout and/or element data to a user-selected file."); + + This action is a GUI front-end to the core's `SaveTo' action (*note +SaveTo Action::). If you happen to pass a filename, like `SaveTo', +then `SaveTo' is called directly. Else, the user is prompted for a +filename to save, and then `SaveTo' is called with that filename. + + +File: pcb.info, Node: gtk SelectLayer Action, Next: gtk SetUnits Action, Prev: gtk Save Action, Up: gtk actions + +F.3.14 gtk SelectLayer +---------------------- + +SelectLayer(1..MAXLAYER|Silk|Rats) + +Select which layer is the current layer. + + The specified layer becomes the currently active layer. It is made +visible if it is not already visible + + +File: pcb.info, Node: gtk SetUnits Action, Next: gtk SwapSides Action, Prev: gtk SelectLayer Action, Up: gtk actions + +F.3.15 gtk SetUnits +------------------- + +SetUnits(mm|mil) + +N_("Set the default measurement units."); + +`mil' + Sets the display units to mils (1/1000 inch). + +`mm' + Sets the display units to millimeters. + + + +File: pcb.info, Node: gtk SwapSides Action, Next: gtk ToggleView Action, Prev: gtk SetUnits Action, Up: gtk actions + +F.3.16 gtk SwapSides +-------------------- + +SwapSides(|v|h|r) + +N_("Swaps the side of the board you're looking at."); + + This action changes the way you view the board. + +`v' + Flips the board over vertically (up/down). + +`h' + Flips the board over horizontally (left/right), like flipping + pages in a book. + +`r' + Rotates the board 180 degrees without changing sides. + + + If no argument is given, the board isn't moved but the opposite side +is shown. + + Normally, this action changes which pads and silk layer are drawn as +true silk, and which are drawn as the "invisible" layer. It also +determines which solder mask you see. + + As a special case, if the layer group for the side you're looking at +is visible and currently active, and the layer group for the opposite +is not visible (i.e. disabled), then this action will also swap which +layer group is visible and active, effectively swapping the "working +side" of the board. + + +File: pcb.info, Node: gtk ToggleView Action, Next: gtk Zoom Action, Prev: gtk SwapSides Action, Up: gtk actions + +F.3.17 gtk ToggleView +--------------------- + +ToggleView(1..MAXLAYER) +ToggleView(layername) +ToggleView(Silk|Rats|Pins|Vias|Mask|BackSide) + +Toggle the visibility of the specified layer or layer group. + + If you pass an integer, that layer is specified by index (the first +layer is `1', etc). If you pass a layer name, that layer is specified +by name. When a layer is specified, the visibility of the layer group +containing that layer is toggled. + + If you pass a special layer name, the visibility of those components +(silk, rats, etc) is toggled. Note that if you have a layer named the +same as a special layer, the layer is chosen over the special layer. + + +File: pcb.info, Node: gtk Zoom Action, Prev: gtk ToggleView Action, Up: gtk actions + +F.3.18 gtk Zoom +--------------- + +Zoom() +Zoom(factor) + +N_("Various zoom factor changes."); Changes the zoom (magnification) of +the view of the board. If no arguments are passed, the view is scaled +such that the board just fits inside the visible window (i.e. "view +all"). Otherwise, FACTOR specifies a change in zoom factor. It may be +prefixed by `+', `-', or `=' to change how the zoom factor is modified. +The FACTOR is a floating point number, such as `1.5' or `0.75'. + +`+FACTOR' + Values greater than 1.0 cause the board to be drawn smaller; more + of the board will be visible. Values between 0.0 and 1.0 cause + the board to be drawn bigger; less of the board will be visible. + +`-FACTOR' + Values greater than 1.0 cause the board to be drawn bigger; less of + the board will be visible. Values between 0.0 and 1.0 cause the + board to be drawn smaller; more of the board will be visible. + +`=FACTOR' + The FACTOR is an absolute zoom factor; the unit for this value is + "PCB units per screen pixel". Since PCB units are 0.01 mil, a + FACTOR of 1000 means 10 mils (0.01 in) per pixel, or 100 DPI, + about the actual resolution of most screens - resulting in an + "actual size" board. Similarly, a FACTOR of 100 gives you a 10x + actual size. + + + Note that zoom factors of zero are silently ignored. + + +File: pcb.info, Node: lesstif actions, Prev: gtk actions, Up: Action Reference + +F.4 lesstif actions +=================== + +* Menu: + +* lesstif About Action:: Tell the user about this version of PCB. +* lesstif AdjustSizes Action:: Let the user change the board size, DRC parameters, etc +* lesstif AdjustStyle Action:: Displays the route style adjustment window. +* lesstif Benchmark Action:: Benchmark the GUI speed. +* lesstif Command Action:: Displays the command line input window. +* lesstif Cursor Action:: Move the cursor. +* lesstif Debug Action:: Debug action. +* lesstif DebugXY Action:: Debug action, with coordinates +* lesstif DoWindows Action:: Open various GUI windows. +* lesstif DumpKeys Action:: Dump Lesstif key bindings. +* lesstif EditLayerGroups Action:: Let the user change the layer groupings +* lesstif Export Action:: Export the layout. +* lesstif GetXY Action:: Get a coordinate. +* lesstif ImportGUI Action:: Lets the user choose the schematics to import from +* lesstif LibraryShow Action:: Displays the library window. +* lesstif Load Action:: Load layout data from a user-selected file. +* lesstif LoadVendor Action:: Loads a user-selected vendor resource file. +* lesstif NetlistShow Action:: Selects the given pinname or netname in the netlist window. +* lesstif Print Action:: Print the layout. +* lesstif PrintCalibrate Action:: Calibrate the printer. +* lesstif PromptFor Action:: Prompt for a response. +* lesstif Return Action:: Simulate a passing or failing action. +* lesstif Save Action:: Save layout data to a user-selected file. +* lesstif SelectLayer Action:: Select which layer is the current layer. +* lesstif SetUnits Action:: Set the default measurement units. +* lesstif SwapSides Action:: Swaps the side of the board you're looking at. +* lesstif ToggleView Action:: Toggle the visibility of the specified layer or layer group. +* lesstif Zoom Action:: Various zoom factor changes. + + +File: pcb.info, Node: lesstif About Action, Next: lesstif AdjustSizes Action, Up: lesstif actions + +F.4.1 lesstif About +------------------- + +About() + +Tell the user about this version of PCB. + + This just pops up a dialog telling the user which version of `pcb' +they're running. + + +File: pcb.info, Node: lesstif AdjustSizes Action, Next: lesstif AdjustStyle Action, Prev: lesstif About Action, Up: lesstif actions + +F.4.2 lesstif AdjustSizes +------------------------- + +AdjustSizes() + +Let the user change the board size, DRC parameters, etc + + Displays a dialog box that lets the user change the board size, DRC +parameters, and text scale. + + The units are determined by the default display units. + + +File: pcb.info, Node: lesstif AdjustStyle Action, Next: lesstif Benchmark Action, Prev: lesstif AdjustSizes Action, Up: lesstif actions + +F.4.3 lesstif AdjustStyle +------------------------- + +AdjustStyle() + +Displays the route style adjustment window. + + +File: pcb.info, Node: lesstif Benchmark Action, Next: lesstif Command Action, Prev: lesstif AdjustStyle Action, Up: lesstif actions + +F.4.4 lesstif Benchmark +----------------------- + +Benchmark() + +Benchmark the GUI speed. + + This action is used to speed-test the Lesstif graphics subsystem. It +redraws the current screen as many times as possible in ten seconds. +It reports the amount of time needed to draw the screen once. + + +File: pcb.info, Node: lesstif Command Action, Next: lesstif Cursor Action, Prev: lesstif Benchmark Action, Up: lesstif actions + +F.4.5 lesstif Command +--------------------- + +Command() + +Displays the command line input window. + + The command window allows the user to manually enter actions to be +executed. Action syntax can be done one of two ways: + +`' + Follow the action name by an open parenthesis, arguments separated + by commas, end with a close parenthesis. Example: `Abc(1,2,3)' + +`' + Separate the action name and arguments by spaces. Example: `Abc 1 + 2 3'. + + + The first option allows you to have arguments with spaces in them, +but the second is more "natural" to type for most people. + + Note that action names are not case sensitive, but arguments normally +are. However, most actions will check for "keywords" in a case +insensitive way. + + There are three ways to finish with the command window. If you press +the `Enter' key, the command is invoked, the window goes away, and the +next time you bring up the command window it's empty. If you press the +`Esc' key, the window goes away without invoking anything, and the next +time you bring up the command window it's empty. If you change focus +away from the command window (i.e. click on some other window), the +command window goes away but the next time you bring it up it resumes +entering the command you were entering before. + + +File: pcb.info, Node: lesstif Cursor Action, Next: lesstif Debug Action, Prev: lesstif Command Action, Up: lesstif actions + +F.4.6 lesstif Cursor +-------------------- + +Cursor(Type,DeltaUp,DeltaRight,Units) + +Move the cursor. + + This action moves the mouse cursor. Unlike other actions which take +coordinates, this action's coordinates are always relative to the +user's view of the board. Thus, a positive DELTAUP may move the cursor +towards the board origin if the board is inverted. + + Type is one of `Pan' or `Warp'. `Pan' causes the viewport to move +such that the crosshair is under the mouse cursor. `Warp' causes the +mouse cursor to move to be above the crosshair. + + UNITS can be one of the following: + +`mil' +`mm' + The cursor is moved by that amount, in board units. + +`grid' + The cursor is moved by that many grid points. + +`view' + The values are percentages of the viewport's view. Thus, a pan of + `100' would scroll the viewport by exactly the width of the + current view. + +`board' + The values are percentages of the board size. Thus, a move of + `50,50' moves you halfway across the board. + + + +File: pcb.info, Node: lesstif Debug Action, Next: lesstif DebugXY Action, Prev: lesstif Cursor Action, Up: lesstif actions + +F.4.7 lesstif Debug +------------------- + +Debug(...) + +Debug action. + + This action exists to help debug scripts; it simply prints all its +arguments to stdout. + + +File: pcb.info, Node: lesstif DebugXY Action, Next: lesstif DoWindows Action, Prev: lesstif Debug Action, Up: lesstif actions + +F.4.8 lesstif DebugXY +--------------------- + +DebugXY(...) + +Debug action, with coordinates + + Like `Debug', but requires a coordinate. If the user hasn't yet +indicated a location on the board, the user will be prompted to click +on one. + + +File: pcb.info, Node: lesstif DoWindows Action, Next: lesstif DumpKeys Action, Prev: lesstif DebugXY Action, Up: lesstif actions + +F.4.9 lesstif DoWindows +----------------------- + +DoWindows(1|2|3|4) +DoWindows(Layout|Library|Log|Netlist) + +Open various GUI windows. + +`1' +`Layout' + Open the layout window. Since the layout window is always shown + anyway, this has no effect. + +`2' +`Library' + Open the library window. + +`3' +`Log' + Open the log window. + +`4' +`Netlist' + Open the netlist window. + + + +File: pcb.info, Node: lesstif DumpKeys Action, Next: lesstif EditLayerGroups Action, Prev: lesstif DoWindows Action, Up: lesstif actions + +F.4.10 lesstif DumpKeys +----------------------- + +DumpKeys() + +Dump Lesstif key bindings. + + Causes the list of key bindings (from `pcb-menu.res') to be dumped +to stdout. This is most useful when invoked from the command line like +this: + + pcb --action-string DumpKeys + + +File: pcb.info, Node: lesstif EditLayerGroups Action, Next: lesstif Export Action, Prev: lesstif DumpKeys Action, Up: lesstif actions + +F.4.11 lesstif EditLayerGroups +------------------------------ + +EditLayerGroups() + +Let the user change the layer groupings + + Displays a dialog that lets the user view and change the layer +groupings. Each layer (row) can be a member of any one layer group +(column). Note the special layers `solder' and `component' allow you +to specify which groups represent the top and bottom of the board. + + See *note ChangeName Action::. + + +File: pcb.info, Node: lesstif Export Action, Next: lesstif GetXY Action, Prev: lesstif EditLayerGroups Action, Up: lesstif actions + +F.4.12 lesstif Export +--------------------- + +Export() + +Export the layout. + + Prompts the user for an exporter to use. Then, prompts the user for +that exporter's options, and exports the layout. + + +File: pcb.info, Node: lesstif GetXY Action, Next: lesstif ImportGUI Action, Prev: lesstif Export Action, Up: lesstif actions + +F.4.13 lesstif GetXY +-------------------- + +GetXY() + +Get a coordinate. + + Prompts the user for a coordinate, if one is not already selected. + + +File: pcb.info, Node: lesstif ImportGUI Action, Next: lesstif LibraryShow Action, Prev: lesstif GetXY Action, Up: lesstif actions + +F.4.14 lesstif ImportGUI +------------------------ + +ImportGUI() + +Lets the user choose the schematics to import from + + Displays a dialog that lets the user select the schematic(s) to +import from, then saves that information in the layout's attributes for +future imports. + + +File: pcb.info, Node: lesstif LibraryShow Action, Next: lesstif Load Action, Prev: lesstif ImportGUI Action, Up: lesstif actions + +F.4.15 lesstif LibraryShow +-------------------------- + +LibraryShow() + +Displays the library window. + + +File: pcb.info, Node: lesstif Load Action, Next: lesstif LoadVendor Action, Prev: lesstif LibraryShow Action, Up: lesstif actions + +F.4.16 lesstif Load +------------------- + +Load() +Load(Layout|LayoutToBuffer|ElementToBuffer|Netlist|Revert) + +Load layout data from a user-selected file. + + This action is a GUI front-end to the core's `LoadFrom' action +(*note LoadFrom Action::). If you happen to pass a filename, like +`LoadFrom', then `LoadFrom' is called directly. Else, the user is +prompted for a filename to load, and then `LoadFrom' is called with +that filename. + + +File: pcb.info, Node: lesstif LoadVendor Action, Next: lesstif NetlistShow Action, Prev: lesstif Load Action, Up: lesstif actions + +F.4.17 lesstif LoadVendor +------------------------- + +LoadVendor() + +Loads a user-selected vendor resource file. + + The user is prompted for a file to load, and then `LoadVendorFrom' +is called (*note LoadVendorFrom Action::) to load that vendor file. + + +File: pcb.info, Node: lesstif NetlistShow Action, Next: lesstif Print Action, Prev: lesstif LoadVendor Action, Up: lesstif actions + +F.4.18 lesstif NetlistShow +-------------------------- + +NetlistShow(pinname|netname) + +Selects the given pinname or netname in the netlist window. + + +File: pcb.info, Node: lesstif Print Action, Next: lesstif PrintCalibrate Action, Prev: lesstif NetlistShow Action, Up: lesstif actions + +F.4.19 lesstif Print +-------------------- + +Print() + +Print the layout. + + This will find the default printing HID, prompt the user for its +options, and print the layout. + + +File: pcb.info, Node: lesstif PrintCalibrate Action, Next: lesstif PromptFor Action, Prev: lesstif Print Action, Up: lesstif actions + +F.4.20 lesstif PrintCalibrate +----------------------------- + +PrintCalibrate() + +Calibrate the printer. + + This will print a calibration page, which you would measure and type +the measurements in, so that future printouts will be more precise. + + +File: pcb.info, Node: lesstif PromptFor Action, Next: lesstif Return Action, Prev: lesstif PrintCalibrate Action, Up: lesstif actions + +F.4.21 lesstif PromptFor +------------------------ + +PromptFor([message[,default]]) + +Prompt for a response. + + This is mostly for testing the lesstif HID interface. The parameters +are passed to the `prompt_for()' HID function, causing the user to be +prompted for a response. The respose is simply printed to the user's +stdout. + + +File: pcb.info, Node: lesstif Return Action, Next: lesstif Save Action, Prev: lesstif PromptFor Action, Up: lesstif actions + +F.4.22 lesstif Return +--------------------- + +Return(0|1) + +Simulate a passing or failing action. + + This is for testing. If passed a 0, does nothing and succeeds. If +passed a 1, does nothing but pretends to fail. + + +File: pcb.info, Node: lesstif Save Action, Next: lesstif SelectLayer Action, Prev: lesstif Return Action, Up: lesstif actions + +F.4.23 lesstif Save +------------------- + +Save() +Save(Layout|LayoutAs) +Save(AllConnections|AllUnusedPins|ElementConnections) +Save(PasteBuffer) + +Save layout data to a user-selected file. + + This action is a GUI front-end to the core's `SaveTo' action (*note +SaveTo Action::). If you happen to pass a filename, like `SaveTo', +then `SaveTo' is called directly. Else, the user is prompted for a +filename to save, and then `SaveTo' is called with that filename. + + +File: pcb.info, Node: lesstif SelectLayer Action, Next: lesstif SetUnits Action, Prev: lesstif Save Action, Up: lesstif actions + +F.4.24 lesstif SelectLayer +-------------------------- + +SelectLayer(1..MAXLAYER|Silk|Rats) + +Select which layer is the current layer. + + The specified layer becomes the currently active layer. It is made +visible if it is not already visible + + +File: pcb.info, Node: lesstif SetUnits Action, Next: lesstif SwapSides Action, Prev: lesstif SelectLayer Action, Up: lesstif actions + +F.4.25 lesstif SetUnits +----------------------- + +SetUnits(mm|mil) + +Set the default measurement units. + +`mil' + Sets the display units to mils (1/1000 inch). + +`mm' + Sets the display units to millimeters. + + + +File: pcb.info, Node: lesstif SwapSides Action, Next: lesstif ToggleView Action, Prev: lesstif SetUnits Action, Up: lesstif actions + +F.4.26 lesstif SwapSides +------------------------ + +SwapSides(|v|h|r) + +Swaps the side of the board you're looking at. + + This action changes the way you view the board. + +`v' + Flips the board over vertically (up/down). + +`h' + Flips the board over horizontally (left/right), like flipping + pages in a book. + +`r' + Rotates the board 180 degrees without changing sides. + + + If no argument is given, the board isn't moved but the opposite side +is shown. + + Normally, this action changes which pads and silk layer are drawn as +true silk, and which are drawn as the "invisible" layer. It also +determines which solder mask you see. + + As a special case, if the layer group for the side you're looking at +is visible and currently active, and the layer group for the opposite +is not visible (i.e. disabled), then this action will also swap which +layer group is visible and active, effectively swapping the "working +side" of the board. + + +File: pcb.info, Node: lesstif ToggleView Action, Next: lesstif Zoom Action, Prev: lesstif SwapSides Action, Up: lesstif actions + +F.4.27 lesstif ToggleView +------------------------- + +ToggleView(1..MAXLAYER) +ToggleView(layername) +ToggleView(Silk|Rats|Pins|Vias|Mask|BackSide) + +Toggle the visibility of the specified layer or layer group. + + If you pass an integer, that layer is specified by index (the first +layer is `1', etc). If you pass a layer name, that layer is specified +by name. When a layer is specified, the visibility of the layer group +containing that layer is toggled. + + If you pass a special layer name, the visibility of those components +(silk, rats, etc) is toggled. Note that if you have a layer named the +same as a special layer, the layer is chosen over the special layer. + + +File: pcb.info, Node: lesstif Zoom Action, Prev: lesstif ToggleView Action, Up: lesstif actions + +F.4.28 lesstif Zoom +------------------- + +Zoom() +Zoom(factor) + +Various zoom factor changes. + + Changes the zoom (magnification) of the view of the board. If no +arguments are passed, the view is scaled such that the board just fits +inside the visible window (i.e. "view all"). Otherwise, FACTOR +specifies a change in zoom factor. It may be prefixed by `+', `-', or +`=' to change how the zoom factor is modified. The FACTOR is a +floating point number, such as `1.5' or `0.75'. + +`+FACTOR' + Values greater than 1.0 cause the board to be drawn smaller; more + of the board will be visible. Values between 0.0 and 1.0 cause + the board to be drawn bigger; less of the board will be visible. + +`-FACTOR' + Values greater than 1.0 cause the board to be drawn bigger; less of + the board will be visible. Values between 0.0 and 1.0 cause the + board to be drawn smaller; more of the board will be visible. + +`=FACTOR' + The FACTOR is an absolute zoom factor; the unit for this value is + "PCB units per screen pixel". Since PCB units are 0.01 mil, a + FACTOR of 1000 means 10 mils (0.01 in) per pixel, or 100 DPI, + about the actual resolution of most screens - resulting in an + "actual size" board. Similarly, a FACTOR of 100 gives you a 10x + actual size. + + + Note that zoom factors of zero are silently ignored. + + +File: pcb.info, Node: Glossary, Next: Index, Prev: Action Reference, Up: Top + +Appendix G Glossary +******************* + +Footprint + The pattern of metal, silkscreen, soldermask relief, and drills + which defines where you place a component on a circuit board. + Footprints are the placed by the user onto the PC board during the + placement phase of PCB layout. + +Gerber File + The file format used in the industry to convey a board database to + the manufacturer is RS-274X (which replaces the now obsolete + RS-274D format). This file format was originally developed by + Gerber for their photo plotters and thus RS-274D and RS-274X + format files are often times refered to as "Gerber" files. + +Thermal, Thermal Relief + A thermal relief is a way of connecting a pin to a ground or power + plane. Instead of directly connecting to the plane, small "spokes" + are used to increase the thermal resistance between the pin and + the plane. Often times these connections are refered to as simply + a thermal. By increasing the thermal resistance to the plane, it + becomes easier to solder to the pin. In the drawing below, the + pin on the left is connected to the polygon using a solid + connection with no thermal relief, the middle pin is connected + using a thermal, while the pin on the right has no connection to + the polygon. In PCB, the "Thermal" Tool is used to make both a + solid connection and one with thermal relief (see *note Polygon + Objects::). + + [image src="thermal.png" alt="Example of a thermal relief"] + + +File: pcb.info, Node: Index, Prev: Glossary, Up: Top + +Index of Resources +****************** + +[index] +* Menu: + +* absoluteGrid: Resources. (line 9) +* alignmentDistance: Resources. (line 13) +* allDirectionLines: Resources. (line 17) +* backgroundImage: Resources. (line 21) +* backupInterval: Resources. (line 43) +* bloat: Resources. (line 52) +* BTNMOD: running configure. (line 25) +* connectedColor: Resources. (line 55) +* cross hairColor: Resources. (line 60) +* DEFAULTFONT: running configure. (line 16) +* DEFAULTLIBRARY: running configure. (line 19) +* Element Search: Regular Expressions. (line 6) +* elementColor: Resources. (line 68) +* elementCommand <1>: File Formats. (line 14) +* elementCommand: Resources. (line 74) +* elementContentsCommand: Resources. (line 173) +* elementPath: Resources. (line 85) +* elementSelectedColor: Resources. (line 68) +* Exporting a layout: Exporting. (line 6) +* fileCommand <1>: File Formats. (line 14) +* fileCommand: Resources. (line 93) +* filePath: Resources. (line 102) +* fontCommand <1>: File Formats. (line 14) +* fontCommand: Resources. (line 110) +* fontFile: Resources. (line 118) +* fontPath: Resources. (line 124) +* GNUM4: running configure. (line 22) +* grid: Resources. (line 128) +* gridColor: Resources. (line 133) +* INFOLIBDIR: running configure. (line 10) +* invisibleObjectsColor: Resources. (line 141) +* layerColor: Resources. (line 145) +* layerGroups: Resources. (line 151) +* layerName: Resources. (line 159) +* layerSelectedColor: Resources. (line 145) +* libraryCommand <1>: File Formats. (line 14) +* libraryCommand: Resources. (line 163) +* libraryContentsCommand: File Formats. (line 14) +* libraryFilename: Resources. (line 179) +* libraryPath: Resources. (line 184) +* lineThickness: Resources. (line 189) +* Measuring distances: Measuring distances. (line 6) +* media: Resources. (line 195) +* offLimitColor: Resources. (line 203) +* PCBLIBDIR: running configure. (line 13) +* pinColor: Resources. (line 208) +* pinoutFont0..6: Resources. (line 213) +* pinoutNameLength: Resources. (line 217) +* pinoutOffsetX: Resources. (line 222) +* pinoutOffsetY: Resources. (line 222) +* pinoutTextOffsetX: Resources. (line 228) +* pinoutTextOffsetY: Resources. (line 228) +* pinoutZoom: Resources. (line 234) +* pinSelectedColor: Resources. (line 208) +* printCommand: Resources. (line 239) +* raiseLogWindow: Resources. (line 244) +* ratCommand: Resources. (line 248) +* ratPath: Resources. (line 252) +* Regular Expressions: Regular Expressions. (line 6) +* resetAfterElement: Resources. (line 255) +* ringBellWhenFinished: Resources. (line 262) +* routeStyle: Resources. (line 267) +* rubberBandMode: Resources. (line 274) +* saveCommand <1>: File Formats. (line 14) +* saveCommand: Resources. (line 278) +* saveInTMP: Resources. (line 285) +* saveLastCommand: Resources. (line 294) +* Searching for elements: Searching for elements. + (line 6) +* shrink: Resources. (line 299) +* size: Resources. (line 302) +* stipplePolygons: Resources. (line 307) +* textScale: Resources. (line 313) +* useLogWindow: Resources. (line 317) +* viaColor: Resources. (line 324) +* viaDrillingHole: Resources. (line 330) +* viaSelectedColor: Resources. (line 324) +* viaThickness: Resources. (line 330) +* volume: Resources. (line 338) +* warnColor: Resources. (line 343) +* zoom: Resources. (line 347) + +Index of Actions, Commands and Options +************************************** + +[index] +* Menu: + +* -- basename : nelma Options. (line 6) +* --action-script : General Options. (line 47) +* --action-string : General Options. (line 50) +* --align-marks: Postscript Export. (line 12) +* --alignment-distance : Sizes. (line 64) +* --all-direction-lines: General GUI Options. (line 35) +* --all-layers: Gerber Export. (line 9) +* --as-shown <1>: PNG Options. (line 23) +* --as-shown: Encapsulated Postscript Export. + (line 13) +* --auto-mirror: Postscript Export. (line 25) +* --background-color : Colors. (line 12) +* --backup-interval: General Options. (line 30) +* --bg-image <1>: lesstif GUI Options. (line 9) +* --bg-image : GTK+ GUI Options. (line 9) +* --black-color : Colors. (line 6) +* --bloat : DRC Options. (line 9) +* --bomfile : BOM Creation. (line 6) +* --clear-line: General GUI Options. (line 21) +* --connected-color : Colors. (line 54) +* --copper-height : nelma Options. (line 12) +* --copyright: General Options. (line 15) +* --cross-color : Colors. (line 18) +* --crosshair-color : Colors. (line 15) +* --default-font : Paths. (line 12) +* --default-PCB-height : Sizes. (line 57) +* --default-PCB-width : Sizes. (line 54) +* --dpi: PNG Options. (line 9) +* --dpi : nelma Options. (line 9) +* --draw-grid: General GUI Options. (line 18) +* --drill-copper: Postscript Export. (line 61) +* --drill-helper: Postscript Export. (line 9) +* --dump-actions: General Options. (line 24) +* --element-color : Colors. (line 36) +* --element-command : Commands. (line 17) +* --element-path : General Options. (line 42) +* --element-selected-color : Colors. (line 48) +* --eps-file : Encapsulated Postscript Export. + (line 6) +* --eps-scale : Encapsulated Postscript Export. + (line 10) +* --fab-author : General Options. (line 53) +* --file-command : Commands. (line 14) +* --file-path : Paths. (line 15) +* --fill-page: Postscript Export. (line 22) +* --font-command : Commands. (line 11) +* --font-path : Paths. (line 20) +* --format : PNG Options. (line 35) +* --full-poly: General GUI Options. (line 24) +* --gerberfile : Gerber Export. (line 6) +* --grid : Sizes. (line 68) +* --grid-color : Colors. (line 60) +* --grid-units-mm : General Options. (line 27) +* --groups : General Options. (line 34) +* --help: General Options. (line 6) +* --invisible-mark-color : Colors. (line 45) +* --invisible-objects-color : Colors. (line 42) +* --keepaway : Sizes. (line 50) +* --layer-color- : Colors. (line 63) +* --layer-name-1 : Layer Names. (line 6) +* --layer-name-2 : Layer Names. (line 9) +* --layer-name-3 : Layer Names. (line 12) +* --layer-name-4 : Layer Names. (line 15) +* --layer-name-5 : Layer Names. (line 18) +* --layer-name-6 : Layer Names. (line 21) +* --layer-name-7 : Layer Names. (line 24) +* --layer-name-8 : Layer Names. (line 27) +* --layer-selected-color- : Colors. (line 66) +* --layer-stack : General Options. (line 56) +* --lib-command : Commands. (line 27) +* --lib-command-dir : Commands. (line 24) +* --lib-contents-command : Commands. (line 31) +* --lib-name : Paths. (line 9) +* --lib-newlib : Paths. (line 6) +* --lib-path : Paths. (line 24) +* --line-thickness : Sizes. (line 42) +* --listen <1>: lesstif GUI Options. (line 6) +* --listen: GTK+ GUI Options. (line 6) +* --lprcommand : lpr Printing Options. + (line 6) +* --mask-color : Colors. (line 73) +* --media : Postscript Export. (line 37) +* --min-drill : DRC Options. (line 21) +* --min-ring : DRC Options. (line 24) +* --min-silk : DRC Options. (line 18) +* --min-width : DRC Options. (line 15) +* --minimum polygon area : Sizes. (line 71) +* --mirror: Postscript Export. (line 19) +* --monochrome <1>: PNG Options. (line 26) +* --monochrome: Encapsulated Postscript Export. + (line 16) +* --multi-file: Postscript Export. (line 51) +* --off-limit-color : Colors. (line 57) +* --only-visible: Encapsulated Postscript Export. + (line 19) +* --only-vivible: PNG Options. (line 29) +* --outfile : PNG Options. (line 6) +* --outline: Postscript Export. (line 16) +* --pcb-menu <1>: lesstif GUI Options. (line 15) +* --pcb-menu : GTK+ GUI Options. (line 15) +* --photo-flip-x: PNG Options. (line 48) +* --photo-flip-y: PNG Options. (line 52) +* --photo-mode: PNG Options. (line 45) +* --pin-color : Colors. (line 27) +* --pin-name-color : Colors. (line 33) +* --pin-selected-color : Colors. (line 30) +* --pinout-offset-x : General GUI Options. (line 6) +* --pinout-offset-y : General GUI Options. (line 9) +* --pinout-text-offset-x : General GUI Options. (line 12) +* --pinout-text-offset-y : General GUI Options. (line 15) +* --png-bloat : PNG Options. (line 39) +* --print-file : Commands. (line 21) +* --ps-bloat : Postscript Export. (line 31) +* --ps-color: Postscript Export. (line 28) +* --ps-invert: Postscript Export. (line 34) +* --psfade : Postscript Export. (line 44) +* --psfile : Postscript Export. (line 6) +* --rat-color : Colors. (line 39) +* --rat-command : Commands. (line 39) +* --rat-selected-color : Colors. (line 51) +* --rat-thickness : Sizes. (line 45) +* --reset-after-element: General Options. (line 68) +* --ring-bell-finished: General Options. (line 72) +* --route-styles : General Options. (line 37) +* --save-command : Commands. (line 36) +* --save-in-tmp: General Options. (line 63) +* --save-last-command: General Options. (line 60) +* --scale : Postscript Export. (line 47) +* --show-actions: General Options. (line 21) +* --show-defaults: General Options. (line 18) +* --show-legend: Postscript Export. (line 64) +* --show-number: General GUI Options. (line 38) +* --shrink : DRC Options. (line 12) +* --snap-pin: General GUI Options. (line 31) +* --substrate-epsilon : nelma Options. (line 18) +* --substrate-height : nelma Options. (line 15) +* --text-scale : Sizes. (line 60) +* --unique-names: General GUI Options. (line 27) +* --use-alpha: PNG Options. (line 32) +* --verbose <1>: Gerber Export. (line 12) +* --verbose: General Options. (line 12) +* --version: General Options. (line 9) +* --via-color : Colors. (line 21) +* --via-drilling-hole : Sizes. (line 39) +* --via-selected-color : Colors. (line 24) +* --via-thickness : Sizes. (line 36) +* --warn-color : Colors. (line 70) +* --x-max: PNG Options. (line 13) +* --xcalib : Postscript Export. (line 55) +* --xy-max: PNG Options. (line 19) +* --xy-unit : BOM Creation. (line 12) +* --xyfile : BOM Creation. (line 9) +* --y-max: PNG Options. (line 16) +* --ycalib : Postscript Export. (line 58) +* :actionCommand(): User Commands. (line 75) +* :l: User Commands. (line 33) +* :le: User Commands. (line 39) +* :m: User Commands. (line 45) +* :q: User Commands. (line 51) +* :rn: User Commands. (line 61) +* :s: User Commands. (line 55) +* :w[q]: User Commands. (line 71) +* AddRats(): Actions. (line 27) +* ApplyVendor() <1>: ApplyVendor Action. (line 8) +* ApplyVendor(): Actions. (line 54) +* Atomic(): Actions. (line 58) +* Bell(): Actions. (line 68) +* ChangeClearSize(): Actions. (line 72) +* ChangeDrillSize(): Actions. (line 83) +* ChangeFlag(): Actions. (line 93) +* ChangeHole(): Actions. (line 101) +* ChangeName(): Actions. (line 107) +* ChangeOctagon(): Actions. (line 117) +* ChangePinName(): Actions. (line 123) +* ChangeSize(): Actions. (line 129) +* ChangeSquare(): Actions. (line 148) +* ClrFlag(): Actions. (line 154) +* Command(): Actions. (line 160) +* Connection(): Actions. (line 167) +* DeleteRats(): Actions. (line 181) +* DisableVendor() <1>: DisableVendor Action. + (line 10) +* DisableVendor(): Actions. (line 188) +* DisperseElements(): Actions. (line 193) +* Display(): Actions. (line 199) +* DRC(): Actions. (line 234) +* EditLayerGroups(): Actions. (line 250) +* EnableVendor() <1>: EnableVendor Action. (line 10) +* EnableVendor(): Actions. (line 254) +* ExecuteFile(): Actions. (line 238) +* Load(): Actions. (line 259) +* LoadVendor(): Actions. (line 265) +* LoadVendorFrom(): LoadVendorFrom Action. + (line 10) +* MarkCrosshair(): Actions. (line 269) +* Mode(): Actions. (line 277) +* MovePointer(): Actions. (line 326) +* MoveToCurrentLayer(): Actions. (line 340) +* New(): Actions. (line 350) +* PasteBuffer(): Actions. (line 355) +* Polygon(): Actions. (line 382) +* Print(): Actions. (line 392) +* Quit(): Actions. (line 412) +* Redo(): Actions. (line 416) +* RemoveSelected(): Actions. (line 430) +* Report(): Actions. (line 434) +* RouteStyle(): Actions. (line 440) +* Save(): Actions. (line 450) +* Select(): Actions. (line 459) +* SetFlag(): Actions. (line 471) +* SetValue(): Actions. (line 477) +* SwapSides(): Actions. (line 499) +* SwitchDrawingLayer(): Actions. (line 503) +* ToggleHideName(): Actions. (line 509) +* ToggleVendor() <1>: ToggleVendor Action. (line 10) +* ToggleVendor(): Actions. (line 516) +* ToggleVisibility(): Actions. (line 521) +* Undo(): Actions. (line 528) +* UnloadVendor() <1>: UnloadVendor Action. (line 10) +* UnloadVendor(): Actions. (line 539) +* Unselect(): Actions. (line 543) + +Index of Concepts +***************** + +[index] +* Menu: + +* /tmp <1>: Resources. (line 285) +* /tmp: Loading and Saving. (line 18) +* action command: User Commands. (line 75) +* action reference: Action Reference. (line 6) +* actions: Actions. (line 6) +* actions file, executing: Actions. (line 238) +* Actions, initiating: User Commands. (line 75) +* align-marks: Postscript Export. (line 12) +* alignment: Resources. (line 13) +* alignment targets: Printing. (line 47) +* Alpha: DEC Alpha. (line 6) +* arc: Arc Objects. (line 6) +* arc, an example: Arcs. (line 6) +* architecture <1>: Linux. (line 6) +* architecture <2>: SCO. (line 6) +* architecture <3>: DEC Alpha. (line 6) +* architecture <4>: SGI. (line 6) +* architecture <5>: Sun. (line 6) +* architecture: HP. (line 6) +* arrow tool: Arrow Tool. (line 6) +* as-shown (EPS): Encapsulated Postscript Export. + (line 13) +* ASCII files, format of: File Formats. (line 6) +* Atari version: History. (line 6) +* atomic: Actions. (line 58) +* auto-router: Menu. (line 121) +* autorouter: Autorouter. (line 6) +* background: Resources. (line 21) +* backup <1>: Resources. (line 43) +* backup: Loading and Saving. (line 18) +* bell: Actions. (line 68) +* bill of materials: bom. (line 6) +* bloat: Resources. (line 52) +* bom: bom. (line 6) +* buffer, an example: Pastebuffer. (line 6) +* buffer, convert contents to element: Elements. (line 59) +* Buffer, popup menu: Menu. (line 109) +* buffer, selecting a: Actions. (line 355) +* button translations: Actions. (line 6) +* cat: Resources. (line 93) +* centering: Actions. (line 199) +* centroid file format: Centroid File Format. + (line 6) +* centroid file, algorithms: Centroid File Format. + (line 37) +* change active layer: Layer Controls. (line 6) +* change drawing layer: Actions. (line 503) +* change object name: Actions. (line 107) +* change settings: Actions. (line 477) +* change sizes: Actions. (line 72) +* change square flag: Actions. (line 148) +* change viewing side: Actions. (line 499) +* changing layers: Moving and Copying. (line 20) +* changing pin/pad names: Actions. (line 123) +* clearance: Line Objects. (line 38) +* clearance, changing of objects: Actions. (line 72) +* clearance, for new lines: Menu. (line 79) +* clipping lines to 45 degree <1>: Actions. (line 199) +* clipping lines to 45 degree: Resources. (line 17) +* closing a polygon: Actions. (line 382) +* cnc: gcode. (line 6) +* color printout: Printing. (line 32) +* color, warning: Resources. (line 343) +* colors: Resources. (line 55) +* command-line options: Command-Line Options. + (line 6) +* compile, how to: compiling. (line 6) +* configure: running configure. (line 6) +* connection, removing an: Translations. (line 11) +* connections, colors: Resources. (line 55) +* connections, creating list of: Connection Lists. (line 6) +* connections, reseting: Actions. (line 167) +* connections, reseting after element: Resources. (line 255) +* connections, searching for: Actions. (line 167) +* Connects, popup menu: Menu. (line 121) +* copy an object: Translations. (line 40) +* copying objects: Actions. (line 355) +* copying, an example: Moving and Copying. (line 6) +* creating objects: Common. (line 6) +* cursor color: Resources. (line 60) +* cursor movements: Actions. (line 326) +* cursor position: Actions. (line 269) +* cursor steps: Resources. (line 128) +* cutting objects: Actions. (line 355) +* DEC: DEC Alpha. (line 6) +* default font: Resources. (line 118) +* default layout size: Resources. (line 302) +* default library: Resources. (line 179) +* default text scaling: Resources. (line 313) +* default translations: Translations. (line 6) +* design rule checker, invoking: Menu. (line 121) +* design rule checking <1>: Actions. (line 234) +* design rule checking: Design Rule Checking. + (line 6) +* device, selecting an output: Printing. (line 21) +* directory /tmp <1>: Resources. (line 285) +* directory /tmp: Loading and Saving. (line 18) +* dispersing elements: Actions. (line 193) +* display: Resources. (line 307) +* displaying element names <1>: Actions. (line 199) +* displaying element names: Menu. (line 49) +* displaying pinout: Actions. (line 199) +* displaying status information: Status-line and Input-field. + (line 6) +* distributing elements: Actions. (line 193) +* DOS filenames: Printing. (line 80) +* drawing objects: Drawing and Removing. + (line 6) +* drc <1>: Actions. (line 234) +* drc <2>: Resources. (line 52) +* drc: Design Rule Checking. + (line 6) +* drill: Actions. (line 434) +* drill report: Menu. (line 143) +* drill sizes, list of standard: Standard Drill Sizes. + (line 6) +* Drill table: Vendor drill mapping. + (line 6) +* drill-helper: Postscript Export. (line 9) +* drilling hole, changing of objects: Actions. (line 83) +* drilling hole, setting of initial size: Actions. (line 477) +* Edit, popup menu: Menu. (line 40) +* element name, hiding: Actions. (line 509) +* element name, removing from silk-screen: Actions. (line 509) +* Element Search: Regular Expressions. (line 6) +* element, an example: Elements. (line 6) +* element, an overview: Element Objects. (line 6) +* element, color: Resources. (line 68) +* element, command: Resources. (line 74) +* element, creating a new package: Elements. (line 59) +* element, display names of <1>: Actions. (line 199) +* element, display names of: Menu. (line 49) +* element, editing: Menu. (line 109) +* element, file format: Element File. (line 6) +* element, files: Resources. (line 74) +* element, loading to buffer: User Commands. (line 39) +* element, move name of: Translations. (line 40) +* elements, dispersing: Actions. (line 193) +* elements, distributing: Actions. (line 193) +* encapsulated postscript: eps. (line 6) +* entering user commands: User Commands. (line 6) +* eps: eps. (line 6) +* erasing objects: Drawing and Removing. + (line 6) +* example files: Elements. (line 19) +* example of buffer handling: Pastebuffer. (line 6) +* example of connection lists: Connection Lists. (line 6) +* example of copying: Moving and Copying. (line 6) +* example of creating an element: Elements. (line 59) +* example of element handling: Elements. (line 6) +* example of line handling: Lines. (line 6) +* example of loading: Loading and Saving. (line 6) +* example of loading an element file: Elements. (line 41) +* example of moving: Moving and Copying. (line 6) +* example of pastebuffer handling: Pastebuffer. (line 6) +* example of pin handling: Elements. (line 41) +* example of polygon handling: Polygons. (line 6) +* example of printing: Printing. (line 6) +* example of rectangle handling: Polygons. (line 6) +* example of saving: Loading and Saving. (line 6) +* example of text handling: Text. (line 6) +* example of via handling: Vias. (line 6) +* exit <1>: Actions. (line 412) +* exit: User Commands. (line 51) +* Exporting a layout: Exporting. (line 6) +* file format, element data: Element File. (line 6) +* file format, font data: Font File. (line 6) +* file format, layout data: Layout File. (line 6) +* file format, libraries: Library File. (line 6) +* file format, library contents: Library Contents File. + (line 6) +* file formats: File Formats. (line 6) +* file formats, pads and lines: Pad and Line Representation. + (line 6) +* file load command: Resources. (line 93) +* file save command: Resources. (line 278) +* File sytax: File Syntax. (line 6) +* File, popup menu: Menu. (line 27) +* flags, changing: Actions. (line 93) +* flags, clearing: Actions. (line 154) +* flags, setting: Actions. (line 471) +* font command: Resources. (line 110) +* font file, format of: Font File. (line 6) +* font files: Resources. (line 110) +* font, an overview: Symbol Objects. (line 6) +* font, used for pin names: Resources. (line 213) +* format of element files: Element File. (line 6) +* format of font files: Font File. (line 6) +* format of layout files: Layout File. (line 6) +* format of libraries: Library File. (line 6) +* format of library contents: Library Contents File. + (line 6) +* FreeBSD: BSD. (line 6) +* g-code: gcode. (line 6) +* gcode: gcode. (line 6) +* gEDA, how to interface with: gEDA. (line 6) +* gerber: gerber. (line 7) +* glossary: Glossary. (line 6) +* GNU build system: quickstart. (line 6) +* GNU configure script: running configure. (line 6) +* grid <1>: Resources. (line 9) +* grid: Layout Area. (line 6) +* grid color: Resources. (line 133) +* grid, absolute and relative: Actions. (line 199) +* grid, alignment: Menu. (line 49) +* grid, display <1>: Actions. (line 199) +* grid, display: Menu. (line 49) +* grid, setting of: Actions. (line 477) +* groups: Resources. (line 151) +* groups, editing of: Actions. (line 250) +* gschem, how to interface with: gEDA. (line 6) +* Hewlett Packard: HP. (line 6) +* hide element name: Actions. (line 509) +* how to start: Getting Started. (line 6) +* HP: HP. (line 6) +* image export: png. (line 6) +* index of terms: Glossary. (line 6) +* Info, popup menu: Menu. (line 143) +* information about objects: Actions. (line 434) +* input-field, position of: Status-line and Input-field. + (line 6) +* inputfield, saving entered command-line: Resources. (line 294) +* inputfield, start user input: Actions. (line 160) +* install, how to: compiling. (line 6) +* key translations: Actions. (line 6) +* keyboard bell: Resources. (line 262) +* layer controls: Layer Controls. (line 6) +* layer groups: Layer Objects. (line 19) +* layer visibility, toggling: Actions. (line 521) +* layer, change active: Actions. (line 503) +* layer, name of: Resources. (line 159) +* layers, an overview: Layer Objects. (line 6) +* layers, changing which is active: Layer Controls. (line 6) +* layers, colors: Resources. (line 145) +* layers, editing of groups: Actions. (line 250) +* layers, groups: Resources. (line 151) +* layers, switching on/off: Layer Controls. (line 6) +* layout files: Resources. (line 93) +* layout files, format of: Layout File. (line 6) +* layout files, saving of: User Commands. (line 55) +* layout objects, an overview: Intro. (line 6) +* layout, default size of: Resources. (line 302) +* layout, loading a: User Commands. (line 33) +* layout, loading to buffer: User Commands. (line 45) +* layout, merging a: User Commands. (line 45) +* layout, printing a: Actions. (line 392) +* layout, start a new: Actions. (line 350) +* layout-name <1>: User Commands. (line 61) +* layout-name: Element Objects. (line 6) +* length of a pin name: Resources. (line 217) +* library accuracy: Element Objects. (line 74) +* library command: Resources. (line 163) +* library contents command: Resources. (line 173) +* library contents file, format of: Library Contents File. + (line 6) +* library creation: Library Creation. (line 6) +* library file, format of: Library File. (line 6) +* library name: Resources. (line 179) +* library searchpath: Resources. (line 184) +* library window: Library Window. (line 6) +* lines, an example: Lines. (line 6) +* lines, an overview: Line Objects. (line 6) +* lines, clipping to 45 degree <1>: Actions. (line 199) +* lines, clipping to 45 degree: Resources. (line 17) +* lines, setting of initial size: Actions. (line 477) +* lines, size: Resources. (line 189) +* Linux: Linux. (line 6) +* listing library contents: Resources. (line 173) +* loading a layout to buffer: User Commands. (line 45) +* loading elements: Resources. (line 74) +* loading elements to buffer: User Commands. (line 39) +* loading files: Actions. (line 259) +* loading fonts: Resources. (line 110) +* loading layouts <1>: Resources. (line 93) +* loading layouts: User Commands. (line 33) +* loading symbols: Resources. (line 110) +* loading, an example: Loading and Saving. (line 6) +* log window <1>: Resources. (line 244) +* log window: Log Window. (line 6) +* m4: Resources. (line 74) +* m4, preprocessing example files: Elements. (line 19) +* mark: Actions. (line 269) +* Measuring distances: Measuring distances. (line 6) +* media: Resources. (line 195) +* media margin: Resources. (line 195) +* media, size of: Printing. (line 59) +* menus: Menu. (line 6) +* merging layouts: User Commands. (line 45) +* messages <1>: Resources. (line 244) +* messages: Log Window. (line 6) +* mirroring printout: Printing. (line 28) +* mode selection: Tool Selectors. (line 6) +* mode, selecting of: Actions. (line 277) +* mounting holes: Actions. (line 101) +* move: Resources. (line 274) +* move an object: Translations. (line 40) +* moving objects: Arrow Tool. (line 6) +* moving objects to current layer: Actions. (line 340) +* moving, an example: Moving and Copying. (line 6) +* moving, traces to a different layer: Moving and Copying. (line 20) +* multi-file: Postscript Export. (line 51) +* name of an element: Actions. (line 199) +* name, change an objects: Actions. (line 107) +* namelength of pins: Resources. (line 217) +* nelma: nelma. (line 6) +* NetBSD: BSD. (line 6) +* netlist <1>: Actions. (line 27) +* netlist <2>: Resources. (line 248) +* netlist <3>: Rats Nest. (line 6) +* netlist: Net Objects. (line 6) +* Netlist Window: Netlist Window. (line 6) +* netlist, file format: Netlist File. (line 6) +* netlist, reading: Netlist File. (line 6) +* object report: Menu. (line 143) +* object, change name of: Actions. (line 107) +* object, changing the size of an: Common. (line 6) +* object, copy an: Translations. (line 40) +* object, creating an: Common. (line 6) +* object, drawing and removing: Drawing and Removing. + (line 6) +* object, move an: Translations. (line 40) +* object, removing an <1>: Translations. (line 11) +* object, removing an: Common. (line 6) +* objects, moving to current layer: Actions. (line 340) +* octagonal flag, changing: Actions. (line 93) +* octagonal flag, clearing: Actions. (line 154) +* octagonal flag, setting: Actions. (line 471) +* octagonal pins and vias: Actions. (line 117) +* off limit color: Resources. (line 203) +* offset of pinnames: Resources. (line 228) +* offset of pinout: Resources. (line 222) +* offset of printout: Printing. (line 75) +* old library: Element Objects. (line 74) +* only-visible: Encapsulated Postscript Export. + (line 19) +* OpenWindows: Sun. (line 6) +* operation modes, selecting of: Actions. (line 277) +* optimizer: Trace Optimizer. (line 6) +* outline printout: Printing. (line 36) +* output device: Printing. (line 21) +* overlap, minimum: Design Rule Checking. + (line 6) +* pad specification: Pad and Line Representation. + (line 6) +* pastebuffer, an example: Pastebuffer. (line 6) +* pastebuffer, convert contents to element: Elements. (line 59) +* pastebuffer, popup menu: Menu. (line 109) +* pastebuffer, selecting a: Actions. (line 355) +* path for element files: Resources. (line 85) +* path for font files: Resources. (line 124) +* path for layout files: Resources. (line 102) +* path for libraries: Resources. (line 184) +* PC UNIX <1>: BSD. (line 6) +* PC UNIX <2>: Linux. (line 6) +* PC UNIX: SCO. (line 6) +* PCB, an overview: Overview. (line 6) +* photo-mode: PNG Options. (line 45) +* pin color: Resources. (line 208) +* pin, name of: Resources. (line 217) +* pin/pad names, changing: Actions. (line 123) +* pinout, display of: Actions. (line 199) +* pinout, font to display pin names: Resources. (line 213) +* pinout, zoomfactor of display: Resources. (line 234) +* pins, an example: Elements. (line 41) +* pins, changing shape of: Actions. (line 117) +* png: png. (line 6) +* pointer, moving of: Actions. (line 326) +* polygon: Resources. (line 307) +* polygon point, go back to previous: Actions. (line 382) +* polygon, an example: Polygons. (line 6) +* polygon, an overview: Polygon Objects. (line 6) +* polygon, closing a: Actions. (line 382) +* popping up menus: Menu. (line 6) +* postprocessing layout data: Resources. (line 278) +* postscript: ps. (line 6) +* preprocessing element data: Resources. (line 74) +* preprocessing font data: Resources. (line 110) +* preprocessing layout data: Resources. (line 93) +* preventing loss of data <1>: Resources. (line 285) +* preventing loss of data: Loading and Saving. (line 18) +* print command: Printing. (line 84) +* print media <1>: Resources. (line 195) +* print media: Printing. (line 59) +* print offset: Printing. (line 75) +* printing: Resources. (line 239) +* printing a layout: Actions. (line 392) +* printing, an example: Printing. (line 6) +* problems: problems. (line 6) +* ps: ps. (line 6) +* ps-bloat: Postscript Export. (line 31) +* ps-invert: Postscript Export. (line 34) +* psfade: Postscript Export. (line 44) +* quit <1>: Actions. (line 412) +* quit: User Commands. (line 51) +* rat's nest: User Commands. (line 61) +* rat-line <1>: Actions. (line 27) +* rat-line: Rats Nest. (line 6) +* rats nest <1>: Actions. (line 27) +* rats nest <2>: Resources. (line 248) +* rats nest: Rats Nest. (line 6) +* rats-nest: Net Objects. (line 6) +* recover: Actions. (line 416) +* rectangle, an example: Polygons. (line 6) +* redo <1>: Actions. (line 416) +* redo: Menu. (line 40) +* redrawing layout: Actions. (line 199) +* refreshing layout: Actions. (line 199) +* Regular Expressions: Regular Expressions. (line 6) +* removing connections: Translations. (line 11) +* removing objects <1>: Translations. (line 11) +* removing objects <2>: Common. (line 6) +* removing objects: Drawing and Removing. + (line 6) +* removing selected objects: Actions. (line 430) +* report <1>: Actions. (line 434) +* report: Menu. (line 143) +* reseting found connections <1>: Actions. (line 167) +* reseting found connections: Resources. (line 255) +* resources: Resources. (line 6) +* rotate: Resources. (line 274) +* rotating a buffer: Actions. (line 355) +* rotating printout: Printing. (line 24) +* routing style <1>: Actions. (line 440) +* routing style: Resources. (line 267) +* rubber band: Menu. (line 79) +* rubberband <1>: Actions. (line 199) +* rubberband: Resources. (line 274) +* saving connections: Actions. (line 450) +* saving files: Actions. (line 450) +* saving found connections: Actions. (line 167) +* saving last entered user command: Resources. (line 294) +* saving layouts <1>: Resources. (line 278) +* saving layouts <2>: User Commands. (line 55) +* saving layouts: Loading and Saving. (line 18) +* saving, an example: Loading and Saving. (line 6) +* scaling a printout: Printing. (line 55) +* scanning connections: Actions. (line 167) +* schematic capture: Schematic Frontends. (line 6) +* schematic frontend: Schematic Frontends. (line 6) +* SCO: SCO. (line 6) +* Screen, popup menu: Menu. (line 49) +* script file, executing: Actions. (line 238) +* scrolling: Translations. (line 21) +* searching connections: Actions. (line 167) +* Searching for elements: Searching for elements. + (line 6) +* searchpath for element files: Resources. (line 85) +* searchpath for font files: Resources. (line 124) +* searchpath for layout files: Resources. (line 102) +* searchpath for libraries: Resources. (line 184) +* Select, popup menu: Menu. (line 98) +* selected object, removing an: Actions. (line 430) +* selected objects, changing sizes: Menu. (line 98) +* selected objects, removing: Menu. (line 98) +* selecting a buffer: Actions. (line 355) +* selecting a new tool: Tool Selectors. (line 6) +* selecting objects: Actions. (line 459) +* selecting, using the arrow tool: Arrow Tool. (line 6) +* selection: Actions. (line 459) +* Settings, popup menu: Menu. (line 79) +* SGI: SGI. (line 6) +* show-legend: Postscript Export. (line 64) +* shrink: Resources. (line 299) +* signal: Actions. (line 68) +* Silicon Graphics: SGI. (line 6) +* size of lines: Resources. (line 189) +* size of lines and vias: Actions. (line 440) +* size of vias: Resources. (line 330) +* sizes, changing of objects: Actions. (line 72) +* Sizes, popup menu: Menu. (line 68) +* snap to pins: Menu. (line 79) +* Solaris: Sun. (line 6) +* solder mask, viewing and editing: Menu. (line 58) +* spacing, minimum: Design Rule Checking. + (line 6) +* speaker volume: Resources. (line 338) +* square flag, changing: Actions. (line 93) +* square flag, changing of objects: Actions. (line 148) +* square flag, clearing: Actions. (line 154) +* square flag, setting: Actions. (line 471) +* standard drill sizes: Standard Drill Sizes. + (line 6) +* start user input: Actions. (line 160) +* starting a new layout: Actions. (line 350) +* starting Pcb: Command-Line Options. + (line 6) +* status information: Status-line and Input-field. + (line 6) +* strings, an example: Text. (line 6) +* strings, an overview: Text Objects. (line 6) +* Sun: Sun. (line 6) +* symbols: Resources. (line 118) +* symbols, an overview: Symbol Objects. (line 6) +* Syntax, file: File Syntax. (line 6) +* temporary files <1>: Resources. (line 285) +* temporary files: Loading and Saving. (line 18) +* terminology: Glossary. (line 6) +* TeX, problems: TeX and Manuals. (line 6) +* text, an example: Text. (line 6) +* text, an overview: Text Objects. (line 6) +* text, default scaling: Resources. (line 313) +* thermal flag, changing: Actions. (line 93) +* thermal flag, clearing: Actions. (line 154) +* thermal flag, setting: Actions. (line 471) +* thickness of lines: Resources. (line 189) +* thickness of objects: Common. (line 6) +* thickness of vias: Resources. (line 330) +* thickness, changing of objects: Actions. (line 129) +* toggle layer visibility: Actions. (line 521) +* tool selection: Tool Selectors. (line 6) +* tool, arrow: Arrow Tool. (line 6) +* trace optimizer: Trace Optimizer. (line 6) +* translations <1>: Translations. (line 6) +* translations: Actions. (line 6) +* troubleshooting: problems. (line 6) +* two line mode: Line Objects. (line 14) +* undo <1>: Actions. (line 528) +* undo: Menu. (line 40) +* undo, multi-action resources: Actions. (line 58) +* unique names: Menu. (line 79) +* unix command: Resources. (line 74) +* unselect objects: Actions. (line 543) +* user commands: User Commands. (line 6) +* user input: Translations. (line 33) +* vendor drill table <1>: UnloadVendor Action. (line 10) +* vendor drill table <2>: ToggleVendor Action. (line 10) +* vendor drill table <3>: LoadVendorFrom Action. + (line 10) +* vendor drill table <4>: EnableVendor Action. (line 10) +* vendor drill table <5>: DisableVendor Action. + (line 10) +* vendor drill table <6>: ApplyVendor Action. (line 8) +* vendor drill table: Actions. (line 54) +* Vendor drill table: Vendor drill mapping. + (line 6) +* vendor drill table, disabling: Actions. (line 188) +* vendor drill table, enabling: Actions. (line 254) +* vendor drill table, loading: Actions. (line 265) +* vendor drill table, toggling: Actions. (line 516) +* vendor drill table, unloading: Actions. (line 539) +* vendor map <1>: UnloadVendor Action. (line 10) +* vendor map <2>: ToggleVendor Action. (line 10) +* vendor map <3>: LoadVendorFrom Action. + (line 10) +* vendor map <4>: EnableVendor Action. (line 10) +* vendor map <5>: DisableVendor Action. + (line 10) +* vendor map <6>: ApplyVendor Action. (line 8) +* vendor map: Actions. (line 54) +* vendor map, disabling: Actions. (line 188) +* vendor map, enabling: Actions. (line 254) +* vendor map, loading: Actions. (line 265) +* vendor map, toggling: Actions. (line 516) +* vendor map, unloading: Actions. (line 539) +* Vendor mapping: Vendor drill mapping. + (line 6) +* Vendor rules: Vendor drill mapping. + (line 6) +* vias, an example: Vias. (line 6) +* vias, an overview: Via Objects. (line 6) +* vias, changing shape of: Actions. (line 117) +* vias, color: Resources. (line 324) +* vias, converting to mounting hole: Actions. (line 101) +* vias, setting of initial size: Actions. (line 477) +* vias, size: Resources. (line 330) +* viewing side, changing of: Actions. (line 499) +* volume of speaker: Resources. (line 338) +* Window, popup menu: Menu. (line 151) +* x-y file format: Centroid File Format. + (line 6) +* x-y file, algorithms: Centroid File Format. + (line 37) +* X11: X11 Interface. (line 6) +* X11 default translations: Translations. (line 6) +* X11 resources: Resources. (line 6) +* X11 translations: Actions. (line 6) +* X11, problems: X11. (line 6) +* xcircuit, how to interface with: xcircuit. (line 6) +* zoom of Layout area: Resources. (line 347) +* zoom of pinout window: Resources. (line 234) +* zoom, setting: Menu. (line 49) +* zoom, setting of: Actions. (line 477) + + Index: trunk/doc-orig/pcb.pdf =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: trunk/doc-orig/pcb.pdf =================================================================== --- trunk/doc-orig/pcb.pdf (nonexistent) +++ trunk/doc-orig/pcb.pdf (revision 1037) Property changes on: trunk/doc-orig/pcb.pdf ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: trunk/doc-orig/pcb.texi =================================================================== --- trunk/doc-orig/pcb.texi (nonexistent) +++ trunk/doc-orig/pcb.texi (revision 1037) @@ -0,0 +1,5829 @@ +\input texinfo @c -*-texinfo-*- +@comment RCS: $Id$ +@comment %**start of header +@setfilename pcb.info +@settitle Pcb +@setcontentsaftertitlepage +@macro pcb{} +@code{Pcb} +@end macro +@comment %**end of header + +@include version.texi + +@ifinfo +@format +INFO-DIR-SECTION Miscellaneous +START-INFO-DIR-ENTRY +* pcb: (pcb). An interactive printed circuit board editor. +END-INFO-DIR-ENTRY +@end format +@end ifinfo + +@iftex +@finalout +@end iftex + +@ifinfo +This file documents how to use Pcb, +the open source, interactive printed circuit board layout system. + +Copyright (C) 1994,1995,1996, 2004 Thomas Nau + +Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 harry eaton + +Copyright (C) 2003, 2004, 2005, 2006, 2007, 2009 Dan McMahill + +Copyright (C) 2004 DJ Delorie + +This program is free software; you may redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANT-ABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +@b{GNU General Public License} for more details. + +@end ifinfo + +@setchapternewpage on +@headings single + +@titlepage +@title Pcb-@value{VERSION} +@subtitle an open source, interactive +@subtitle printed circuit board +@subtitle layout system +@author harry eaton +@end titlepage + +@ifnottex +@node Top +@top Pcb + +This document is a manual for @pcb{}, the open source, interactive printed circuit +board layout system. +@end ifnottex + +@menu +* Copying:: @pcb{} is freely redistributable! +* History:: How it all began. +* Overview:: An overview of @pcb{}. +* Intro:: A short description of the basic objects. +* Getting Started:: Introduction to @pcb{}. +* Autorouter:: Using the autorouter. +* User Commands:: User commands of @pcb{}. +* Command-Line Options:: Calling @pcb{} from a shell. +* X11 Interface:: Action routines, resources and default translation. +* File Formats:: Description of @code{ASCII} files used by @pcb{}. +* Library Creation:: Detailed description of symbol library creation. +* Schematic Frontends:: Schematic capture programs that work with PCB. +* Installation:: Compiling, installing and troubleshooting. +* Custom Menus:: Customizing the menu bar. +* Regular Expressions:: Searching for elements with regular expressions +* Standard Drill Sizes:: Tables of standard drill sizes +* Centroid File Format:: Details of the centroid (x-y) output file +* Action Reference:: Documentation for all available actions +* Glossary:: Glossary +* Index:: The Index. +@end menu + +@c --------------------------------------------------------------------- +@node Copying +@unnumbered Copying + +Copyright @copyright{} 1994,1995,1996,1997 Thomas Nau + +Copyright @copyright{} 1998,1999,2000,2001,2002 harry eaton + +This program is free software; you may redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANT-ABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +@b{GNU General Public License} for more details. + + +@c --------------------------- chapter 0 ------------------------------- +@node History +@unnumbered History + +@cindex Atari version +@pcb{} is a handy tool for laying out printed circuit +boards. + +@pcb{} was first written by Thomas Nau for an Atari ST in 1990 and +ported to @code{UNIX} and @code{X11} in 1994. +It was not intended as a professional layout system, +but as a tool which supports people who do some +home-developing of hardware. + +The second release 1.2 included menus for the first time. This made +@pcb{} easier to use and thus a more important tool. + +Release 1.3 introduced undo for highly-destructive commands, +more straightforward action handling and scalable fonts. Layer-groups +were introduced to group signal-layers together. + +Release 1.4 provided support for add-on device drivers. +Two layers (the solder and the component side) +were added to support SMD elements. The handling of libraries +was also improved in 1.4.1. Support for additional devices like +GERBER plotters started in 1.4.4. The undo feature was expanded +and the redo-feature added in 1.4.5. + +harry eaton took over pcb development beginning with Release 1.5, +although he contributed some code beginning with Release 1.4.3 + +Release 1.5 provides support for rats-nest generation from simple net +lists. It also allows for automatic clearances around pins that pierce +a polygon. A variety of other enhancements including a Gerber RS-274X +driver and NC drill file generation have also been added. + +Release 1.6 provides automatic screen updates of changed regions. +This should eliminate most of the need for the redraw ((@emph{R} key). +Also some changes to what order items under the cursor are selected +were made for better consistency - it is no longer possible to +accidentally move a line or line point that is completely obscured +by a polygon laying over top of it. Larger objects on the upper +most layers can be selected ahead of smaller objects on lower layers. +These changes make operations more intuitive. A new mode of line +creation was added that creates two line on 45 degree angles +with a single click. The actual outline of the prospective line(s) are +now shown during line creation. An arc creation mode was added. +Drawn arcs are quarter circles and can be useful for high frequency +controlled impedance lines. (You can have eighth circle arc if the +source is compiled with -DARC45, but be aware that the ends of such +arcs can never intersect a grid point). Two new flags for pins and +vias were created - one indicates that the pin or via is purely a +drill hole and has no copper annulus. You can only toggle this flag +for vias - for elements, it must be an integral part of the element +definition. The other flag controls whether the pad will be round +or octagonal. There is also now a feature for converting the contents +of a buffer into an element. + +Release 1.6.1 added the ability to make groups of action commands bound to +a single X11 event to be undone by a single undo. Also a simple design rule +checker was added - it checks for minimum spacing and overlap rules. Plus +many fixes for bugs introduced with the many changes of 1.6 + +Release 1.7 added support for routing tracks through polygons without touching +them. It also added support for unplated drill files, and drawing directly +on the silk layer. A Netlist window for easily working with netlist was also added. + +Release 2.0 adds an auto-router, a new simpler library mechanism, much improved +support for graphically creating (and editing) elements, viewable solder-mask +layers (and editing), snap to pins and pads, netlist entry by drawing rats, element +files (and libraries) that can contain whole sub-layouts, metric grids, improved +user interface, a GNU autoconf/automake based build system, and a host +of other improvements. + +Special thanks goes to: +@display +Thomas Nau (who started the project and wrote the early versions). +C. Scott Ananian (who wrote the auto-router code). +Bernhard Daeubler (Bernhard.Daeubler@@physik.uni-ulm.de) +Harald Daeubler (Harald.Daeubler@@physik.uni-ulm.de) +DJ Delorie (djdelorie@@users.sourceforge.net) +Larry Doolittle (ldoolitt@@recycle.lbl.gov) +Dan McMahill (danmc@@users.sourceforge.net) +Roland Merk (merk@@faw.uni-ulm.de) +Erland Unruh (Erland.Unruh@@malmo.trab.se) +Albert John FitzPatrick III (ajf_nylorac@@acm.org) +Boerge Strand (borges@@ifi.uio.no) +Andre M. Hedrick (hedrick@@Astro.Dyer.Vanderbilt.Edu) +@end display + +@noindent +who provided all sorts of help including porting @pcb{} to +several operating systems and platforms, bug fixes, library enhancement, +user interface suggestions and more. In addition to these people, +many others donated time for bug-fixing and +other important work. Some of them can be identified in the source code +files. Thanks to all of them. If you feel left out of this list, I +apologize; please send me an e-mail and I'll try to correct the omission. + + +@c --------------------------- overview chapter ------------------------------- +@node Overview +@chapter Overview +@cindex PCB, an overview + +@pcb{} is an open source printed circuit board editor. +@pcb{} includes many professional features such as: +@itemize @bullet +@item Up to 16 copper layer designs by default. By changing a compile time setting, this +can be set as high as needed. +@item RS-274X (Gerber) output +@item NC Drill output +@item Centroid (X-Y) data output +@item Postscript and Encapsulated Postscript output +@item Autorouter +@item Trace optimizer +@item Rats nest +@item Design Rule Checker (DRC) +@item Connectivity verification +@item @pcb{} is Free Software +@item Can interoperate with free schematic capture tools such as gEDA and + xcircuit +@item Runs under Linux, NetBSD, Solaris, and other similar operating +systems. +@item Windows version is available +@end itemize + +@c --------------------------- chapter 1 ------------------------------- +@node Intro +@chapter Introduction +@cindex layout objects, an overview + +Each layout consists of several, mostly independent, objects. This chapter +gives an overview of the object types and their relationship to each other. +For a complete description of how to use @pcb{}, refer to +@ref{Getting Started}. +The layout is generated on-screen on a grid that can have its origin +at any desired location. +The X coordinate increases to the right, Y increases down to the bottom. +All distances and sizes in @pcb{} are measured in mils +(0.001 inch). One unit on the coordinate display is one mil in +distance on the board. +The grid may be set on a metric pitch, but is only correct to within +the nearest +/- 0.01 mil because @pcb{} stores all dimensions as +integer multiples of 1/100 of a mil or 0.00001 inch. + +The sections in this chapter are sorted by the +order of appearance of the objects within a layout file. + +@menu +* Symbol Objects:: Information about fonts and symbols. +* Via Objects:: Vias and pins connect layers. +* Element Objects:: Element, the basic type of circuits. +* Layer Objects:: A @samp{container} for lines, text... +* Line Objects:: Tracks on the board +* Arc Objects:: Curved tracks +* Polygon Objects:: Planes and such +* Text Objects:: Objects to add symbols to your board. +* Net Objects:: Describes the desired connections on the board. +@end menu + +@node Symbol Objects +@section Symbols +@cindex symbols, an overview +@cindex font, an overview + +The top object is the layout itself. It uses a set of symbols +that resides at the first logical level. Each symbol is uniquely identified +by a seven bit @code{ASCII} code. All layout objects share the same set of +symbols. These symbols are used to form text objects on the silkscreen +and copper layers. Undefined symbols are drawn as filled rectangles. + +Every font file is preprocessed by a user-defined command when it is loaded. +For details see @samp{fontCommand}, @ref{Resources}. + + +@node Via Objects +@section Vias +@cindex vias, an overview + +Vias provide through-hole connectivity across all layers. +While vias look a lot like element pins, don't use vias +for adding elements to the layout, even if that seems +easier than creating a new element. The default solder-mask +will cover over vias, so you won't be able to solder to them. +Of course, you can change this so that vias also have +solder-mask cut-outs, but it is not the default. +Vias are also useful for defining arbitrary drill points such as +those used for mounting a board. Vias used in this way have +a special flag set so that they have no annular copper ring, +and also appear in the unplated drill file. @emph{Ctrl-H} key over +a via switches it between being a pure-mounting hole and a regular via. +You can assign a name to a via, which is useful during the creation +of new element definitions. +Each via exists on all copper layers. (@emph{i.e.} +blind and buried vias are not supported) + + +@node Element Objects +@section Elements +@cindex element, an overview +@cindex layout-name + +Elements represent the components on a board. +Elements are loaded from @code{ASCII} coded files in a +similar manner to the layout file itself, or from the +library selector window. +An element is composed of lines and arcs on the silk-screen +layer (used to define the package outline), pins +(or pads for SMD) and three labels that define the +description, the element's layout-name (which also +appears on the silk-screen layer) and its value. You +can choose which of the names are displayed on the screen +with the @b{Screen} menu; however, the silk screen in +the printout will always show the layout-name. +Element pins are contained on the first logical level +and so reside on all layers, but the pads of surface-mount +elements reside on only the component or solder +layers. An element can have a mixture of pins, pads +(on one or both sides), and mounting holes. + +A mark is used to position the element with +respect to the cross hair during pasting. +The mark will lie on a grid point when the element +is positioned. The mark is drawn as a small diamond +shape, but is only visible when @emph{both} the @code{silk} +and @code{pins/pads} layers are visible. +All parts of an element are treated as one unit, except for +the name. +It is not possible to delete a single pin or move +only part of an element on the layout. +You can resize separate pieces of an element, +but doing so is usually a bad idea. You can move/rotate +the element name independently of the element it belongs +to. When you move an element name, a line is draw from +the cursor to the element mark so it is easy to tell +which element the name belongs to. + + +Each pin and pad has two string identifiers, one is the +"name" which is a functional description of the pin +(@emph{e.g.} "clock in") and the other is the "number" of the +pin which is used to identify it in a netlist. The "number" +is usually an integer, but it can be any string. You +can edit the "name" of each pin of an element, but the +"number" is embedded in the element definition and is +determined when the new element is first created. +Pads are similar to lines on a layer but they must be oriented +either vertically or horizontally. +Pads can have either rounded or square ends. Pins +can be round, square, or octagonal. + + +Elements are supported by several special layers: @code{silk}, @code{pins/pads} and +@code{far-side}. The @code{silk} layer shows the package outline and +also holds legend text and element names. The @code{pins/pads} layer is used to toggle +whether the element's pins and pads are displayed. The @code{far-side} layer controls visibility +of objects (silkscreen and pads) that are on the far (@emph{i.e.} not currently viewed) side +of the board. + +The ``oldlib'' style of footprint libraries distributed with +@pcb{} rely upon the M4 macro processor. M4 is typically +installed under the name @code{m4} on most unix-like operating +systems. It is recommended that you use the GNU version of M4 to +avoid limitations found in some vendor implementations. See the m4 +man page on your system for more information. +Every element file is preprocessed by a user-defined command when the file is read. +For details see @samp{elementCommand}, @ref{Resources}. @code{m4}, the default +value of @samp{elementCommand}, allows you to create libraries for +package definitions that are shared by all elements. +The old element libraries distributed with @pcb{} expect @code{m4} or an +equivalent to be the @emph{elementCommand}. The new library scheme simply has +each element stored in a self-contained file, so there is no need to learn +@code{m4} to add to the libraries. + +@pcb{} can create a list of +all connections from one (or all) elements to the others or a list of +unconnected pins. +It can also verify the layout connections against a netlist file. +The element's @samp{layout-name} is the name used to identify the element +in a netlist file (see @ref{Netlist File}). + +The old libraries, or very old (pre-1.6) layout files may have +incorrect pin numbering since there was no concept of pin numbers +when they were created. @pcb{} uses the order of appearance of +the pin definitions in the layout or library file if it uses the +old format, but there is no guarantee that it will be correct for +these old objects. + +@cindex old library +@cindex library accuracy +@b{Be aware that a few of the old library parts may still be incorrectly +implemented regarding pin-numbering.} All of the DIL (Dual- +Inline-Pins) parts are correct and most of the others are too, +but you should verify the pin numbering +of any non-DIL part before using an old library part. +(use the @samp{generate object report} in the @b{Info} menu +to see what @pcb{} thinks a pin's number is) +All of the old +library names begin with a ~, so you can easily identify them. +The old libraries also @emph{may} contain other sorts of errors, +including incorrect pin spacing, silkscreen overlapping solder areas, etc. +@b{Check carefully any element in the old library before using it!} +As the new library grows, the old library will be pared down to +at least remove all of the elements with errors, but this will +take time. + +You can make your own element definitions graphically now. +Simply draw vias for the pins, lines on the solder and/or +component layers for surface-mount pads (they must be either horizontal +or vertical), +and lines and arcs on the silkscreen layer for the silkscreen +outline. You should @emph{name} (@emph{N} key) each via and copper line with the pin @emph{number}. +Once you are happy with the geometry, select everything that is to become part of +the element, then choose @samp{convert selection to element} from the @b{Select} menu. +Afterwords you can make pin (or pad) one +square if you like, and give the element its various names. You can also give +the pins and pads their functional names. Note that the +element mark corresponds to the position you click after choosing the +conversion from the menu, so decide where the mark goes and make +sure it falls on a grid point before you request the conversion. +If the vias/lines are not named, then the pin numbering will correspond to the +order in which they were placed. + +When you create a new element, remember that silkscreen lines +should @emph{never} overlap the copper part of the +pins or pads, as this can interfere with soldering. The silkscreen +should identify the maximum extent of the element package so it +is easy to see how close elements can be placed together. + +If you want to make an element similar to an existing one, you can +break an element into constituent pieces from the @b{Buffer} menu. +Paste the pieces to the layout, make the necessary changes, then +convert it back into an element. If the pin numbers haven't changed, +there is no need to name each via/line as they are pre-named when +the element was broken apart. When you create a new element, you +can save it to a file in order to have easy access to it the next +time you run @pcb{}. + + +@node Layer Objects +@section Layers +@cindex layers, an overview + +Every layout consists of several layers that can be used independently +or treated as a group. +Layer groups can be used to logically separate (and color-code) +different traces (@emph{e.g.} power and signal); however, all +layers within a group reside on the same physical +copper layer of a board, so using different layers within the same +group won't provide electrical separation where they touch or overlap. +For details, see @samp{layerGroups}, @ref{Resources}. +Each layer is drawn in a color defined in the resource file +and identified by a name that you can change (for details +see @samp{layerColor}, @ref{Resources}.) +Layers are really just containers for line, arc, polygon, and text objects. The +component and solder layers contain SMD elements as well, but the +file structure doesn't reflect that fact directly. + +@cindex layer groups +Each layer group +represents a physical layer on the printed circuit board. If you want to make +a four layer board, you'll need to have at least four layer groups. +Connections between layer groups are established only through element pins and vias. +The relationship between a specific layer and the board itself is configurable from +the @samp{Edit layer groups} option in the @b{Settings} menu. +The layer groups corresponding to the physical layers: @emph{component-side} +and @emph{solder-side} are always defined and you must map at least one +logical layer to each, even if you plan to make a single-sided board. +You are not obligated to put tracks on either of them. +Surface mount elements always reside on either the component-side or the +solder-side layer group. When you paste an element from the buffer, +it will go onto whichever side of the board you are viewing. +You can swap which side of the board you are viewing by pressing +the @emph{Tab} key, or by selecting @samp{view solder side} from the +@b{Screen} menu. +The layer groups just have a name or number associated with them - where +they are sandwiched in the board is left for you to tell the +manufacturer. + +The silkscreen layer is special because there are actually two silkscreen +layers, one for the top (component) and one for the bottom (solder) side +of the board. Which silk layer you draw on is determined by the side of the +board that you are viewing. If you are viewing the component side, then +drawing on the silk layer draws to the component-side silk layer. + +The netlist layer is another special layer. It shows rat's-nest lines +(@emph{i.e.} guides that show how the netlist expects the element to interconnect). +If you make this the active layer, you can use the Line tool to add +entries into the netlist, or to delete connections from the netlist +window. Except for these two purposes, you should not +make the netlist layer the active layer. Usually there is no need to +do this because a separate schematic package should be used to create the +netlist. @pcb{} can automatically draw all of the rats from +the netlist. In some cases you may want to make a small change without +going to the trouble of modifying the schematic, which is why this +facility is provided. + + +@node Line Objects +@section Lines +@cindex lines, an overview + +Lines are used to draw tracks on the pc board. +When in the line mode, each @emph{Btn1} +press establishes one end of a line. +Once the second point is defined, the line is drawn +and a new line started where the first one ended. +You can abandon the new starting point in favor +of another by pressing @emph{Ctrl-Btn1}, or +@emph{Btn3}, but don't use @emph{Btn2}. +The undo function (@emph{U} key or @samp{undo last operation} +from the @b{Edit} menu) will take you back +point by point if you use it while in the line mode. + +@cindex two line mode +New lines can be restricted to 45 degree angles if desired. You can toggle this +restriction on and off while creating lines by pressing the @emph{period} key. +If the 45 degree restriction is turned on, then the @emph{/} (forward slash) key +can be used to cycle through three different modes of 45 degree line creation. +One mode just creates a single line forced to the nearest 45 degree vector. The next +mode creates two lines from the start to end points such that the first line leaves the +start point at a 90 degree vector, and the second line enters the end point on a 45 +degree vector. The last mode creates two lines such that the first line leaves the +start point on a 45 degree vector and arrives at the end point on a 90 degree vector. +You can temporarily swap between the last two modes by holding the @emph{Shift} key down. + +It is simple to edit a line object by breaking it into pieces (insert point mode), +moving an end point or the whole line (@emph{Arrow tool}), +or changing the layer it resides on (@emph{M} key moves the line under the pointer +to the active layer). +In the case when two line segments meet at exactly the same +point you can delete the intermediate point, otherwise the delete tool removes an entire line. +Feel free to experiment +since @pcb{} will allow you to undo and redo anything that materially affects your work. +If you switch active layers in the midst of placing lines a via will automatically be +placed, when necessary, in order to continue the connection. + +@cindex clearance +If you draw a line inside a polygon, it will either plow through the +polygon creating a clearance, or touch the polygon. This behavior is +selectable in the @b{Settings} menu for new lines. To change the +behavior of an existing line, hit the @emph{J} key with the cross hair +over the line. You can increase the size of the clearance by 2 mils on +each edge with the with the +@emph{K} key. @emph{Shift-K} will decrease the clearance by 2 mils. +The increment may be changed from 2 mils through the application +resource file. +The clearance can be also increased, decreased and set +by the @emph{ChangeClearSize} action. + +Lines do not need to intersect the center of a pin, pad, via, or other +line for @pcb{} to understand that they make electrical connection. +If the connection is too tenuous, running the design rule checker will report +that the connection may break if the line width shrinks slightly. + + +@node Arc Objects +@section Arcs +@cindex arc + +@pcb{} can handle arcs of any angular extent, but when you +create an arc with the Arc tool, it will +be a quarter circle (this means they always bend a right angle). Arcs are very similar +to lines otherwise. They are created on the active layer and have the same thickness +that new lines will have. The various clicks for creating lines work pretty much the +same way for creating arcs. +In order to make the arc curve in the desired direction, drag the mouse along +the tangent line from the starting position towards the end position. If the grid is +too coarse, it may not be possible to distinguish whether you've moved over then up, +or up then over, so if you can't seem to make the arc go in the direction you want, try pressing +the @emph{Shift} key while drawing the arc. Decreasing the grid spacing may also help. +Alternatively you can draw the wrong arc, then +rotate and move it where you want. Like the Line tool, after an arc is drawn a new +starting point is established at the end point. + +Whenever a starting point is established +by either the Line or Arc tools it will be retained if you switch directly between the +tools (e.g. @emph{F2} key for Lines, @emph{F8} key for Arcs. Arcs can either touch or +clear polygons just like lines do. Of course connection +searches, undo and all the other features you'd expect work with arcs too. + + +@node Polygon Objects +@section Polygons +@cindex polygon, an overview + +Sometimes it's useful to fill large areas with solid copper. +The way to do this is with polygons. +Polygons can be created in either the polygon mode or the rectangle mode. +In the polygon mode, you'll have to define each corner of the polygon +with a mouse click (@emph{Btn1}). When the last point is clicked +exactly on top of the starting point, the polygon is finished. +Since this can be hard to do, the @emph{Shift-P} key will enter the +final point for you, closing the polygon. +If the 45 degree angle restriction is turned on +and you try to close the polygon when it is not possible, you'll get a +warning instead. If you haven't finished entering a polygon, but want to +undo one (or more) of the points that you've already defined, use the +undo command (@emph{U} key). + +With the rectangle tool, defining +the two diagonally opposite corners is sufficient, but of course the resulting +polygon is a rectangle. +Like lines, a polygon can by edited by deleting, inserting and moving the points +that define it. Pins and vias @emph{always} clear through polygons without +touching them when first positioned. You must add a thermal with the thermal +tool in order to connect pins and vias to polygons. Thermals can be added and removed by +clicking @emph{Btn1} with the thermal tool over the pin or via. +The thermal tool always +places a thermal to polygons on the active layer, so if the tool doesn't +seem to work, it's probably because the polygon you want to touch is not +on the active layer. You can change the style of thermal used or make +a solid connection by holding down @emph{Shift} while clicking +@emph{Btn1} with the thermal tool over the pin or via. + +@pcb{} is capable of handling complex polygons, but +using a number of simpler ones improves performance of the connection tracing code. +You also must be careful not to create polygons that touch or overlap themselves. +The fabricated board may not look the way you expect if you violate this +principle. It is always ok to have two (or more) polygons touch or overlap +each other, but not for points within the same polygon to do so. + +The great advantage to this new polygon behavior is that simple or complex ground +and/or power planes can be easily made with polygons and seen on the screen. +If you don't want this auto-clearance behavior, or you load a layout created by +an early version of @pcb{}, the old behavior +(shorts to all piercing pins and vias) is available. A @samp{ChangeSize} +operation (@emph{S} key) toggles a polygon between the new and old polygon/pin +behavior. + + +@node Text Objects +@section Text +@cindex text, an overview +@cindex strings, an overview + +Text objects should be used to label a layout or to put additional +information on the board. Elements have their @samp{layout-name} labels on the +silk-screen layer. If you are making a board without a silkscreen, +you can use copper text to label the elements, but you have to do +this manually. + +Text is always horizontal when first created, but the +rotate mode can align it along 0, 90, 180 and 270 degree angles. +Text on the far side of the board will automatically appear mirror-imaged. + +@emph{Warning:} @b{TEXT OBJECTS ON A COPPER LAYER CREATE COPPER LINES BUT THEY ARE NOT SCANNED FOR +CONNECTIONS OR TESTED FOR CREATING SHORTS VS. THE NETLIST. NEITHER ARE TEXT OBJECTS TESTED AGAINST ANY DESIGN RULES}. + + +@node Net Objects +@section Nets +@cindex rats-nest +@cindex netlist + +Layout files also contain the netlist that describes how the elements +are supposed to be interconnected. This list of connections can be +loaded from a netlist file (see @ref{Netlist File}), or +entered by drawing rat-lines as described +previously. Each net has a name and routing style associated with it. +The net contains a list of all element @emph{layout-name} names and +pin @emph{numbers} that should +be connected to the net. Loading a netlist file will replace all +existing nets with the ones from the file. +The @emph{Netlist} window provides an easy way to +browse through the net list. You can display the rat's-nest by selecting +@samp{optimize rats-nest} from the @b{Connects} menu. If you move or rotate elements, +the rat's-nest will automatically follow the movements, but they won't +necessarily show the shortest paths until you optimize them again. + +@c --------------------------- chapter 2 ------------------------------- +@node Getting Started +@chapter Getting Started +@cindex how to start + +The goal of this chapter is to give you enough information to learn how +@pcb{} works and how to develop your layouts to make the best use of @pcb{}'s +features. All event translations (@emph{i.e.} the buttons and keys you +press) refer to the default application resource file shipped with @pcb{}. +There is probably no need to change this unless your window +manager uses some of the button events itself; however, if you @emph{want} +to customize the behavior of @pcb{} then changing the resource file +is usually the best way to do it. + +Get yourself a printout of this chapter and @emph{User Commands}, if you +haven't already done so, and follow the examples. + +Start @pcb{} (the actual command will use all lower-case letters) +without any additional options. +If you get the error message: + +@display + can't find default font-symbol-file 'default_font' +@end display +@noindent +then the font searchpath or filename in the application resource +file is wrong. Be sure that your @code{m4} program supports search paths. +If not, get @code{GNU m4}. +For other messages, see @ref{problems}. +Another quick-start is provided by @code{pcbtest.sh} in the @file{src} +directory. If some features don't seem to work, try running @code{pcbtest.sh}, +if that works, then @pcb{} hasn't been installed properly. + +@menu +* Application Window:: The elements of the main window. +* Log Window:: The optional logging window +* Library Window:: The circuit selection window +* Netlist Window:: The desired connections window +* Drawing and Removing:: +* Moving and Copying:: +* Loading and Saving:: +* Printing:: Creating Gerber files or postscript files +* Exporting:: Exporting a layout. +* Arrow Tool:: Selecting/Moving objects. +* Rats Nest:: Helps you place and route tracks against a netlist. +* Design Rule Checking:: Check for manufactureability +* Trace Optimizer:: Optimization of layouts +* Searching for elements:: Searching for elements +* Measuring distances:: Measuring distances +* Vendor drill mapping:: Mapping drills to a vendor specified list +* Connection Lists:: How to get a list of all or some connections. +@end menu + + +@node Application Window +@section The Application Window + +The main window consists of five areas: +the menu at the top, the layer control in the upper left, the tool buttons +located below the layer controls, the Layout area to the right of these, and the +status line at the bottom of the window. + +@menu +* Menu:: +* Status-line and Input-field:: What is the program configuration. +* Layer Controls:: Switch layers on/off; change current one. +* Tool Selectors:: Select a layout tool. +* Layout Area:: Where the layout is drawn. +@end menu + +@node Menu +@subsection Menus +@cindex menus +@cindex popping up menus + +The menus are located at the top of the Layout area. Most, but not all, +of their functions are also available from the keyboard. Similarly, some +functions are only achievable through the keyboard or command entry. +Some menu entries such as @samp{center layout} in the @b{Screen} menu require a certain cross hair position. +In this case a prompt message will popup at the bottom of the screen +with wording similar to the following: +@example +move pointer to the appropriate screen position and press a button +@end example +Any mouse button will do the job, whereas any key except the arrow (cursor) keys +will cancel the operation. If it seems like the menu hasn't done what you +expected, check to see if it is waiting for the position click. For details see @ref{Actions}. + +Pressing @emph{Btn3} in the Layout area also pops up a menu with many of the most common operations (except +when you're in the midst of drawing a line or arc). When +a choice in the @emph{Btn3} popup menu needs a cross hair position, it uses the position +where the cross hair was when @emph{Btn3} was pressed. For example, to get detailed +information on an object, place the cross hair over the object, press @emph{Btn3}, then +choose @samp{object report}. If you pop up the @emph{Btn3} menu but don't want to +take any of the actions, click on one of the headers in the menu. + +@table @b + +@cindex File, popup menu +@item File +This menu offers a choice of loading, saving and printing data, saving +connection information to a file or quitting the application. Most +of the entries in the @b{File} menu are self explanatory. +Selecting +@samp{print layout} pops up a printer control dialog. +A selection of several device drivers is available from the printer control +dialog. Presently @emph{PostScript}, @emph{encapsulated PostScript}, +and @emph{GerberX} are supported. The @emph{GerberX} driver produces +all of the files necessary to have the board professionally manufactured. +The connection saving features in the @b{File} menu produce outputs in an +arcane format that is not too useful. They do @emph{not} produce netlist +files. + +@cindex Edit, popup menu +@cindex undo +@cindex redo +@item Edit +The @b{Edit} menu provides the usual cut, copy, paste +which work on selections. To learn how to +create complex selections, see @ref{Arrow Tool}. +The @b{Edit} menu also +provides access to Undo and Redo of the last operation. These +can also be accomplished with the @emph{U} key and @emph{Shift-R} +key. Finally, the @b{Edit} menu allows you to change the names +of: the layout, the active layer, or text objects on the layout. + +@cindex Screen, popup menu +@cindex displaying element names +@cindex element, display names of +@cindex grid, display +@cindex grid, alignment +@cindex zoom, setting +@item Screen +The @b{Screen} menu supports most functions related to +the whole Layout area. There are various entries to change the grid to some popular +values, the zoom factor, and which kind of element name is displayed. +You can also re-align the grid origin and turn on and off the display +of the grid. +Before changing the grid alignment, I recommend that you zoom in as close as +possible so that you're sure the grid +points appear exactly where you want them. + +@cindex solder mask, viewing and editing +The @b{Screen} menu also allows you to turn on and off the +visibility of the solder-mask layer. When the solder-mask layer +is made visible it obscures most of the layout, so only turn +this on when you really want to know what the solder-mask will +look like. The solder-mask that you see belongs to the +side of the board you are viewing, which can be changed with +the @samp{view solder side} option, also found in the @b{Screen} menu. +When the solder-mask is displayed, the pin and pad clearance adjustments +(@pxref{Line Objects}) alter the size of mask cut-outs. + +@cindex Sizes, popup menu +@item Sizes +The @b{Sizes} menu allows you to select a group of line thickness, via diameter, via drill +size, and clearance (keepaway) (collectively called a "routing style") to be copied to the "active" sizes. +You can also change the names given to the routing styles and adjust their values from +this menu. The "active" sizes are also adjustable from this menu. +The "active" sizes are shown in the status-line and control the initial size of new vias, +drilling holes, lines, clearances, text-objects and also the maximum dimensions of the +board layout. + +@cindex Settings, popup menu +@cindex unique names +@cindex rubber band +@cindex snap to pins +@cindex clearance, for new lines +@item Settings +The @b{Settings} menu controls several operating configuration +parameters. The @samp{edit layer groups} entry brings up a dialog +that allows you to change the way layers are grouped. Layer grouping +is described in @ref{Layer Objects}. The @samp{all-direction lines} +entry controls +the clipping of lines to 45-degree angles. You can also control +whether moving individual objects causes the attached lines to +"rubber band" with the move or not from the @b{Settings} menu. Another +entry controls whether the starting clip angle for the two-line +mode (@pxref{Line Objects}) alternates every other line. You can +also control whether element names must be unique from the @b{Settings} +menu. When unique element names are enforced, copying a new element +will automatically create a unique @samp{layout-name} name for it +provided that the name originally ended with a digit (@emph{e.g.} +U7 or R6). The @b{Settings} menu allows you to control +whether the cross hair will snap to pins and pads even when they +are off-grid. Finally you can control whether new lines and +arcs touch or clear intersecting polygons from this menu. + +@cindex Select, popup menu +@cindex selected objects, removing +@cindex selected objects, changing sizes +@item Select +This menu covers most of the operations that work with selected objects. +You may either (un)select all visible objects on a layout or only the ones +which have been found by the last connection scan see +@c DRM: not sure where this was suppose to xfef to. +@c @ref{find connections} +. +You can delete all selected objects from this menu. +Other entries in the @b{Select} menu change the sizes of selected objects. +Note that a select action only affects those objects that are +selected @emph{and} have their visibility turned on in the Layer Control +panel. The @b{Select} menu also provides a means for selecting objects +by name using unix @ref{Regular Expressions}. + +@cindex Buffer, popup menu +@cindex pastebuffer, popup menu +@cindex element, editing +@item Buffer +From the @b{Buffer} menu you may select one out of five +buffers to use, rotate or clear its contents or save the buffer contents +to a file. You can also use the @samp{break buffer element to pieces} entry +to de-compose an element into pieces for editing. +Note: only objects with visibility turned on are pasted to the layout. If +you have something in a buffer, then change which side of the board you +are viewing, the contents of the buffer will automatically be mirrored +for pasting on the side you are viewing. It is not necessary to clear +a buffer before cutting or copying something into it - it will automatically +be cleared first. + +@cindex Connects, popup menu +@cindex auto-router +@cindex design rule checker, invoking +@item Connects +The entries available through the @b{Connects} menu allow you to find +connections from objects and to manipulate these. +You can also optimize or erase rat's nests from this menu. Finally, +the @samp{auto-route all rats} entry allows you to auto-route +all connections show by the rat's nest. The auto-router will use +any visible copper layer for routing, so turn off the visibility of any +layers you don't want it to use. The auto-router will automatically +understand and avoid any traces that are already on the board, but +it is not restricted to the grid. Finally, +the auto-router routes using the active sizes (except for nets that +have a route-style defined). @pcb{} always knows which tracks +were routed by the auto-router, and you can selectively remove them +without fear of changing tracks that you have manually routed +with the @samp{rip-up all auto-routed tracks} entry in the @b{Connects} +menu. The @samp{design rule checker} entry runs a check for copper +areas that are too close together, or connections that touch too +tenuously for reliable production. The DRC stops when the first +problem is encountered so after fixing a problem be sure to +run it again until no problems are found. +@display +@emph{Warning:} @b{COPPER TEXT IS IGNORED BY THE DRC CHECKER}. +@end display + +@cindex Info, popup menu +@cindex report +@cindex object report +@cindex drill report +@item Info +The @samp{generate object report} entry from the @b{Info} menu +provides a way to get detailed information +about an object, such as its coordinates, dimensions, etc. +You can also get a report summarizing all of the drills +used on the board with @samp{generate drill summary}. Lastly, +you can get a list of all pins, pads and vias that were +found during a connection search. + +@cindex Window, popup menu +@item Window +The @b{Window} menu provides a way to bring each of @code{Pcb's} +windows to the front. The @emph{Library} window is used to +bring elements from the library into the paste-buffer. The +@emph{Message Log} window holds the various messages that +@pcb{} sends to the user. The @emph{Netlist} window shows +the list of connections desired. + +@end table + +Now that you're familiar with the various menus, it's time +to try some things out. From the @b{File} menu choose +@samp{load layout}, navigate to the tutorial folder, then +load the file @samp{tut1.pcb}. + + +@node Status-line and Input-field +@subsection The Status-line and Input-field +@cindex status information +@cindex displaying status information +@cindex input-field, position of + +The status-line is located at the bottom edge of the main window. +During normal operation the status information is visible there. +When a selected menu operation requires an additional button click, the +status-line is replaced by a message telling you to position the cursor +and click. +When a text input is required, the status-line is replaced by the +Input-field which has a prompt for typing the input. + +The status-line shows, from left to right, the side of the board that you +are viewing (@emph{Tab} key changes this), the current grid values, +if new lines are restricted to 45 degrees, +which type of 45 degree line mode is active, whether rubberband move and +rotate mode is on (R), and the zoom factor. +This information is followed by the active line-width, via-size +and drilling hole, keepaway spacing, and text scaling. Last is the active buffer number and the +name of the layout. An asterisk appearing at the far left indicates that the +layout has been modified since the last save. +Note that the name of the layout is not the same +thing as the filename of the layout. +Change the grid factor to 1.0 mm from the @b{Screen} menu. Observe how the +status line shows the new grid setting. Except for the case of the metric +grid, all dimensions in the status line are in units of 0.001 inch (1 mil). + +The input-field pops up (temporarily replacing the status-line) whenever user input +is required. Two keys are bound to the input field: the @emph{Escape} key +aborts the input, @emph{Return} accepts it. Let's change the name of a component +on the board to see how the input-field works. Position the cross hair over +R5, and press the @emph{N} key. The input field pops-up showing the name +for you to edit. Go ahead and change the name, then hit return. Notice the name +of the element changed. Now undo the change by pressing the @emph{U} key. You can +position the cross hair over the name, or the element before pressing the +@emph{N} key. + +Now select @samp{realign grid} from the @b{Screen} menu. Notice that the +status line has been replaced with an instruction to position the cursor +where you want a grid point to fall. In this case, since the cross hair +can only fall on a grid point, you must move the tip of the finger cursor +to the place where you want a grid point to appear. Do not worry that +the cross hair is not coincident with the cursor. Click @emph{Btn1} at +your chosen location. See how the grid has shifted, and the status line +has returned. + +The present cross hair position is displayed in the upper right corner of the window. +Normally this position is an absolute coordinate, but you can anchor a marker at +the cross hair location by pressing @emph{Ctrl-M} (try it now) and then the +display will read both the absolute cross hair position as well as the difference +between it and the marker. The numbers enclosed in < > are the X and Y distances +between the cross hair and the mark, while the numbers enclosed in parenthesis +are the distance and angle from the mark to the cross hair. The values displayed +are always in units of 0.001 inch (1 mil). +Pressing @emph{Ctrl-M} again turns the marker off. + +@node Layer Controls +@subsection The Layer Controls +@cindex layer controls +@cindex layers, switching on/off +@cindex layers, changing which is active +@cindex change active layer + +The layer control panel, located in the upper left, is used to turn on +and off the display of layer groups and to select the active drawing layer. +If a layer hasn't been named, the label "@emph{(unknown)}" is used as the default. +If this happens, it probably means the application resources are not installed +properly. + +The upper buttons are used to switch layers on and off. Click +@emph{} on one or more of them. Each click toggles the setting. +If you turn off the currently active layer, another one that is visible +will become active. If there are no others visible, you will not be +able to turn off the active layer. +When the layers are grouped, clicking on these buttons will toggle +the visibility of all layers in the same group. This is a good idea because +layers in the same group reside on the same physical layer of +the actual board. Notice that this example has 2 groups each having +3 layers, plus two other layers named @samp{unused}. +Use the @samp{Edit layer groups} option in the @samp{Settings} menu to +change the layer groupings in the lesstif GUI or the @samp{Preferences} +dialog from the @samp{File} menu in the GTK+ GUI. Note that changing the +groupings can radically alter the connectivity on the board. +Grouping layers is only useful for helping you to color-code +signals in your layout. Note that grouping layers actually reduces the number +of different physical layers available for your board, so to make an eight +layer board, you cannot group any layers. + +The @emph{far side} button turns on and off the visibility of elements +(including SMD pads) on the opposite (to the side you're viewing) +board side, as well as silk screening on that side. It does not +hide the x-ray view of the other copper layers, these must be turned off +separately if desired. Use the @emph{tab} key to view the entire board from the other +side. To see a view of what the back side of the board will actually look like, +make the solder layer the active layer then press @emph{tab} until the status +line says "solder" on the right, then turn off the visibility of all layers +except solder, pins/pads, vias, and silk. Now turn them all back on. + +The lowest button, named @emph{active}, is used to change the active +drawing layer. Pressing @emph{} on it pops up a menu to select which +layer should be active. +Each entry is labeled with the layer's name and drawn in its color. +The active layer is automatically made visible. The active layer is +always drawn on top of the other layers, so the ordering of layers +on the screen does not generally reflect the ordering of the manufactured +board. Only the solder, component, silkscreen, and solder-mask layers +are always drawn in their physical order. Bringing the active layer +to the top makes it easier to select and change objects on the active layer. +Try changing the active layer's name to @emph{ABC} by selecting +@samp{edit name of active layer} from the @samp{Edit} menu. +Changing the active layer can also be done by pressing keys +@emph{1..MAX_LAYER}. + +Turn off the visibility of the component layer. +Now make the component layer the active layer. Notice that it +automatically became visible. Try setting a few +other layers as the active layer. You should also experiment +with turning on and off each of the layers to see what happens. + +The netlist layer is a special layer for adding connections to +the netlist by drawing rat lines. This is not the recommended +way to add to the netlist, but occasionally may be convenient. +To learn how to use the netlist layer see @ref{Net Objects}. + + +@node Tool Selectors +@subsection The Tool Selectors +@cindex mode selection +@cindex tool selection +@cindex selecting a new tool + +The tool selector buttons reside below the layer controls. +They are used to select which layout tool to use in the drawing +area. Each tool performs its function when @emph{Btn1} is pressed. +Every tool gives the cursor a unique shape that identifies it. +The tool selector buttons themselves are icons that illustrate their function. +Each layout tool can also be selected from the keyboard: +@example + @emph{F1} key Via tool + @emph{F2} key Line tool + @emph{F3} key Arc tool + @emph{F4} key Text tool + @emph{F5} key Rectangle tool + @emph{F6} key Polygon tool + @emph{F7} key Buffer tool + @emph{F8} key Delete tool + @emph{F9} key Rotate tool + @emph{Insert} key Insert-point tool + @emph{F10} key Thermal tool + @emph{F11} key Arrow tool + @emph{F12} key Lock tool +@end example + +Some of the tools are very simple, such as the Via tool. Clicking +@emph{Btn1} with the Via tool creates a via at the cross hair position. +The via will have the diameter and drill sizes that are active, +as shown in the status line. +The Buffer tool is similar. With it, @emph{} copies +the contents of the active buffer to the layout, but only +those parts that reside on visible layers are copied. +The Rotate tool allows you to rotate elements, arcs, and text objects +90 degrees counter-clockwise with each click. Holding the @emph{Shift} +key down changes the Rotate tool to clockwise operation. +Anything including groups of objects +can be rotated inside a buffer using the rotate buffer menu option. + +The Line tool is explained in detail in @ref{Line Objects}. Go read +that section if you haven't already. +Activate the Line tool. Set the active layer to the solder layer. +Try drawing some lines. Use the @emph{U} key to undo some of the +lines you just created. Zoom in a bit closer with the @emph{Z} key. +Draw some more lines. Be sure to draw some separate lines by starting +a new anchor point with @emph{Ctrl-Btn1}. Change the @samp{crosshair snaps to pin/pads} +behavior in the @b{Settings} menu. Now draw a line. Notice that +the new line points must now always be on a grid point. It might not +be able to reach some pins or pads with this setting. Increase the active line thickness +by pressing the @emph{L} key. Note that the status line updates +to reflect the new active line thickness. Now draw another line. Before completing the +next line, make the component layer active by pressing the @emph{4} key. +Now finish the line. Notice that a via was automatically placed where +you switched layers. @pcb{} does not do any checks to make sure that +the via could safely be placed there. Neither does it interfere with +your desire to place lines haphazardly. It is up to you to place +things properly when doing manual routing with the Line tool. + +The Arc tool is explained in detail in @ref{Arc Objects}. Its +use is very similar to the Line tool. + +The Rectangle tool, Polygon tool and Thermal tool are explained in detail in +@ref{Polygon Objects}. Go read that section. +Remember that the Thermal tool will only create and destroy thermals +to polygons on the active layer. Use the Rectangle tool to make a +small copper plane on the component layer. Now place a via in the +middle of the plane. Notice that it does not touch the plane, and +they are not electrically connected. Use the Thermal tool to make +the via connect to the plane. Thermals allow the via or pin to +be heated by a soldering iron without having to heat the entire +plane. If solid connections were made to the plane, it could be +nearly impossible to solder. Shift-click on the via with the Thermal +tool to change the style of thermal used or to make the connection +solid. Click on the via again with the Thermal tool to remove the +connection to the plane. + +The Insert-point tool is an editing tool that allows you to add +points into lines and polygons. The +Insert-point tool enforces the 45 degree line +rule. You can force only the shorter line segment to 45 +degrees by holding the @emph{Shift} key down while inserting the point. +Try adding a point into one of the lines you created. Since line +clipping is turned on, you may need to move the cross hair quite far +from the point where you first clicked on the line. Turn off the +line clipping by selecting @samp{all-direction lines} from the +@b{Settings} menu (or hit +the @emph{Period} key). Now you can place an inserted point anywhere. +Try adding a point to the rectangle you made earlier. Start by clicking +somewhere along an edge of the rectangle, then move the pointer to +a new location and click again. + +The delete-mode deletes the object beneath the cursor with each +@emph{Btn1} click. +If you click at an end-point that two lines have in common, it will replace the two lines with a single line +spanning the two remaining points. This can be used to delete an "inserted" +point in a line, restoring the previous line. Now delete one of the original corner +points of the polygon you were just playing with. To do this, place the cross hair over the +corner and click on it with the Delete tool. You could also use the @emph{Backspace} key +if some other tool is active. Try deleting some of +the lines and intermediate points that you created earlier. Use undo +repeatedly to undo all the changes that you've made. Use redo +a few times to see what happens. Now add a new line. Notice that +you can no longer use redo since the layout has changed since +the last undo happened. The undo/redo tree is always pruned in this +way (@emph{i.e.} it has a root, but no branches). + +The Arrow tool is so important, it has its own section: @ref{Arrow Tool}. +Go read it now. + +The Lock tool allows you to lock objects on the layout. When an object +is locked, it can't be selected, moved, rotated, or resized. This is +useful for very large objects like ground planes, or board-outlines that +are defined as an element. With such large objects, nearly anywhere you +click with the Arrow tool will be on the large object, so it could be +hard to draw box selections. If you lock an object, the Arrow tool will +behave as if it didn't exist. You cannot unlock an object with undo. +You must click on it again with the Lock tool. If an object is locked, +previous changes to it cannot be undone either. When you lock +an object, a report message about it is popped up and will always tell +you what object it is, and that it is locked if you just locked it. +Other than noticing your inability to manipulate something, the only +way to tell an object is locked is with a report from the @b{Info} +menu. Use the Lock tool sparingly. + + +@node Layout Area +@subsection Layout Area +@cindex grid + +The layout area is where you see the layout. The cursor shape depends +on the active tool when the pointer is moved into the layout area. +A cross hair follows the mouse pointer with respect to the grid setting. +Select a new grid from the @emph{Screen} menu. +The new value is updated in the status line. +A different way to change the grid is +@emph{Shiftg} to decrease or @emph{g} to increase +it, but this only works for English (integer mil) grids. +The grid setting is saved along with the data when you save a pcb layout. +For homemade layouts a value around 50 is a good setting. +The cursor can also be moved in the layout area with the cursor (arrow) keys or, for larger +distances, by pressing the @emph{Shift} modifier together with a cursor key. + + +@node Log Window +@section Log Window +@cindex log window +@cindex messages + +This optional window is used to display all kind of messages including +the ones written to @emph{stderr} by external commands. The main advantage +of using it is +that its contents are saved in a scrolling list until the +program exits. Disabling this feature by setting the resource +@emph{useLogWindow} to @emph{false} will generate popup windows to display +messages. The @emph{stderr} of external commands will appear on @pcb{}s +@emph{stderr} which normally is the parent shell. I suggest you iconify +the log window after startup for example by setting @emph{*log.iconic} to +@emph{true} in the resource file. If @emph{raiseLogWindow} is set @emph{true}, +the window will deiconify and raise itself whenever new messages are to be +displayed. + + +@node Library Window +@section Library Window +@cindex library window + +The library window makes loading elements (or even partial layouts) easy. +Just click the appropriate library from the list on the left. A list +of its elements then appears on the right. Select an element +from the list by clicking on its description. Selecting an element from the +library will also automatically copy the element into +the active buffer, then invoke the @emph{Buffer} tool so +you can paste it to the layout. Elements in the old library should be +taken with a grain of salt (@emph{i.e.} check them carefully before +using). The old library names all begin with ~ so you can easily distinguish between +the old and new libraries. All of the elements in the new library +should be thoroughly vetted, so you +can use them with confidence. The new libraries are stored simply +as directories full of element files, so making additions to the +new library is easy since there is no need to learn @code{m4}. +For details on the old libraries, +check-out @ref{Library File} and @ref{Library Contents File}. For +details on the format of an element file used for the new libraries, +see @ref{Element File}. + + +@node Netlist Window +@section Netlist Window +@cindex Netlist Window + +The netlist window is very similar to the library window. On the left +is a list of all of the nets, on the right is the list of connections +belonging to the chosen net. The chosen net is highlighted in the +list and also shown on the second line of the window in red. If the +net name has a star to the left of it then it is "disabled". A disabled +net is treated as if it were not in the net list. This is useful, for +example, if you plan to use a ground plane and don't want the ground +net showing up in the rat's nest. You can enable/disable individual +nets by double-clicking the net name. If you want to enable or disable +all nets at once, there are two buttons at the top of the netlist +window for this purpose. + +The button labeled @samp{Sel Net On Layout} +can be used to select (on the layout) everything that is connected +(or is supposed to be connected) to the net. If you click on a +connection in the connection list, it will select/deselect +the corresponding pin or pad in the layout and also center the layout +window where it is located. If you "Find" (@samp{lookup connection +to object} in the @b{Connects} menu [also @emph{F} key]), a pin +or pad it will also choose the net and connection in the netlist window +if it exists in the netlist. + +If no netlist exists for the layout, then the netlist window does not +appear. You can load a netlist from a file from the @b{File} menu. The +format for netlist files is described in @ref{Netlist File}. + + +@node Drawing and Removing +@section Drawing and Removing Basic Objects +@cindex drawing objects +@cindex removing objects +@cindex erasing objects +@cindex object, drawing and removing + +hace begging gutting here, and do a real-world tutorial example. + +There are several ways of creating new objects: you can draw them yourself, +you can copy an existing object (or selection), or you can load an element from a file or +from the Library window. Each type of object has a particular tool for creating it. + +The active tool can be selected from the tool selectors in the bottom +left corner or by one of the function keys listed earlier in this chapter. +Each @emph{} press with the tool tells the application to create +or change the appropriate object or at least take +the first step to do so. Each tools causes the cursor to take +on a unique shape and also causes the corresponding +tool selector button to be highlighted. You can use either cue +to see which tool is active. + +Insert mode provides the capability of inserting new points into existing +polygons or lines. The 45 degree line clipping is now enforced when selected. +Press and hold the shift key while positioning the new point to only clip +the line segment to the nearer of the two existing points to 45 degrees. +You can also toggle the 45-degree clipping in the middle of a point +insertion by pressing the @emph{.} +If the shift key is not depressed and the 45 degree line clipping mode +is on, both new line segments must be on 45 degree angles - greatly +restricting where the new point may be placed. In some cases this can cause +confusion as to whether an insertion has been started since the two new +lines may be forced to lie parallel on top of the original line until the +pointer is moved far from the end points. + +Removing objects, changing their size or moving them only applies to objects +that are visible when the command is executed. + +@menu +* Common:: Keystrokes common to some objects. +* Lines:: +* Arcs:: +* Polygons:: Drawing polygons and rectangles. +* Text:: +* Vias:: +* Elements:: +* Pastebuffer:: A multi-purpose buffer. +@end menu + +@node Common +@subsection Common Drawing and Removing Methods +@cindex creating objects +@cindex object, creating an +@cindex removing objects +@cindex object, removing an +@cindex thickness of objects +@cindex object, changing the size of an + +There are several keystrokes and button events referring to an @emph{object} +without identifying its type. Here's a list of them: + +@emph{} creates (or deletes) an object depending on the +current mode. + +@emph{BackSpace} or @emph{Delete} removes the visible +object at the cursor location. When more than one object exists at the +location, the order of removal is: via, line, text, polygon and +element. The drawn layer order also affects the search - whatever is +top - most (except elements) is affected before lower items. Basically +all this means that what is removed is probably just what you expect. +If for some reason it isn't, undo and try again. +Only one object is removed for each keystroke. If two or more +of the same type match, the newest one is removed. + +Use @emph{s} and @emph{Shifts} to change the size (width) +of lines, arcs, text objects, pins, pads and vias, or to toggle the style +of polygons (whether pins and vias automatically have clearances). + +@emph{n} changes the name of pins, pads, vias, the +string of a text object, or the currently displayed label of an element. + +@emph{m} moves the line, arc, or polygon under the cross hair to the +active layer if it wasn't on that layer already. + +@emph{u} (undo) recovers from an unlimited number of operations +such as creating, removing, moving, copying, selecting etc. It works like +you'd expect even if you're in the midst of creating something. + +@emph{Shiftr} restores the last undone operation provided no other +changes have been made since the undo was performed. + +@emph{tab} changes the board side you are viewing. + +For a complete list of keystrokes and button events see @ref{Translations}. + + +@node Lines +@subsection Lines +@cindex lines, an example +@cindex example of line handling + +To draw new lines you have to be in @emph{line-mode}. Get there either by +selecting it from the @emph{Tool palette} or by pressing @emph{F2}. +Each successive @emph{notify} event creates a new line. The +adjustment to 45 degree lines is done automatically if it is selected from the +@emph{Display} menu. You can toggle the 45 degree mode setting by +pressing the @emph{.} (That is the period key). When 45 degree enforcement +is turned on there are three distinct modes of line creation: a single +line on the closest 45 degree vector towards the cross hair (but not necessarily +actually ending at the cross hair), two lines created such that the first leaves +the start point on a 90 degree vector and the second arrives at the cross hair +on a 45 degree vector, and finally two lines created such that the first leaves +the start point on a 45 degree vector and the second arrives at the cross hair +on a 90 degree vector. These last two modes always connect all the way from +the start and end points, and all lines have angles in 45 degree multiples. +The @emph{/} cycles through the three modes. The status line shows a +text icon to indicate which of the modes is active and the lines following +the cross hair motion show the outline of the line(s) that will actually be created. +Press @emph{Escape} to leave line-mode. + +@emph{l}, @emph{Shiftl} and the entries in the +@emph{Sizes} menu change the initial width of new lines. This width is also +displayed in the status line. + + +@node Arcs +@subsection Arcs +@cindex arc, an example + +An Arc is drawn with the @emph{arc-tool}. Get there either by selecting it +from the @emph{Tool palette} or by pressing @emph{F8}. Press @emph{Btn1} to +define the starting point for the arc. Drag the mouse towards the desired +end point along the path you want the arc to follow. The outline of the arc that +will be created is shown on the screen as you move the mouse. Arcs are always +forced to be 90 degrees and have symmetrical length and width ( i.e. they are +a quarter circle). The next @emph{Btn1} click creates the arc. It will have +the same width as new lines (displayed in the status line) and appear on the +active layer. The arc leaves the starting point towards the cross hair along +the axis whose distance from the cross hair is largest. Normally this means that +if you drag along the path you want the arc to follow, you'll get what you +want. If the grid is set to the arc radius, then the two distances will be +equal and you won't be able to get all of the possible directions. If this +is thwarting your desires, reduce the grid spacing (@emph{!ShiftG}) and +try again. + + +@node Polygons +@subsection Polygons and Rectangles +@cindex polygon, an example +@cindex example of polygon handling +@cindex rectangle, an example +@cindex example of rectangle handling + +A polygon is drawn by defining all of its segments as a series of +consecutive line segments. If the first point matches a new one and if +the number of points is greater than two, then the polygon is closed. +Since matching up with the first point may be difficult, you may use +@emph{Shiftp} to close the polygon. The @emph{Shiftp} won't +work if clipping to 45 degree lines is selected +and the final segment cannot match this condition. +I suggest you create simple convex polygons in order to avoid a strong +negative impact on the performance of the connection scanning routines. +The @emph{rectangle-mode} is just an easy way to generate rectangular polygons. +@emph{Polygon-mode} also is selected by @emph{F6} whereas +@emph{rectangle-mode} uses @emph{F4}. +Pressing a @emph{} at two locations creates a rectangle by +defining two of its corners. +@emph{Insert} brings you to @emph{insert-point-mode} which lets you +add additional points to an already existing polygon. +Single points may be removed by moving the cross hair to them and selecting +one of the delete actions @emph{(remove-mode, BackSpace, or Delete}. This only works +if the remaining polygon will still have three or more corners. +Pressing @emph{u} or @emph{p} while entering a new polygon +brings you back to the previous corner. Removing a point does not +force clipping to 45 degree angles (because it's not generally possible). +Newly created polygons will not connect to pins or vias +that pierce it unless you create a thermal (using the thermal mode) to make +the connection. If the edge of a polygon gets too close to a pin or via that +lies outside of it, a warning will be issued and the pin will be given a +special color. Increasing the distance between them will remove the warning +color. + + +@node Text +@subsection Text +@cindex text, an example +@cindex strings, an example +@cindex example of text handling + +Pressing @emph{F5} or clicking one of the text selector buttons +changes to @emph{text-mode}. +Each successive notify event (@emph{}) +pops up the input line at the bottom and queries for a string. +Enter it and press @emph{Return} to confirm or +@emph{Escape} to abort. +The text object is created with its upper left corner at the current pointer +location. +The initial scaling is changed by @emph{t} and +@emph{Shiftt} or from the @emph{Sizes} menu. + +Now switch to @emph{rotate-mode} and press +@emph{} at the text-objects location. Text objects +on the solder side of the layout are automatically mirrored and +flipped so that they are seen correctly when viewing the solder-side. + +Use @emph{n} to edit the string. + +@b{TEXT OBJECTS ON COPPER LAYERS CREATE COPPER LINES BUT THEY ARE NOT SCANNED FOR +CONNECTIONS}. If they are moved to the silkscreen layer, they +no longer create copper. + + +@node Vias +@subsection Vias +@cindex vias, an example +@cindex example of via handling + +The initial size of new vias may be changed by @emph{v} and +@emph{Shiftv} or by selecting the appropriate entry from the +@emph{Sizes} menu. @emph{Mod1v} and @emph{Mod1 Shiftv} do +the same for the drilling hole of the via. +The statusline is updated with the new values. +Creating a via is similar to the other objects. Switch to @emph{via-mode} +by using either the selector button or @emph{F1} then press +@emph{]} or @emph{} to create one. +@emph{n} changes the name of a via. If you want to create a mounting +hole for your board, then you can place a via where you want the hole to +be then convert the via into a hole. The conversion is done by pressing +@emph{!Ctrlh} with the cross hair over the via. Conceptually it is +still a via, but it has no copper annulus. If you create such a hole in +the middle of two polygons on different layers, it will short the layers. +Theoretically you could arrange for such a hole not to be plated, but a +metal screw inserted in the hole would still risk shorting the layers. +A good rule is to realize that holes in the board really are vias between +the layers and so place them where they won't interfere with connectivity. +You can convert a hole back into a normal via with the same keystroke used +to convert it in the first place. + +@node Elements +@subsection Elements +@cindex element, an example +@cindex example of element handling + +Some of the functions related to elements only work if both the package +layer and the pin layer are switched on. + +Now that you're familiar with many of the basic commands, it is +time to put the first element on the layout. +First of all, you have to load data into the paste buffer. +There are four ways to do this: +@example + 1) load the data from a library + 2) load the data from a file + 3) copy data from an already existing element + 4) convert objects in the buffer into an element +@end example +We don't have any elements on the screen yet nor anything in the +buffer, so we use number one. + +@cindex example files +@cindex m4, preprocessing example files +Select @emph{lsi} from the menu in the library window press +@emph{} twice at the appropriate text-line to get +the MC68030 CPU. +The data is loaded and the mode is switched to @emph{pastebuffer-mode}. +Each notify event now creates one of these beasts. Leave the mode +by selecting a different one or by @emph{Escape} which resets +all modes.. +The cross hair is located at the @emph{mark} position as defined by +the data file. Rotating the buffer contents is done by selecting +the @emph{rotate} entry of the @emph{Buffer} menu or by pressing +@emph{ShiftF3}. The contents of the buffer +are valid until new data is loaded into it either by a cut-to-buffer +operation, copy-to-buffer operation or by loading a new data file. +There are 5 buffers +available (possibly more or less if changed at compile time +with the @code{MAX_BUFFER} variable in @file{globalconfig.h}). +Switching between them is done by selecting a menu entry or +by @emph{Shift1..MAX_BUFFER}. +Each of the two board sides has its own buffers. + +The release includes all data files for the circuits that are used +by the demo layout. The elements in the LED example are not found in the library, +but you can lift them from the example itself if you want. +If you have problems with the color of the cross hair, change the resource +@emph{cross hairColor} setting to a different one. + +@cindex example of loading an element file +@cindex pins, an example +@cindex example of pin handling +Now load a second circuit, the MC68882 FPU for example. +Create the circuit as explained above. You now have two different unnamed +elements. Unnamed means that the layout-name of the element +hasn't been set yet. Selecting @emph{description} from the @emph{Display} +menu displays the description string of the two circuits which +are CPU and FPU. The values of the circuits are set to MC68030 and MC68882. +Each of the names of an element may be changed +by @emph{n} at the elements location and editing the old name in +the bottom input line. Naming pins and vias is similar to elements. +You can hide the element name so that it won't appear on the board +silkscreen by pressing @emph{h} with the cursor over the element. +Doing so again un-hides the element name. + +Entering @kbd{:le} and selecting an element data file is +the second way to load circuits. + +The third way to create a new element is to copy an existing one. +Please refer to @ref{Moving and Copying}. + +@cindex example of creating an element +@cindex element, creating a new package +@cindex pastebuffer, convert contents to element +@cindex buffer, convert contents to element +The fourth way to create a new element is to convert a buffer's contents +into an element. Here's how it's done: Select the Via-tool from the +@emph{Tool pallet}. Set the grid spacing to something appropriate for +the element pin spacing. Now create a series of vias where the pins +go. Create them in pin number order. It is often handy to place a reference +point (@emph{!Ctrlm}) in the center of the first pin in order to measure +the location of the other pins. Next make a solder-side layer the active +layer from the @emph{active-layer} popup menu. Now draw the outline of +the element using lines and arcs. When you're done, select everything that +makes up the element with a box selection (@emph{ drag, +}). Now select "cut selection to buffer" from the @emph{Buffer} +menu. Position the cursor over the center of pin 1 and press the left +button to load the data into the buffer. +Finally select "convert buffer to element" from the @emph{Buffer} menu. +You'll only want to create elements this way if they aren't already in the +library. It's also probably a good idea to do this before starting any of +the other aspects of a layout, but it isn't necessary. + +To display the pinout of a circuit move to it and press @emph{Shiftd} +or select @emph{show pinout} from the @emph{Objects} menu. A new window +pops up and displays the complete pinout of the element. This display can +be difficult to read if the component has been rotated 90 degrees :-( +therefore, the new window will show an un-rotated view so the pin names +are readable. +@emph{d} displays the name of one or all pins/pads inside the +Layout area, this is only for display on-screen, it has no effect on any +printing of the layout. + +You also may want to change a pin's or pad's current size by pressing +@emph{s} to increase or @emph{Shifts} to decrease it. While +this is possible, it is not recommended since care was probably taken +to define the element structure in the first place. You can also change the thickness +of the element's silkscreen outline with the same keys. You can +change whether a pin or SMD pad is rounded or square with the @emph{q}. +SMD pads should usually have squared ends. Finally, you can change whether +the non-square pins are round or octagonal with the @emph{!Ctrlo}. + +SMD elements and silkscreen objects are drawn in the "invisible object" +color if they are located on the opposite side of the board. + +For information on element connections refer to @ref{Connection Lists}. + + +@node Pastebuffer +@subsection Pastebuffer +@cindex pastebuffer, an example +@cindex example of pastebuffer handling +@cindex buffer, an example +@cindex example of buffer handling + +The line-stack and element-buffer of former releases have been replaced +by 5 (possibly more or less if changed at compile time +with the @code{MAX_BUFFER} variable in @file{globalconfig.h}) +multi-purpose buffers that are selected by +@emph{Shift1..MAX_BUFFER}. The status line shows which buffer is +the active one. +You may load data from a file or layout into them. +Cut-and-paste works too. +If you followed the instructions earlier in this chapter you should +now have several objects on the screen. Move the cross hair to one of them +and press @emph{} to toggle its selection flag. (If you drag the +mouse while the button is down, a box selection will be attempted instead +of toggling the selection.) The object +is redrawn in a different color. You also may want to try +moving the pointer while holding the third button down and +release it on a different location. This selects all objects inside the +rectangle and unselects everything else. If you want to add a box selection +to an existing selection, drag with @emph{Mod1} instead. +Dragging @emph{Shift Mod1} unselects objects in a box. +Now change to @emph{pastebuffer-mode} and select some operations from the +@emph{Buffer} menu. Copying objects to the buffer is available as +@emph{Mod1c} while cutting them uses @emph{Mod1x} as +shortcut. Both clear the buffer before new data is added. +If you use the menu entries, you have to supply a cross hair position by +pressing a mouse button. The objects are attached to the pastebuffer +relative to that cross hair location. +Element data or PCB data may be merged into an existing layout by loading +the datafiles into the pastebuffer. Both operations are available from +the @emph{File} menu or as user commands. + +@node Moving and Copying +@section Moving and Copying +@cindex moving, an example +@cindex copying, an example +@cindex example of moving +@cindex example of copying + +All objects can be moved including element-names, by +@emph{}, dragging the pointer while holding the button down +and releasing it at the new location of the object. If you use +@emph{Mod1} instead, the object is copied. Copying does not work for +element-names of course. You can move all selected objects with +@emph{Shift }. This uses the Pastebuffer, so +it will remove whatever was previously in the Pastebuffer. +Please refer to @ref{Pastebuffer}. +If you want to give a small nudge to an object, but you don't think +that the mouse will give you the fine level of control that you want, +you can position the cursor over the object, press @emph{[}, +move it with the arrow keys, then press @emph{]} when it's at the +desired position. Remember that all movements are forced onto grid coordinates, so +you may want to change the grid spacing first. + +@cindex moving, traces to a different layer +@cindex changing layers +To move a trace or group of traces to a different layer, first select +the tracks to be moved. It's easiest to do this if you shut off everything +but that layer first (i.e. silk, pins, other layers, etc). +Now set the current layer to be the new layer. +Press Shift-M to move all the selected tracks to the current layer. +See the @emph{MoveToCurrentLayer} action for more details. + +@node Loading and Saving +@section Loading and Saving +@cindex loading, an example +@cindex saving, an example +@cindex example of saving +@cindex example of loading + +After your first experience with @pcb{} you will probably want to save +your work. @kbd{:s name} passes the data to an external program which +is responsible for saving it. For details see @emph{saveCommand} in +@ref{Resources}. +Saving also is available from the @emph{File} menu, either with or +without supplying a filename. @pcb{} reuses the last +filename if you do not pass a new one to the save routine. + +To load an existing layout either select @emph{load layout data} from the +@emph{File} menu or use @kbd{:l filename}. A file select box pops up if you +don't specify a filename. Merging existing layouts into the new one is +supported either by the @emph{File} menu or by @kbd{:m filename}. + +@cindex backup +@cindex saving layouts +@cindex preventing loss of data +@cindex /tmp +@cindex directory /tmp +@cindex temporary files +@pcb{} saves a backup of the current layout at a user specified interval. +The backup filename is created by appending a dash, "-", to the @file{.pcb} filename. +For example, if you are editing the layout in @file{projects/board.pcb} then the +backup file name will be @file{projects/board.pcb-}. If the layout is new and +has not been saved yet, then the backup file name is @file{PCB.####.backup} where the "####" +will be replaced by the process ID of the currenting running copy of @pcb{}. +This default backup file name may be changed at compilation time via the +@code{BACKUP_NAME} +variable in @file{globalconfig.h}). During critical +sections of the program or when data would be lost it is saved as +@file{PCB.%i.save}. This file name may be changed at compile time +with the @code{SAVE_NAME} variable in @file{globalconfig.h}. + + +@node Printing +@section Printing +@cindex printing, an example +@cindex example of printing + +@pcb{} now has support for device drivers, +@code{PostScript}, @emph{encapsulated PostScript}, +and @emph{Gerber RS-274X} drivers are +available so far. The @emph{Gerber RS-274X} +driver additionally generates a numerical control (NC) drill file for +automated drilling, +a bill of materials file to assist in materials procurement and +inventory control, and a centroid (X-Y) file which includes the +centroid data needed +by automatic assembly (pick and place) machines. + I recommend the use of @code{GhostScript} if you +don't have a @code{PostScript} printer for handling the PostScript +output. Printing always generates +a complete set of files for a specified driver. +See the page about +the @emph{Print()} action for additional information about the filenames. +The control panel offers a number of options. Most of them are not available +for Gerber output because it wouldn't make sense, for example, to scale the gerber output +(you'd get an incorrectly made board!) The options are: + +@table @samp +@cindex device, selecting an output +@cindex output device +@item device +The top menu button selects from the available device drivers. + +@cindex rotating printout +@item rotate +Rotate layout 90 degrees counter-clockwise before printing (default). + +@cindex mirroring printout +@item mirror +Mirror layout before printing. Use this option depending +on your production line. + +@cindex color printout +@item color +Created colored output. All colors will be converted to black if this option +is inactive. + +@cindex outline printout +@item outline +Add a board outline to the output file. The size is determined by the +maximum board size changeable from the @emph{sizes} menu. The outline appears +on the top and bottom sides of the board, but not on the internal layers. +An outline can be useful for determining where to shear the board from the +panel, but be aware that it creates a copper line. Thus it has the potential +to cause short circuits if you don't leave enough room from your wiring +to the board edge. Use a viewer to see what the output outline looks like +if you want to know what it looks like. + +@cindex alignment targets +@item alignment +Additional alignment targets are added to the output. The distances between +the board outline is set by the resource @emph{alignmentDistance}. Alignment +targets should only be used if you know for certain that YOU WILL BE USING +THEM YOURSELF. It is extremely unlikely that you will want to have alignment +targets if you send gerber files to a commercial pcb manufacture to be made. + +@cindex scaling a printout +@item scaling +It's quite useful to enlarge your printout for checking the layout. +Use the scrollbar to adjust the scaling factor to your needs. + +@cindex print media +@cindex media, size of +@item media +Select the size of the output media from this menu. The user defined size +may be set by the resource @emph{media} either from one of the well known +paper sizes or by a @code{X11} geometry specification. +This entry is only available if you use @code{X11R5} or later. +For earlier releases the user defined size or, if not available, @emph{A4} +is used. +Well known size are: +@display + A3 + A4 + A5 + letter + tabloid + ledger + legal + executive +@end display + +@cindex offset of printout +@cindex print offset +@item offset +Adjust the offsets of the printout by using the panner at the right side +of the dialog box. +This entry is only available if you use @code{X11R5} or later. A zero +offset is used for earlier releases. + +@cindex DOS filenames +@item 8.3 filenames +Select this button to generate DOS compatible filenames for the output files. +The @emph{command} input area will disappear if selected. + +@cindex print command +@item commandline +Use this line to enter a command (starts with @kbd{|}) or a filename. +A %f is replaced by the current filename. +The default is set by the resource @emph{printCommand}. + +@end table + +The created file includes some labels which are guaranteed to stay unchanged +@table @samp +@item PCBMIN +identifies the lowest x and y coordinates in mil. + +@item PCBMAX +identifies the highest x and y coordinates in mil. + +@item PCBOFFSET +is set to the x and y offset in mil. + +@item PCBSCALE +is a floating point value which identifies the scaling factor. + +@item PCBSTARTDATA +@itemx PCBENDDATA +all layout data is included between these two marks. You may use them with an +@code{awk} script to produce several printouts on one piece of paper by +duplicating the code and putting some @code{translate} commands in front. +Note, the normal @code{PostScript} units are 1/72 inch. +@end table + +@node Exporting +@section Exporting a layout +@cindex Exporting a layout +@vindex Exporting a layout + +To export a layout choose @emph{Export layout} from the @emph{File} menu, then +select the desired exporter. + +@menu +* bom:: Bill of materials. +* gcode:: G-code. +* gerber:: Gerber. +* nelma:: Nelma. +* png:: Image. +* ps:: Postscript. +* eps:: Eps. +@end menu + +@node bom +@subsection Bill of materials (bom) +@cindex bom +@cindex bill of materials + +Produces a bill of materials (BOM) file and a centroid (XY) file. + +@node gcode +@subsection G-code (gcode) +@cindex gcode +@cindex g-code +@cindex cnc + +The gcode exporter can generate RS274/NGC G-CODE files to be used with a CNC mill to +produce pcb's by mechanically removing copper from the perimeter of all elements. + +The elements are enlarged in order to compensate for the cutting tool size so +that the remaining copper corresponds to the original size; however all +polygons are left unchanged and will end up being a little smaller; this is not a +problem because the electrical connection is done with traces, which are correctly +enlarged. + +A .cnc file is generated for every copper layer, with the bottom layer mirrored so +that the milling is done right; of course it's not possible to produce directly +multi-layer (more than 2) pcb's with this method, but the cnc files for +intermediate layers are generated anyways. + +A drill file is also generated, and it contains all drills regardless of the hole +size; the drilling sequence is optimized in order to require the least amount of +movement. + +The export function generates an intermediate raster image before extracting the contour +of copper elements, and this image is saved as well (in .png format) for inspection. + +When the spacing between two elements is less than the tool diameter they will merge +and no isolation will be cut between them; the control image should be checked for +this behaviour. + +Possible workarounds are: increasing spacing, decreasing the tool size, increasing +the intermediate image resolution. + +To maximize the chance of producing correct pcb's it would be better to increase +the DRC clearance to at least the tool diameter and use traces as thick as possible; +the rule is: use the largest element that will not prevent the isolation cut. + +The exporter parameters are: + +@table @b +@item basename +base name for generated files + +@item dpi +intermediate image resolution; affects precision when extracting contours + +@item mill depth +should be the copper depth + +@item safe z +Z value when moving between polygons + +@item tool radius +copper elements are enlarged by this amount + +@item drill depth +depth of drills + +@item measurement unit +for all parameters above, can be mm,um,inch,mil; g-code is always mm or inch +@end table + +All .cnc files specify Z values as parameters, so that it's easy to +change them without the need to run the exporter again. + +Operation was verified with the EMC2 g-code interpreter. + +Following is a sample layout that is converted with default settings: +@center @image{gcode,,,Sample Layout,png} + +The control image shows that the spacing is sufficient: +@center @image{gcode_control_img,,,Control Image,png} + +The final tool path follows the perimeter of all elements: +@center @image{gcode_tool_path,,,Resulting Tool Path,png} + +@node gerber +@subsection Gerber (gerber) +@cindex gerber + +Produces RS274-X (a.k.a. gerber) photo plot files and Excellon drill files. + +@node nelma +@subsection Nelma (nelma) +@cindex nelma + +Numerical analysis package export. + +@node png +@subsection Image (png) +@cindex png +@cindex image export + +Produces GIF/JPEG/PNG image files. + +@node ps +@subsection Postscript (ps) +@cindex ps +@cindex postscript + +Export as postscript. +Can be later converted to pdf. + +@node eps +@subsection Encapsulated Postscript (eps) +@cindex eps +@cindex encapsulated postscript + +Export as eps (encapsulated postscript) for inclusion in other documents. +Can be later converted to pdf. + + +@node Connection Lists +@section Connection Lists +@cindex example of connection lists +@cindex connections, creating list of + +After completing parts of your layout you may want to check if all drawn +connections match the ones you have in mind. This is probably best done +in conjunction with a net-list file: see @ref{Rats Nest}. +The following examples give more rudimentary ways to examine +the connections. +@example + 1) create at least two elements and name them + 2) create some connections between their pins + 3) optionally add some vias and connections to them +@end example + +Now select @emph{lookup connection} from the @emph{Connections} menu, +move the cursor to a pin or via and press any mouse button. @pcb{} +will look for all other pins and/or vias connected to the one you have +selected and display the objects in a different color. +Now try some of the reset options available from the same menu. + +There also is a way to scan all connections of one element. Select +@emph{a single element} from the menu and press any button at the +element's location. All connections of this element will be saved +to the specified file. +Either the layout name of the element or its canonical name is used to +identify pins depending on the one which is displayed on the screen +(may be changed by @emph{Display} menu). + +An automatic scan of all elements is initiated by choosing +@emph{all elements}. It behaves in a similar fashion to scanning a single +element except the resource @emph{resetAfterElement} +is used to determine if connections should be reset before a new element is +scanned. Doing so will produce very long lists because the power lines are +rescanned for every element. By default the resource is set to @emph{false} +for this reason. + +To scan for unconnected pins select @emph{unused pins} from the same +menu. + + +@node Arrow Tool +@section Arrow Tool +@cindex selecting, using the arrow tool +@cindex moving objects +@cindex arrow tool +@cindex tool, arrow + +Some commands mentioned earlier in this chapter also are able to operate on all +selected and visible objects. The Arrow tool is used to select/deselect +objects and also to move objects or selections. If you click and release +on an object with the Arrow tool, it will unselect everything else and +select the object. Selected objects change color to reflect that +they are selected. If you @emph{Shift} click, it will add the object to +(or remove) the object from the existing selection. If you drag with +the mouse button down with the Arrow tool, one of several things could +happen: if you first pressed the button on a selected object, you +will be moving the selection to where you release the button. If you +first pressed the button on an unselected object, you will be moving +that object. If you first pressed the button over empty space, you +will be drawing a box to select everything inside the box. The @emph{Shift} +key works the same way with box selections as it does with single objects. + +Moving a single un-selected object is different from moving a selection. +First of all, you can move the end of line, or a point in a polygon this +way which is impossible by moving selections. Secondly, if rubber banding +is turned on, moving a single object will rubber-band the attached lines. +Finally, it is faster to move a single object this way since there is no need +to select it first. + +You can select any visible object unless it is locked. If you select an +object, then turn off its visibility with the Layer controls, it won't +be moved if you move the remaining visible selection. + +If you have not configured to use strokes in the @pcb{} user interface, then +the middle mouse button is automatically bound to the arrow tool, regardless +of the active tool (which is bound to the first mouse button). So using +the middle button any time is just like using the first mouse button +with the Arrow tool active. + +The entries of the @emph{Selection} menu are hopefully self-explanatory. +Many of the @emph{Action Commands} can take various key words that make +them function on all or some of the selected items. + +@node Rats Nest +@section Rats Nest +@cindex rats nest +@cindex netlist +@cindex rat-line + +If you have a netlist that corresponds to the layout you are working on, you +can use the rats-nest feature to add rat-lines to the layout. +First you will need to load a netlist file (see @emph{:rn}, +@ref{User Commands}). +@emph{w} adds rat-lines on the active layer using the current +line thickness shown in the status line (usually you'll want them to be thin lines). +Only those rat-lines that fill in missing connectivity (since you have +probably routed some connections already) are added. +If the layout is already completely wired, nothing will be added, and you will +get a message that the wiring is complete. + +Rat-lines are lines having the special property that they only connect to pins and +pads at their end points. Rat-lines may be drawn differently to other lines +to make them easier to identify since they have special behavior and cannot +remain in a completed layout. +Rat-lines are added in the minimum length straight-line tree pattern +(always ending on pins or pads) that satisfies the missing connectivity in the circuit. +Used in connection with moves and rotates of the elements, they are extremely useful for +deciding where to place elements on the board. The rat-lines will always automatically +rubberband to the elements whether or not the rubberband mode is on. The only way for +you to move them is by moving the parts they connect to. +This is because it is never desirable to have the rat-lines disconnected from +their element pins. Rat-lines will normally criss-cross +all over which gives rise to the name "rats nest" describing a layout connected with +them. If a SMD pad is unreachable on the active layer, a warning will be issued +about it and the rat-line to that pad will not be generated. + +A common way to use rats nests is to place some +elements on the board, add the rat-lines, and then use a series of moves/rotates of the +elements until the rats nest appears to have minimum tangling. You may want to iterate this step +several times. Don't worry if the layout looks messy - as long as you can get a sense for whether +the criss-crossing is better or worse as you move things, you're fine. +After moving some elements around, you may want to optimize the rats nest @emph{o} +so that the lines are drawn between the closest points (this can change once you've moved components). +Adding rat-lines only to selected pads/pins (@emph{Shiftw}) +is often useful to layout a circuit a little bit at a time. +Sometimes you'll want to delete all the rat-lines (@emph{e}) or +selected rat-lines (@emph{Shifte}) in order to reduce confusion. +With a little practice you'll be able to achieve a near optimal component placement with +the use of a rats nest. + +Rat-lines are not only used for assisting your element placement, they can also help +you to route traces on the board. +Use the @emph{m} to convert a rat-line under the cursor into +a normal line on the active layer. +Inserting a point into a rat-line will also cause the two new lines to be normal lines +on the board. +Another way that you can use rat-lines is to +use the @emph{f} with the cursor over a pad or pin. All of the pins and +pads and rat-lines belonging to that net will be highlighted. This is a helpful way to +distinguish one net from the rest of the rats nest. You can then route those tracks, +turn off the highlighting (@emph{Shiftf}) and repeat the process. This will work even +if the layer that the rat-lines reside on is made invisible - so only the pins and pads +are highlighted. +Be sure to erase the rat-lines (@emph{e} erases them all) once you've +duplicated their connectivity by adding your own lines. +When in doubt, the @emph{o} will delete only those +rat-lines that are no longer needed. + +If connections exist on the board that are not listed in the netlist when +@emph{w} is pressed, warning messages are issued and the affected pins and +pads are drawn in a special @emph{warnColor} until the next @emph{Notify()} event. +If the entire layout agrees completely with the netlist, a message informs you that +the layout is complete and no rat-lines will be added (since none are needed). +If the layout is complete, but still has rat-lines then you will be warned +that rat-lines remain. If you get no message at all it's probably because some +elements listed in the net list can't be found and where reported in an earlier +message. +There shouldn't be any rat-lines left in a completed layout, only normal lines. + +The @emph{Shiftw} is used to add rat-lines to only those missing connections among +the selected pins and pads. This can be used to add rat-lines in an incremental +manner, or to force a rat-line to route between two points that are not the +closest points within the net. Often it is best to add the rats nest in an incremental fashion, laying +out a sub-section of the board before going further. This is easy to accomplish since +new rat-lines are never added where routed connectivity already makes the necessary +connections. + +@node Design Rule Checking +@section Design Rule Checking +@cindex design rule checking +@cindex drc +@cindex spacing, minimum +@cindex overlap, minimum + +After you've finished laying out a board, you may want to check +to be certain that none of your interconnections are too closely +spaced or too tenuously touching to be reliably fabricated. The design +rule checking (DRC) function does this for you. Use the command ":DRC()" (without +the quotes of course) to invoke the checker. If there are no problem areas, +you'll get a message to that effect. If any problem is encountered, you will get +a message about it and the affected traces will be highlighted. One part of the +tracks of concern will be selected, while the other parts of concern will have the +"FindConnection" highlighting. The screen will automatically be centered in the +middle of the object having the "FindConnection" (Green) highlighting. The middle of +the object is also the coordinates reported to be "near" the problem. The actual trouble +region will be somewhere on the boundary of this object. If the two parts are +from different nets then there is some place where they approach each +other closer than the minimum rule. If the parts are from the same net, then +there is place where they are only barely connected. Find that place and connect +them better. + +After a DRC error is found and corrected you must run the DRC again because +the search for errors is halted as soon as the first problem is found. Unless you've +been extremely careless there should be no more than a few design rule errors +in your layout. The DRC checker does not check for minimum spacing rules to +copper text, so always be very careful when adding copper text to a layout. +The rules for the DRC are specified in the application resource file. The minimum +spacing value (in mils) is given by the @emph{Settings.Bloat} value. The default +is 7 mils. The minimum touching overlap (in mils) is given by the +@emph{Settings.Shrink} value. This value defaults to 5 mils. Check with your +fabrication process people to determine the values that are right for you. + +If you want to turn off the highlighting produced by the DRC, perform an +undo (assuming no other changes have been made). To restore the highlighting, +use redo. The redo will restore the highlighting quickly without re-running +the DRC checker. + +@node Trace Optimizer +@section Trace Optimizer +@cindex trace optimizer +@cindex optimizer + +PCB includes a flexible trace optimizer. The trace optimizer can be run +after auto routing or hand routing to clean up the traces. + +@table @b +@item Auto-Optimize +Performs debumpify, unjaggy, orthopull, vianudge, and viatrim, in that +order, repeating until no further optimizations are performed. + +@item Debumpify +Looks for U shaped traces that can be shortened or eliminated. + +@item Unjaggy +Looks for corners which could be flipped to eliminate one or more +corners (i.e. jaggy lines become simpler). + +@item Vianudge +Looks for vias where all traces leave in the same direction. Tries to +move via in that direction to eliminate one of the traces (and thus a +corner). + +@item Viatrim +Looks for traces that go from via to via, where moving that trace to a +different layer eliminates one or both vias. + +@item Orthopull +Looks for chains of traces all going in one direction, with more traces +orthogonal on one side than on the other. Moves the chain in that +direction, causing a net reduction in trace length, possibly eliminating +traces and/or corners. + +@item SimpleOpts +Removing unneeded vias, replacing two or more trace segments in a row +with a single segment. This is usually performed automatically after +other optimizations. + +@item Miter +Replaces 90 degree corners with a pair of 45 degree corners, to reduce +RF losses and trace length. + +@end table + +@node Searching for elements +@section Searching for elements +@cindex Searching for elements +@vindex Searching for elements + +To locate text or a specific element or grouping of similar elements +choose @samp{Select by name} from the @b{Select} menu, then choose the +appropriate subsection. At the bottom of the screen the prompt +@emph{pattern:} appears. Enter the text or @ref{Regular Expressions} +of the text to be found. Found text will be highlighted. + +@node Measuring distances +@section Measuring distances +@cindex Measuring distances +@vindex Measuring distances + +To measure distances, for example the pin-to-pin pitch of a part to +validate a footprint, place the cursor at the starting +measurement point, then press @emph{!Ctrlm}. This marks the +current location with a @emph{X}. The @emph{X} mark is now the zero point +origin for the relative cursor position display. The cursor display +shows both absolute position and position relative to the mark as +the mouse is moved away from the mark. If a mark is already present, +the mark is removed and the cursor display stops displaying relative +cursor coordinates. + +@node Vendor drill mapping +@section Vendor Drill Mapping +@cindex Vendor rules +@cindex Vendor mapping +@cindex Drill table +@cindex Vendor drill table + +@pcb{} includes support for mapping drill holes to a specified set +of sizes used by a particular vendor. Many PCB manufacturers have a +prefered set of drill sizes and charge extra when others are used. +The mapping can be performed on an existing design and can also be +enabled to automatically map drill holes as vias and elements are +instantiated. + +The first step in using the vendor drill mapping feature is to create +a resource file describing the capabilities of your vendor. The file +format is the resource file format described in @ref{Resource Syntax}. +A complete example is given below. + +@example +# Optional name of the vendor +vendor = "Vendor Name" + +# units for dimensions in this file. +# Allowed values: mil/inch/mm +units = mil + +# drill table +drillmap = @{ + # When mapping drill sizes, select the nearest size + # or always round up. Allowed values: up/nearest + round = up + + # The list of vendor drill sizes. Units are as specified + # above. + 20 + 28 + 35 + 38 + 42 + 52 + 59.5 + 86 + 125 + 152 + + # optional section for skipping mapping of certain elements + # based on reference designator, value, or description + # this is useful for critical parts where you may not + # want to change the drill size. Note that the strings + # are regular expressions. + skips = @{ + @{refdes "^J3$"@} # Skip J3. + @{refdes "J3"@} # Skip anything with J3 as part of the refdes. + @{refdes "^U[1-3]$" "^X.*"@} # Skip U1, U2, U3, and anything starting with X. + @{value "^JOHNSTECH_.*"@} # Skip all Johnstech footprints based on the value of a part. + @{descr "^AMP_MICTOR_767054_1$"@} # Skip based on the description. + @} +@} + +# If specified, this section will change the current DRC +# settings for the design. Units are as specified above. +drc = @{ + copper_space = 7 + copper_width = 7 + silk_width = 10 + copper_overlap = 4 +@} +@end example + +The vendor resource is loaded using the @emph{LoadVendor} action. +This is invoked by entering: +@example +:LoadVendor(vendorfile) +@end example +from within @pcb{}. Substitute the file name of your vendor +resource file for @samp{vendorfile}. This action will load the vendor +resource and modify all the drill holes in the design as well as the +default via hole size for the various routing styles. + +Once a vendor drill map has been loaded, new vias and elements will +automatically have their drill hole sizes mapped to the vendor drill +table. Automatic drill mapping may be disabled under the ``Settings'' +menu. To re-apply an already loaded vendor drill table to a design, +choose ``Apply vendor drill mapping'' from the ``Connects'' menu. + +See @ref{Actions} for a complete description of the actions associated +with vendor drill mapping. + +Note that the expressions used in the @code{skips} section are regular +expressions. See @ref{Regular Expressions} for an introduction to +regular expressions. + +@c --------------------------- Autorouter Chapter ------------------------------- +@node Autorouter +@chapter Autorouter +@cindex autorouter + +@pcb{} includes an autorouter which can greatly speed up the +layout of a circuit board. The autorouter is a rectangle-expansion +type of autorouter based on +``A Method for Gridless Routing of Printed Circuit Boards'' by +A. C. Finch, K. J. Mackenzie, G. J. Balsdon, and G. Symonds in the +1985 Proceedings of the 22nd ACM/IEEE Design Automation Conference. +This reference is available from the ACM Digital Library at +@url{http://www.acm.org/dl} for those with institutional or personal +access to it. It's also available from your local engineering +library. The reference paper is not needed for using the autorouter. + +Before using the autorouter, all elements need to be loaded into the +layout and placed and the connectivity netlist must be loaded. Once +the elements have been placed and the netlist loaded, the following +steps will autoroute your design. + +@enumerate +@item Turn off visibility of any layers that you don't want the router +to use. + +@item Turn of via visibility if you don't want the router to use any +new vias. + +@item Use only plain rectangles for power/ground planes that you want + the router to use [use the rectangle tool!] + +@item Make at least one connection from any plane you want the router to + use to the net you want it to connect to. + +@item Draw continuous lines (on all routing layers) to outline keep-out + zones if desired. + +@item Use routing styles in the netlist to have per-net routing styles. + Note that the routing style will be used for an entire net. This means + if you have a wide metal setting for a power net you will need to manually + route breakouts from any fine pitch parts on their power pins because + the router will not be able to change to a narrow trace to connect + to the part. + +@item Set the current routing style to whatever you'd like the router to + use for any nets not having a defined route style in the netlist. + +@item Disable any nets that you don't want the autorouter to route + (double-click them in the netlist window to add/remove the *) + + NOTE: If you will be manually routing these later not using + planes, it is usually better to let the autorouter route them then rip + them up yourself afterwards. If you plan to use a ground/power plane + manually, consider making it from one or more pure rectangles and + letting the autorouter have a go at it. + +@item Create a fresh rat's nest. ('E' the 'W') + +@item Select ``show autorouter trials'' in the settings menu if you want + to watch what's happening + +@item Choose ``autoroute all rats'' in the connection menu. + +@item If you really want to muck with the router because you have a + special design, e.g. all through-hole components you can mess with + layer directional costs by editing the autoroute.c source file and + changing the directional costs in lines 929-940. and try again. Even + more mucking about with costs is possible in lines 4540-4569, but it's + probably not such a good idea unless you really just want to + experiment. + +@end enumerate + +After the design has been autorouted, you may want to run the trace +optimizer. See section @ref{Trace Optimizer} for more information on +the trace optimizer. + + +@c --------------------------- User Commands chapter ------------------------------- +@node User Commands +@chapter User Commands + +@cindex user commands +@cindex entering user commands +The entering of user-commands is initiated by the action routine +@emph{Command()} (normally bound to the @code{(":")} character) which +replaces the bottom statusline with an input area or opens a separate +command window. It is finished by either @emph{Return} or +@emph{Escape} to confirm or to abort. These two key-bindings +cannot be changed from the resource file. The triggering event, +normally a key press, is ignored. + +Commands can be entered in one of two styles, command entry syntax: +``@emph{Command arg1 arg2}'' or action script syntax ``@emph{Action1(arg1, +arg2); Action2(arg1, arg2);}''. Quoting arguments works similar to +bash quoting: + +@itemize +@item A backslash (\) is the escape character. It preserves the literal +value of the next character that follows. To get a literal '\' use +"\\". + +@item Enclosing characters in single quotes preserves the literal value of +each character within the quotes. A single quote may not occur +between single quotes, even when preceded by a blackslash. + +@item Enclosing characters in double quotes preserves the literal value of +all characters within the quotes, with the exception of '\' which +maintains its special meaning as an escape character. +@end itemize + +There are simple @emph{usage} dialogs for each command and one for the +complete set of commands. + +@table @samp + +@findex :l +@cindex loading layouts +@cindex layout, loading a +@item l [filename] +Loads a new datafile (layout) and, if confirmed, overwrites any existing unsaved data. +The filename and the searchpath (@emph{filePath}) are passed to the +command defined by @emph{fileCommand}. +If no filename is specified a file select box will popup. + +@findex :le +@cindex loading elements to buffer +@cindex element, loading to buffer +@item le [filename] +Loads an element description into the paste buffer. +The filename and the searchpath (@emph{elementPath}) are passed to the +command defined by @emph{elementCommand}. +If no filename is specified a file select box will popup. + +@findex :m +@cindex loading a layout to buffer +@cindex merging layouts +@cindex layout, loading to buffer +@cindex layout, merging a +@item m [filename] +Loads an layout file into the paste buffer. +The filename and the searchpath (@emph{filePath}) are passed to the +command defined by @emph{fileCommand}. +If no filename is specified a file select box will popup. + +@findex :q +@cindex exit +@cindex quit +@item q[!] +Quits the program without saving any data (after confirmation). +q! doesn't ask for confirmation, it just quits. + +@findex :s +@cindex saving layouts +@cindex layout files, saving of +@item s [filename] +Data and the filename are passed to the command defined by the resource +@emph{saveCommand}. It must read the layout data from @emph{stdin}. +If no filename is entered, either the last one is used +again or, if it is not available, a file select box will pop up. + +@findex :rn +@cindex rat's nest +@cindex layout-name +@item rn [filename] +Reads in a netlist file. If no filename is given +a file select box will pop up. +The file is read via the command defined by the +@emph{RatCommand} resource. The command must send its output to @emph{stdout}. + +Netlists are used for generating rat's nests (see @ref{Rats Nest}) and for +verifying the board layout (which is also accomplished by the @emph{Ratsnest} +command). + +@findex :w[q] +@cindex saving layouts +@cindex layout files, saving of +@item w[q] [filename] +These commands have been added for the convenience of @code{vi} users and +have the same functionality as @emph{s} combined with @emph{q}. + +@findex :actionCommand() +@cindex action command +@cindex Actions, initiating +@item actionCommand +Causes the actionCommand to be executed. This allows you to initiate actions +for which no bindings exist in the resource file. It can be used to initiate any +action with whatever arguments you enter. This makes it possible to do things +that otherwise would be extremely tedious. For example, to change the drilling +hole diameter of all vias in the layout to 32 mils, you could select everything using the +selection menu, then type "@emph{:ChangeDrillSize(SelectedVias, 32)}". (This will +only work provided the via's diameter is sufficiently large to accommodate a 32 mil hole). +Another example might be to set the grid to 1 mil by typing "@emph{:SetValue(Grid, 1)}". +Note that some actions use the current cursor location, so be sure to place the cursor +where you want before entering the command. This is one of my favorite new +features in 1.5 and can be a powerful tool. Study the @ref{Actions} section to +see what actions are available. + +@end table + + +@c --------------------------- chapter 4 ------------------------------- +@node Command-Line Options +@chapter Command-Line Options +@cindex starting @pcb{} +@cindex command-line options + +The synopsis of the pcb command is: + +@code{pcb [OPTION ...] [LAYOUT-FILE.pcb]} to start the application in GUI mode, + +@noindent or + +@code{pcb [-h | -V | --copyright]} for a list of options, version, and copyright, + +@noindent or + +@code{pcb -p [OPTION ...] [LAYOUT-FILE.pcb]} to print a layout, + +@noindent or + +@code{pcb -x HID [OPTION ...] [LAYOUT-FILE.pcb]} to export. + +@noindent Possible values for the parameter @samp{HID} are: + @table @samp + @item bom + Export a bill of materials + @item gcode + Export to G-Code + @item gerber + Export RS-274X (Gerber) + @item nelma + Numerical analysis package export + @item png + export GIF/JPEG/PNG + @item ps + export postscript + @item eps + export encapsulated postscript +@end table + +@noindent There are several resources which may be set or reset in addition to the +standard toolkit command-line options. For a complete list refer to +@ref{Resources}. + + +@include options.texi + + + +@c --------------------------- chapter 5 ------------------------------- +@node X11 Interface +@chapter X11 Interface +@cindex X11 + +This chapter gives an overview about the additional @code{X11} resources which +are defined by @pcb{} as well as the defined action routines. + +@menu +* Resources:: Non-standard @code{X11} application resources. +* Actions:: A list of available action routines. +* Translations:: A list of the default key translations (as shipped). +@end menu + + +@node Resources +@section Non-Standard X11 Application Resources +@cindex resources +@cindex X11 resources + +In addition to the toolkit resources, @pcb{} defines the +following resources: + +@table @samp + +@vindex absoluteGrid +@cindex grid +@item absoluteGrid (boolean) +Selects if either the grid is relative to the position where it has changed +last or absolute, the default, to the origin (0,0). + +@vindex alignmentDistance +@cindex alignment +@item alignmentDistance (dimension) +Specifies the distance between the boards outline to the alignment targets. + +@vindex allDirectionLines +@cindex lines, clipping to 45 degree +@cindex clipping lines to 45 degree +@item allDirectionLines (boolean) +Enables (default) or disables clipping of new lines to 45 degree angles. + +@vindex backgroundImage +@cindex background +@item backgroundImage (string) +If specified, this image will be drawn as the background for the +board. The purpose of this option is to allow you to use a scan of an +existing layout as a prototype for your new layout. To do this, there +are some limitations as to what this image must be. The image must be +a PPM binary image (magic number @samp{P6}). It must have a maximum +pixel value of 255 or less (i.e. no 16-bit images). It must represent +the entire board, as it will be scaled to fit the board dimensions +exactly. Note that it may be scaled unevenly if the image doesn't +have the same aspect ratio of your board. You must ensure that the +image does not use more colors than are available on your system +(mostly this is for pseudo-color displays, like old 8-bit displays). +For best results, I suggest the following procedure using The Gimp: +Load your image (any type). Image->Scale if needed. +Image->Colors->Curves and for each of Red, Green, and Blue channel +move the lower left point up to about the 3/4 line (value 192). This +will make your image pale so it doesn't interfere with the traces +you'll be adding. Image->Mode->Indexed and select, say, 32 colors +with Normal F-S dithering. File->Save As, file type by extension, +use @file{.ppm} as the extension. Select Raw formatting. + +@vindex backupInterval +@cindex backup +@item backupInterval (int) +@pcb{} has an automatic backup feature which saves the current data +every n seconds. The default is @emph{300} seconds. A value of zero disables +the feature. The backup file is named @file{/tmp/PCB.%i.backup} by +default (this may have been changed at compilation time via the +@code{BACKUP_NAME} +variable in @file{globalconfig.h}). +@emph{%i} is replaced by the process ID. +See also, the command-line option @emph{--backup-interval}. + +@vindex bloat +@cindex bloat +@cindex drc +@item Bloat (dimension) +Specifies the minimum spacing design rule in mils. + +@vindex connectedColor +@cindex colors +@cindex connections, colors +@item connectedColor (color) +All pins, vias, lines and rectangles which are selected during a connection +search are drawn with this color. The default value is determined by +@emph{XtDefaultForeground}. + +@vindex cross hairColor +@cindex colors +@cindex cursor color +@item cross hairColor (color) +This color is used to draw the cross hair cursor. The color is a result of +a @emph{XOR} operation with the contents of the Layout area. The result +also depends on the default colormap of the @code{X11} server because only +the colormap index is used in the boolean operation and @pcb{} doesn't +create its own colormap. The default setting is @emph{XtDefaultForeground}. + +@vindex elementColor +@vindex elementSelectedColor +@cindex colors +@cindex element, color +@item elementColor (color) +@itemx elementSelectedColor (color) +The elements package part is drawn in these colors, for normal and selected +mode, respectively, which both default to @emph{XtDefaultForeground}. + +@vindex elementCommand +@cindex element, command +@cindex element, files +@cindex loading elements +@cindex preprocessing element data +@cindex unix command +@cindex m4 +@item elementCommand (string) +@pcb{} uses a user defined command to read element files. This resources +is used to set the command which is executed by the users default shell. +Two escape sequences are defined to pass the selected filename (%f) and the +current search path (%p). The command must write the element data +to its standard output. The default value is +@example + M4PATH="%p";export M4PATH;echo 'include(%f)' | m4 +@end example +Using the GNU version of @code{m4} is highly recommended. +See also, the command-line option @emph{--element-command}. + +@vindex elementPath +@cindex searchpath for element files +@cindex path for element files +@cindex element, files +@cindex loading elements +@item elementPath (string) +A colon separated list of directories or commands (starts with '|'). +The path is passed to the program specified in @emph{elementCommand} together +with the selected element name. A specified command will be executed in order +to create entries for the fileselect box. It must write its results to +@emph{stdout} one entry per line. +See also, the user-command @emph{le[!]}. + +@vindex fileCommand +@cindex file load command +@cindex layout files +@cindex loading layouts +@cindex preprocessing layout data +@cindex unix command +@cindex cat +@item fileCommand (string) +The command is executed by the user's default shell whenever existing layout +files are loaded. Data is read from the command's standard output. +Two escape sequences may be specified to pass the selected filename (%f) +and the current search path (%p). The default value is: +@example + cat %f +@end example +See also, the command-line option @emph{--file-command}. + +@vindex filePath +@cindex searchpath for layout files +@cindex path for layout files +@cindex layout files +@cindex loading layouts +@item filePath (string) +A colon separated list of directories or commands (starts with '|'). +The path is passed to the program specified in @emph{fileCommand} together +with the selected filename. A specified command will be executed in order +to create entries for the fileselect box. It must write its results to +@emph{stdout} one entry per line. +See also, the user-command @emph{l[!]}. + +@vindex fontCommand +@cindex font command +@cindex font files +@cindex loading fonts +@cindex loading symbols +@cindex preprocessing font data +@cindex unix command +@cindex cat +@item fontCommand (string) +Loading new symbol sets also is handled by an external command. You again +may pass the selected filename and the current search path by passing +%f and %p in the command string. Data is read from the commands standard +output. This command defaults to +@example + cat %f +@end example +See also, the command-line option @emph{--font-command}. + +@vindex fontFile +@cindex default font +@cindex symbols +@item fontFile (string) +The default font for new layouts is read from this file which is searched +in the directories as defined by the resource @emph{fontPath}. +Searching is only performed if the filename does not contain a directory +component. +The default filename is @file{default_font}. + +@vindex fontPath +@cindex searchpath for font files +@cindex path for font files +@cindex font files +@cindex loading fonts +@cindex loading symbols +@item fontPath (string) +This resource, a colon separated list of directories, defines the searchpath +for font files. See also, the resource @emph{fontFile}. + +@vindex grid +@cindex grid +@cindex cursor steps +@item grid (int) +This resources defines the initial value of one cursor step. It defaults +to @emph{100 mil} and any changes are saved together with the layout data. + +@vindex gridColor +@cindex colors +@cindex grid color +@item gridColor (color) +This color is used to draw the grid. The color is a result of +a @emph{INVERT} operation with the contents of the Layout area. The result +also depends on the default colormap of the @code{X11} server because only +the colormap index is used in the boolean operation and @pcb{} doesn't +create its own colormap. The default setting is @emph{XtDefaultForeground}. + +@vindex invisibleObjectsColor +@cindex colors +@cindex element, color +@item invisibleObjectsColor (color) +Elements located on the opposite side of the board are drawn in this color. +The default is @emph{XtDefaultForeground}. + +@vindex layerColor +@vindex layerSelectedColor +@cindex colors +@cindex layers, colors +@item layerColor1..MAX_LAYER (color) +@itemx layerSelectedColor1..MAX_LAYER (color) +These resources define the drawing colors of the different layers in +normal and selected state. All values are preset to @emph{XtDefaultForeground}. + +@vindex layerGroups +@cindex layers, groups +@cindex groups +@item layerGroups (string) +The argument to this resource is a colon separated list of comma separated +layer numbers (1..MAX_LAYER). All layers within one group are switched on/off +together. The default setting is @emph{1:2:3:...:MAX_LAYER} which means +all layers are handled separately. Grouping layers one to three looks like +@emph{1,2,3:4:...:MAX_LAYER} + +@vindex layerName +@cindex layer, name of +@item layerName1..MAX_LAYER (string) +The default name of the layers in a new layout are determined by these +resources. The defaults are empty strings. + +@vindex libraryCommand +@cindex library command +@cindex loading elements +@cindex unix command +@item libraryCommand (string) +@pcb{} uses a command to read element data from libraries. +The resources is used to set the command which is executed by the users +default shell. Three escape sequences are defined to pass the selected +filename (%f), the current search path (%p) as well (%a) as the three +parameters @emph{template}, @emph{value} and @emph{package} to the command. +It must write the element data to its standard output. The default value is +@example + NONE/share/pcb/oldlib/QueryLibrary.sh %p %f %a +@end example + +@vindex elementContentsCommand +@cindex library contents command +@cindex listing library contents +@cindex unix command +@item libraryContentsCommand (string) +Similar to @emph{libraryCommand}, @pcb{} uses the command specified +by this resource to list the contents of a library. +@example + NONE/share/pcb/oldlib/ListLibraryContents.sh %p %f +@end example +is the default. + +@vindex libraryFilename +@cindex default library +@cindex library name +@item libraryFilename (string) +The resource specifies the name of the library. The default value is +@emph{pcblib} unless changed at compile time +with the @code{LIBRARYFILENAME} variable in @file{globalconfig.h}. + +@vindex libraryPath +@cindex searchpath for libraries +@cindex path for libraries +@cindex library searchpath +@item libraryPath (string) +A colon separated list of directories that will be passed to the commands +specified by @emph{elementCommand} and @emph{elementContentsCommand}. + +@vindex lineThickness +@cindex lines, size +@cindex size of lines +@cindex thickness of lines +@item lineThickness (dimension) +The value, in the range [1..250] (the range may be changed at compile +time with the @code{MIN_LINESIZE} and @code{MAX_LINESIZE} variables in +@file{globalconfig.h}), defines the +initial thickness of new lines. The value is preset to @emph{ten mil}. + +@vindex media +@cindex media +@cindex media margin +@cindex print media +@item media ( | x+-+-) +The default (user defined) media of the @code{PostScript} device. Predefined +values are @emph{a3}, @emph{a4}, @emph{a5}, @emph{letter}, @emph{tabloit}, +@emph{ledger}, @emph{legal}, and @emph{executive}. +The second way is to specify the medias width, height and margins in mil. +The resource defaults to @emph{a4} size unless changed at compile time +with the @code{DEFAULT_MEDIASIZE} variable in @file{globalconfig.h}. + +@vindex offLimitColor +@cindex colors +@cindex off limit color +@item offLimitColor (color) +The area outside the current maximum settings for width and height is drawn +with this color. The default value is determined by @emph{XtDefaultBackground}. + +@vindex pinColor +@vindex pinSelectedColor +@cindex colors +@cindex pin color +@item pinColor (color) +@itemx pinSelectedColor(color) +This resource defines the drawing color of pins and pads in both states. +The values are preset to @emph{XtDefaultForeground}. + +@vindex pinoutFont0..6 +@cindex font, used for pin names +@cindex pinout, font to display pin names +@item pinoutFont (string) +This fonts are used to display pin names. There is one font for each zoom +value. The values are preset to @emph{XtdefaultFont}. + +@vindex pinoutNameLength +@cindex namelength of pins +@cindex pin, name of +@cindex length of a pin name +@item pinoutNameLength (int) +This resource limits the number of characters which are displayed for +pin names in the pinout window. By default the string length is limited +to @emph{eight} characters per name. + +@vindex pinoutOffsetX +@vindex pinoutOffsetY +@cindex offset of pinout +@item pinoutOffsetX (int) +@itemx pinoutOffsetY (int) +These resources determine the offset in @emph{mil} of the circuit from the +upper left corner of the window when displaying pinout information. +Both default to @emph{100 mil}. + +@vindex pinoutTextOffsetX +@vindex pinoutTextOffsetY +@cindex offset of pinnames +@item pinoutTextOffsetX (int) +@itemx pinoutTextOffsetY (int) +The resources determine the distance in mil between the drilling hole of a pin +to the location where its name is displayed in the pinout window. +They default to @emph{X:50} and @emph{Y:0}. + +@vindex pinoutZoom +@cindex pinout, zoomfactor of display +@cindex zoom of pinout window +@item pinoutZoom (int) +Sets the zoom factor for the pinout window according to the formula: +scale = 1:(2 power value). Its default value is @emph{two} which results in +a @emph{1:4} scale. + +@vindex printCommand +@cindex printing +@item printCommand (string) +Default file for printouts. If the name starts with a '|' the output +is piped through the command. A %f is replaced by the current filename. +There is no default file or command. + +@vindex raiseLogWindow +@cindex log window +@cindex messages +@item raiseLogWindow (boolean) +The log window will be raised when new messages arrive if this resource +is set @emph{true}, the default. + +@vindex ratCommand +@cindex rats nest +@cindex netlist +@item ratCommand (string) +Default command for reading a netlist. A %f is replaced by the netlist +filename. Its default value is "@emph{cat %f}". + +@vindex ratPath +@cindex rats nest +@cindex netlist +@item ratPath (string) +Default path to look for netlist files. It's default value is "." + +@vindex resetAfterElement +@cindex connections, reseting after element +@cindex reseting found connections +@item resetAfterElement (boolean) +If set to @emph{true}, all found connections will be reset before a new +element is scanned. This will produce long lists when scanning the whole +layout for connections. The resource is set to @emph{false} by default. +The feature is only used while looking up connections of all elements. + +@vindex ringBellWhenFinished +@cindex keyboard bell +@item ringBellWhenFinished (boolean) +Whether to ring the bell (the default) when a possibly lengthy operation +has finished or not. +See also, the command-line option @emph{--ring-bell-finished}. + +@vindex routeStyle +@cindex routing style +@item routeStyle (string) +Default values for the menu of routing styles (seen in the sizes menu). +The string is a comma separated list of name, line thickness, +via diameter, and via drill size. +e.g. "Fat,50,100,40:Skinny,8,35,20:75Ohm,110,110,20" +See also, the command-line option @emph{--route-styles} and @emph{Sizes Menu} + +@vindex rubberBandMode +@cindex move +@cindex rubberband +@cindex rotate +@item rubberBandMode (boolean) +Whether rubberband move and rotate (attached lines stretch like +rubberbands) is enabled (the default). + +@vindex saveCommand +@cindex file save command +@cindex layout files +@cindex saving layouts +@cindex postprocessing layout data +@cindex unix command +@cindex cat +@item saveCommand (string) +This command is used to save data to a layout file. The filename may be +indicated by placing @code{%f} in the string. It must read the data from +its standard input. The default command is: +@example + cat - > %f +@end example +See also, the command-line option @emph{--save-command}. + +@vindex saveInTMP +@cindex backup +@cindex saving layouts +@cindex preventing loss of data +@cindex temporary files +@cindex /tmp +@cindex directory /tmp +@item saveInTMP (boolean) +Enabling this resource will save all data which would otherwise be lost +in a temporary file @file{/tmp/PCB.%i.save}. The file name may +be changed at compile time +with the @code{EMERGENCY_NAME} variable in @file{globalconfig.h}. +. +@emph{%i} is replaced by the process ID. +As an example, loading a new layout when the old one hasn't been saved would +use this resource. +See also, the command-line option @emph{--save-in-tmp}. + +@vindex saveLastCommand +@cindex saving last entered user command +@cindex inputfield, saving entered command-line +@item saveLastCommand (boolean) +Enables the saving of the last entered user command. The option is +@emph{disabled} by default. +See also, the command-line option @emph{--save-last-command}. + +@vindex shrink +@cindex shrink +@cindex drc +@item Shrink (dimension) +Specifies the minimum overlap (touching) design rule in mils. + +@vindex size +@cindex default layout size +@cindex layout, default size of +@item size (x) +Defines the width and height of a new layout. The default is +@emph{7000x5000} unless changed at compile time +with the @code{DEFAULT_SIZE} variable in @file{globalconfig.h}. + + +@vindex stipplePolygons +@cindex polygon +@cindex display +@item stipllePolygons (boolean) +Determines whether to display polygons on the screen with a stippled +pattern. Stippling can create some amount of transparency so that +you can still (to some extent) see layers beneath polygons. +It defaults to False. + +@vindex textScale +@cindex text, default scaling +@cindex default text scaling +@item textScale (dimension) +The font scaling in percent is defined by this resource. The default is +@emph{100} percent. + +@vindex useLogWindow +@cindex log window +@cindex messages +@item useLogWindow (boolean) +Several subroutines send messages to the user if an error occurs. +This resource determines if they appear inside the log window or as a separate +dialog box. See also, the resource @emph{raiseLogWindow} and the command line +option @emph{-loggeometry}. +The default value is @emph{true}. + +@vindex viaColor +@vindex viaSelectedColor +@cindex colors +@cindex vias, color +@item viaColor (color) +@item viaSelectedColor (color) +This resource defines the drawing color of vias in both states. +The values are preset to @emph{XtDefaultForeground}. + +@vindex viaThickness +@vindex viaDrillingHole +@cindex vias, size +@cindex size of vias +@cindex thickness of vias +@item viaThickness (dimension) +@itemx viaDrillingHole (dimension) +The initial thickness and drilling hole of new vias. The values must be in the +range [30..400] (the range may be changed at compile +time with the @code{MIN_PINORVIASIZE} and @code{MAX_PINEORVIASIZE} variables in +@file{globalconfig.h}), with at least 20 +mil of copper. +The default thickness is @emph{40 mil} and the default drilling hole is +@emph{20 mil}. + +@vindex volume +@cindex speaker volume +@cindex volume of speaker +@item volume (int) +The value is passed to @code{XBell()} which sets the volume of the @code{X} +speaker. +The value lies in the range -100..100 and it defaults to the maximum volume of +@emph{100}. + +@vindex warnColor +@cindex colors +@cindex color, warning +@item warnColor (color) +This resources defines the color to be used for drawing pins and pads when +a warning has been issued about them. + +@vindex zoom +@cindex zoom of Layout area +@item zoom (int) +The initial value for output scaling is set according to the following +formula: scale = 1:(2 power value). It defaults to @emph{three} which results +in an output scale of @emph{1:8}. + +@end table + +Refer also to @ref{Command-Line Options}. + +@node Actions +@section Actions +@cindex actions +@cindex translations +@cindex key translations +@cindex button translations +@cindex X11 translations + +All user accessible commands may be bound to almost any @code{X} event. Almost +no default binding for commands is done in the binaries, so it is vital for the +application that at least a system-wide application resource file exists. +This file normally resides in the @file{share/pcb} directory and +is called @file{Pcb}. The bindings to which the manual refers to are the +ones as defined by the shipped resource file. Besides binding an action to +an X11 event, you can also execute any action command using a ":" command +(see @ref{User Commands}). + +Take special care about translations related to the functions keys and the +pointer buttons because most of the window managers use them too. +Change the file according to your hardware/software environment. +You may have to replace all occurances of @emph{baseTranslations} to +@emph{translations} if you use a @code{X11R4} server. + +Passing @emph{Object} as an argument to an action routine causes the object +at the cursor location to be changed, removed or whatever. If more than +one object is located at the cross hair position the smallest type is used. +If there are two of the same type the newer one is taken. +@emph{SelectedObjects} will handle all selected and visible objects. + + +@table @samp +@findex AddRats() +@cindex rats nest +@cindex netlist +@cindex rat-line +@item AddRats(AllRats|SelectedRats) +Adds rat-lines to the layout using the loaded netlist file (see the @emph{:rn}, +@ref{User Commands}.). Rat lines are added on the active layer using the current +line thickness shown in the status line. +Only missing connectivity is added by the +AddRats command so if, for example, the layout is complete nothing will be added. +Rat lines may be drawn different to other lines on the screen +to make them easier to identify since they cannot appear in a completed layout. +The rat-lines are added in the minimum length straight-line tree pattern +(always ending on pins or pads) that satisfies the missing connectivity in the circuit. +If a SMD pad is unreachable on the active layer, a warning will be issued +about it and the rat-line to that pad will not be generated. +If connections exist on the board which are not listed in the netlist while +AllRats are being added, warning messages will be issued and the affected pins and +pads will be drawn in a special @emph{warnColor} until the next @emph{Notify()} event. +If the entire layout agrees completely with the net-list a message informs you that +the layout is complete and no rat-lines are added (since none are needed). +If @emph{SelectedRats} +is passed as the argument, only those missing connections that might connect among +the selected pins and pads are drawn. +Default: +@example +Nonew: AddRats(AllRats) +!Shiftw: AddRats(SelectedRats) +Noneo: DeleteRats(AllRats) AddRats(AllRats) +!Shifto: DeleteRats(SelectedRats) AddRats(SelectedRats) +@end example + +@findex ApplyVendor() +@cindex vendor map +@cindex vendor drill table +@item ApplyVendor() +Applies an already loaded vendor drill map to the design. +@example +ApplyVendor() +@end example + +@findex Atomic() +@cindex undo, multi-action resources +@cindex atomic +@item Atomic(Save|Restore|Block|Close) +Controls the undo grouping of sequences of actions. Before the first action +in a group, Atomic(Save) should be issued. After each action that might +be undoable, Atomic(Restore) should be issued. Atomic(Block) concludes +and save the undo grouping if there was anything in the group to undo. +Atomic(Close) concludes and save the undo grouping even if nothing was +actually done. Thus it might produce an "empty" undo. This can be useful +when you want to use undo in a group of actions. + +@findex Bell() +@cindex signal +@cindex bell +@item Bell([-100..100]) +Rings the bell of your display. If no value is passed the setting +of the resource @emph{volume} will be used. + +@findex ChangeClearSize() +@cindex change sizes +@cindex sizes, changing of objects +@cindex clearance, changing of objects +@item ChangeClearSize(Object, value[, unit]) +@itemx ChangeClearSize(SelectedPins|SelectedVias, value[, unit]) +The effect of this action depends on if the soldermask display is presently +turned on or off. If soldermask is displayed, then the soldermask +relief size will be changed. If soldermask display is turned off, +then the clearance to polygons will be changed. +@emph{unit} is "mil" or "mm". If not specified the units will default +to the internal unit of 0.01 mil. +@example +!Mod1k: ChangeClearSize(Object, +2, mil) +!Mod1 Shiftk: ChangeClearSize(Object, -2, mil) +@end example + +@findex ChangeDrillSize() +@cindex change sizes +@cindex sizes, changing of objects +@cindex drilling hole, changing of objects +@item ChangeDrillSize(Object, value[, unit]) +@itemx ChangeDrillSize(SelectedPins|SelectedVias, value[, unit]) +This action routine changes the drilling hole of pins and vias. +If @emph{value} starts with + or -, then it adds (or subtracts) +@emph{value} from the current hole diameter, otherwise it sets the +diameter to the value. +@emph{unit} is "mil" or "mm". If not specified the units will default +to the internal unit of 0.01 mil. +Default: +@example +!Mod1s: Change2ndSize(Object, +5, mil) +!Mod1 Shifts: Change2ndSize(Object, -5, mil) +@end example + +@findex ChangeFlag() +@cindex flags, changing +@cindex octagonal flag, changing +@cindex square flag, changing +@cindex thermal flag, changing +@item ChangeFlag(Object|SelectElements|SelectedPins|SelectedVias|Selected,thermal|octagon|square,0|1) +Sets/clears the indicated flag. This adds/removes thermals, adds/removes the flag +which indicates a pin/pad should be square, or adds/removes the flag which +indicates a pin/pad should be octagonal. +@example +:ChangeFlag(SelectedVias,thermal,1) +:ChangeFlag(SelectedPads,square,0) +@end example + +@findex ChangeHole() +@cindex vias, converting to mounting hole +@cindex mounting holes +@item ChangeHole(Object|SelectedVias) +This action routine converts a via to and from a hole. A hole is +a via that has no copper annulus. The drill size for the via +determines the hole diameter. +@example +!Ctrlh: ChangeHole(Object) +@end example + +@findex ChangeName() +@cindex name, change an objects +@cindex change object name +@cindex object, change name of +@item ChangeName(Object) +@itemx ChangeName(Layer|Layout) +Changes the name of the visible object at the cursor location. A text object +doesn't have a name therefore the text string itself is changed. +The element name currently used for display is always the one changed with this +command. +See @emph{Display(Description|NameOnPCB|Value)} for details. +Passing @emph{Layer} changes the current layers name. +Default: +@example +Nonen: ChangeName(Object) +@end example + +@findex ChangeOctagon() +@cindex pins, changing shape of +@cindex vias, changing shape of +@cindex octagonal pins and vias +@item ChangeOctagon(Object|SelectElements|SelectedPins|SelectedVias|Selected) +Toggles what shape the affected pin(s) or via(s) will be drawn when they +are not square. The shape will either be round or octagonal. +Default: +@example +!Ctrlo: ChangeOctagon(Object) +@end example + +@findex ChangePinName() +@cindex changing pin/pad names +@cindex pin/pad names, changing +@item ChangePinName(ElementName, PinNumber, PinName) +Changes the name for a specified pin or pad number on a specified element. +This action is typically used to forward annotate pin/pad names from a schematic +to the layout. +@example +ChangePinName(U1, 14, VDD) +@end example + + +@findex ChangeSize() +@cindex change sizes +@cindex sizes, changing of objects +@cindex thickness, changing of objects +@item ChangeSize(Object, value[, unit]) +@itemx ChangeSize(SelectedLines|SelectedPins|SelectedVias, value[, unit]) +@itemx ChangeSize(SelectedPads|SelectedTexts|SelectedNames, value[, unit]) +@itemx ChangeSize(SelectedElements, value[, unit]) +To change the size of an object you have to bind these action to some +@code{X} event (or use :ChangeSize(...)). If @emph{value} begins with +a + or - then the value will be added (or subtracted) from the current +size, otherwise the size is set equal to @emph{value}. Range checking is +done to insure that none of the maximum/minimums of any size are violated. +If @emph{Object} is passed then a single object at the cursor location is +changed. If any of the @emph{Selected} arguments are passed then all selected +and visible objects of that type are changed. If the type being modified is +an element, then the thickness of the silkscreen lines defining the element +is changed. +@emph{unit} is "mil" or "mm". If not specified the units will default +to the internal unit of 0.01 mil. +Default: +@example +Nones: ChangeSize(Object, +5) +!Shifts: ChangeSize(Object, -5) +@end example + +@findex ChangeSquare() +@cindex change square flag +@cindex square flag, changing of objects +@cindex thickness, changing of objects +@item ChangeSquare(Object|SelectedElements|SelectedPins) +Toggles the setting of the square flag. The flag is used to identify a +certain pin, normally the first one, of circuits. It is also used to +make SMD pads have square ends. +@example +Noneq: ChangeSquare(Object) +@end example + +@findex ClrFlag() +@cindex flags, clearing +@cindex flags, clearing +@cindex octagonal flag, clearing +@cindex square flag, clearing +@cindex thermal flag, clearing +@item ClrFlag(Object|SelectElements|SelectedPins|SelectedVias|Selected,thermal|octagon|square) +Clears the indicated flag. This removes thermals, removes the flag +which indicates a pin/pad should be square, or removes the flag which +indicates a pin/pad should be octagonal. +@example +:ClrFlag(SelectedVias,thermal) +@end example + +@findex Command() +@cindex start user input +@cindex inputfield, start user input +@item Command() +Calling @emph{Command()} pops up an input line at the bottom of the window +which allows you to enter commands. Including all action commands! +The dialog ends when @emph{NoneReturn} +to confirm or @emph{NoneEscape} to abort is entered. +Default: +@example +colon: Command() +@end example + +@findex Connection() +@cindex scanning connections +@cindex searching connections +@cindex connections, reseting +@cindex reseting found connections +@cindex connections, searching for +@cindex saving found connections +@item Connection(Find) +@itemx Connection(ResetFoundLinesAndRectangles|ResetPinsViasAndPads|Reset) +The @emph{Connection()} action is used to mark all connections from one pin, +line or via to others. +The @emph{ResetFoundLinesAndRectangles, ResetFoundPinsAndVias} and +@emph{Reset} arguments may be used to reset all marked lines and rectangles, +vias and pins or all of them. The search starts with the pin or via +at the cursor position. All found objects are drawn with the color +defined by the resource @emph{connectedColor}. +See also, @emph{Display(Description|NameOnPCB|Value)}. +Default: +@example +!Shiftc: Connection(Reset) +Nonef: Connection(Find) +!Shiftf: Connection(Reset) +@end example + +@findex DeleteRats() +@cindex rats nest +@cindex rat-line +@cindex netlist +@item DeleteRats(AllRats|SelectedRats) +This routine deletes either all rat-lines in the layout, or only +the selected and visible ones. Non-rat-lines and other layout +objects are unaffected. +Default: +@example +Nonee: DeleteRats(AllRats) +!Shifte: DeleteRats(SelectedRats) +@end example + +@findex DisableVendor() +@cindex vendor map, disabling +@cindex vendor drill table, disabling +@item DisableVendor() +Disables automatic drill size mapping to the loaded vendor drill table. +@example +DisableVendor() +@end example + +@findex DisperseElements() +@cindex dispersing elements +@cindex distributing elements +@cindex elements, dispersing +@cindex elements, distributing +@item DisperseElements(All|Selected) +Disperses either all elements or only the selected elements in the +layout. This action should be used at the +start of a design to spread out all footprints before any placement or +routing is done. +@example +DisperseElements(All) +@end example + + +@findex Display() +@cindex centering +@cindex redrawing layout +@cindex refreshing layout +@cindex name of an element +@cindex displaying element names +@cindex element, display names of +@cindex grid, absolute and relative +@cindex grid, display +@cindex rubberband +@cindex pinout, display of +@cindex displaying pinout +@cindex lines, clipping to 45 degree +@cindex clipping lines to 45 degree +@item Display(Description|NameOnPCB|Value) +@itemx Display(Toggle45Degree|CycleClip) +@itemx Display(Grid|ToggleGrid) +@itemx Display(ToggleRubberBandMode) +@itemx Display(Center|ClearAndRedraw|Redraw) +@itemx Display(Pinout|PinOrPadName) +This action routines handles some output related settings. It is +used to center the display around the cursor location and to redraw the +output area optionally after clearing the window. +Centering is done with respect to the @emph{grid} setting. Displaying the +grid itself may be switched on and off by @emph{Grid} but only if +the distance between two pixels exceeds 4 pixels. +@pcb{} is able to handle several labels of an element. One of them +is a description of the functionality (eg resistor), the second should be +a unique identifier (R1) whereas the last one is a value (100k). +The @emph{Display()} action selects which of the names is displayed. +It also controls which name will be affected by the @emph{ChangeName} command. +If @emph{ToggleGrid} is passed, @pcb{} changes between relative +('rel' in the statusline) and absolute grid (an 'abs' in the statusline). +Relative grid means the pointer position when the command is issued is +used as the grid origin; while (0,0) is used in the absolute grid case. +Passing @emph{Pinout} displays the pinout of the element at the current +cursor location whereas @emph{PinOrPadName} toggles displaying of the +pins or pads name under the cursor. If none of them matches but the cursor +is inside of an element, the flags is toggled for all of its pins and pads. +For details about rubberbands see also the details about @emph{Mode}. +Default: +@example +Nonec: Display(Center) +Noned: Display(PinOrPadName) +!Shiftd: Display(Pinout) +Noner: Display(ClearAndRedraw) +None.: Display(Toggle45Degree) +None/: Display(CycleClip) +@end example + +@findex DRC() +@cindex design rule checking +@cindex drc +@item DRC() +Initiates design rule checking of the entire layout. Must be repeated +until no errors are found. + +@findex ExecuteFile() +@cindex actions file, executing +@cindex script file, executing +@item ExecuteFile(filename) +Executes the PCB actions contained in the specified file. +This can be used to automate a complex sequence of operations. +@example +:ExecuteFile(custom.cmd) +@end example +The command file contains a list of PCB actions. Blank lines +are ignored and lines starting with a # are treated as comment +lines. For example +@example +# This is a comment line +Display(Grid) +SetValue(Zoom,2) +DRC() +@end example + +@findex EditLayerGroups() +@cindex layers, editing of groups +@cindex groups, editing of +@item EditLayerGroups() +Pops up a dialog box to edit the layergroup setting. The function is also +available from the @emph{Objects} menu. +There are no defaults. + +@findex EnableVendor() +@cindex vendor map, enabling +@cindex vendor drill table, enabling +@item EnableVendor() +Enables automatic drill size mapping to the loaded vendor drill table. +@example +EnableVendor() +@end example + + +@findex Load() +@cindex loading files +@item Load(ElementToBuffer|Layout|LayoutToBuffer|Nelist) +This routine pops up a fileselect box to load layout, element data, +or netlist. +The passed filename for layout data is saved and may be reused. +@emph{ElementToBuffer} and @emph{LayoutToBuffer} load the data into the +current buffer. +There are no defaults. + +@findex LoadVendor() +@cindex vendor map, loading +@cindex vendor drill table, loading +@item LoadVendor(vendorfile) +Loads the specified vendor resource file. +@example +LoadVendor(myvendor.res) +@end example + +@findex MarkCrosshair() +@cindex mark +@cindex cursor position +@item MarkCrosshair() +This routine marks the current cursor location with an X, and then +the cursor display shows both absolute position and position relative to +the mark. If a mark is already present, this routine removes it and +stops displaying relative cursor coordinates. +Defaults: +@example +!Ctrlm: MarkCrosshair() +@end example + +@findex Mode() +@cindex mode, selecting of +@cindex operation modes, selecting of +@item Mode(Copy|InsertPoint|Line|Move|None|PasteBuffer|Polygon|Thermal) +@itemx Mode(Remove|Rectangle|RubberbandMove|Text|Via) +@itemx Mode(Cycle) +@itemx Mode(Notify) +@itemx Mode(Save|Restore) +Switches to a new mode of operation. The active mode is displayed by a thick +line around the matching mode selector button. +Most of the functionality of @pcb{} is implemented by selecting a mode +and calling @emph{Mode(Notify)}. The arguments @emph{Line}, @emph{Polygon}, +@emph{Rectangle}, @emph{Text} and @emph{Via} are used to create the +appropriate object whenever @emph{Mode(Notify)} is called. Some of them, +such as @emph{Polygon}, need more than one call for one object to be created. +@emph{InsertPoint} adds points to existing polygons or lines. +@emph{Save} and @emph{Restore} are used to temporarily save the mode, switch +to another one, call @emph{Mode(Notify)} and restore the saved one. Have +a look at the application resource file for examples. +@emph{Copy} and @emph{Move} modes are used to change an object's location and, +optionally, to create a new one. The first call of @emph{Mode(Notify)} attaches +the object at the pointer location to the cross hair whereas the second +one drops it to the layout. The @emph{rubberband} version of move performs the +move while overriding the current rubberband mode. +Passing @emph{PasteBuffer} attaches the contents of the currently selected +buffer to the cross hair. Each call to @emph{Mode(Notify)} pastes this contents +to the layout. @emph{Mode(Cycle)} cycles through the modes available in the +mode-button pallet. +@emph{Mode(None)} switches all modes off. +Default: +@example +Escape: Mode(None) +space: Mode(Cycle) +NoneBackSpace: Mode(Save) Mode(Remove) Mode(Notify) Mode(Restore) +NoneDelete: Mode(Save) Mode(Remove) Mode(Notify) Mode(Restore) +NoneF1: Mode(Via) +NoneF2: Mode(Line) +NoneF3: Mode(PasteBuffer) +NoneF4: Mode(Rectangle) +NoneF5: Mode(Text) +NoneF6: Mode(Polygon) +NoneF7: Mode(Thermal) +NoneF8: Mode(Arc) +NoneInsert: Mode(InsertPoint) +None[: Mode(Save) Mode(Move) Mode(Notify) +None]: Mode(Notify) Mode(Restore) +None: Mode(Notify) +!Shift Ctrl: Mode(Save) Mode(Remove) Mode(Notify) Mode(Restore) +None: Mode(Save) Mode(Move) Mode(Notify) +None: Mode(Notify) Mode(Restore) +!Mod1: Mode(Save) Mode(Copy) Mode(Notify) +!Mod1: Mode(Notify) Mode(Restore) +Shift BTNMOD: Mode(Save) Mode(RubberbandMove) Mode(Notify) +@end example + +@findex MovePointer() +@cindex pointer, moving of +@cindex cursor movements +@item MovePointer(delta_x, delta_y) +With this function it is possible to move the cross hair cursor by using the +cursor keys. The @code{X} server's pointer follows because the necessary +events are generated by @pcb{}. All movements are performed with respect +to the currently set grid value. +Default: +@example +NoneUp: MovePointer(0, -1) +!ShiftUp: MovePointer(0, -10) +NoneDown: MovePointer(0, 1) +!ShiftDown: MovePointer(0, 10) +NoneRight: MovePointer(1, 0) +!ShiftRight: MovePointer(10, 0) +NoneLeft: MovePointer(-1, 0) +!ShiftLeft: MovePointer(-10, 0) +@end example + +@findex MoveToCurrentLayer() +@cindex objects, moving to current layer +@cindex moving objects to current layer +@item MoveToCurrentLayer(Object|SelectedObjects) +The function moves a single object at the cross hair location or all selected +objects to the current layer. Elements are not movable by this function. +They have to be deleted and replaced on the other side. +If a line segment is moved and the movement would result in a loss of +connectivity to another segment then via(s) are automatically added to +maintain the connectivity. +@example +Nonem: MoveToCurrentLayer(Object) +!Shiftm: MoveToCurrentLayer(SelectedObjects) +@end example + +@findex New() +@cindex layout, start a new +@cindex starting a new layout +@item New() +Clear the current layout and starts a new one after entering its name. +Refer to the resource @emph{backup} for more information. +No defaults. + +@findex PasteBuffer() +@cindex buffer, selecting a +@cindex pastebuffer, selecting a +@cindex selecting a buffer +@cindex rotating a buffer +@cindex cutting objects +@cindex copying objects +@item PasteBuffer(AddSelected|Clear|1..5) +@itemx PasteBuffer(Rotate, 1..3) +@itemx PasteBuffer(Convert) +This action routine controls and selects the pastebuffer as well as all +cut-and-paste operations. Passing a buffer number selects one in of the +range 1..5. The statusline is updated with the new number. +@emph{Rotate} performs a number of 90 degree counter clockwise rotations +of the buffer contents. @emph{AddSelected} as first argument copies all +selected and visible objects into the buffer. Passing @emph{Clear} removes +all objects from the currently selected buffer. @emph{Convert} causes +the contents of the buffer (lines, arc, vias) to be converted into an +element definition. Refer to @ref{Pastebuffer} +for examples. +Default: +@example +!Ctrlx: PasteBuffer(Clear) PasteBuffer(AddSelected) + Mode(PasteBuffer) +!Shift Ctrlx: PasteBuffer(Clear) PasteBuffer(AddSelected) + RemoveSelected() Mode(PasteBuffer) +!Mod1c: PasteBuffer(Clear) PasteBuffer(AddSelected) +!Mod1x: PasteBuffer(Clear) PasteBuffer(AddSelected) + RemoveSelected() +!Shift1: PasteBuffer(1) +!Shift2: PasteBuffer(2) +!Shift3: PasteBuffer(3) +!Shift4: PasteBuffer(4) +!Shift5: PasteBuffer(5) +NoneF3: Mode(PasteBuffer) +@end example + +@findex Polygon() +@cindex polygon, closing a +@cindex polygon point, go back to previous +@cindex closing a polygon +@item Polygon((Close|PreviousPoint) +Polygons need a special action routine to make life easier. Calling +@emph{Polygon(PreviousPoint)} resets the newly entered corner to the +previous one. The Undo action will call Polygon(PreviousPoint) +when appropriate to do so. @emph{Close} creates the final +segment of the polygon. This may fail if clipping to 45 degree +lines is switched on, in which case a warning is issued. +Default: +@example +Nonep: Polygon(Close) +!Shiftp: Polygon(Close) +@end example + +@findex Print() +@cindex layout, printing a +@cindex printing a layout +@item Print() +Pops up a print control box that lets you select the output +device, scaling and many more options. Each run creates all +files that are supported by the selected device. These are +mask files as well as drilling files, silk screens and so on. The table +shows the filenames for all possible files: +@example + POSIX (extension) 8.3 filename + --------------------------------------------- + *_componentmask.* cmsk.* + *_componentsilk.* cslk.* + *_soldermask.* smsk.* + *_soldersilk.* sslk.* + *_drill.* dril.* + *_groundplane.* gpl.* + *_group[1..8].* [..8].* +@end example +The output may be sent to a post-processor by starting the filename with the +@emph{pipe} @code{("|")} character. Any @code{"%f"} in a command is replaced +with the current filename. The function is available from the @emph{file} menu. +There are no defaults. + +@findex Quit() +@cindex quit +@cindex exit +@item Quit() +Quits the application after confirming the operation. +Default: +@example +WM_PROTOCOLS: Quit() +@end example + +@findex Redo() +@cindex redo +@cindex recover +@item Redo() +This routine allows you to recover from the last undo command. +You might want to do this if you thought that undo was going to +revert something other than what it actually did (in case you +are confused about which operations are un-doable), or if you +have been backing up through a long undo list and over-shoot +your stopping point. Any change that is made since the undo +in question will trim the redo list. For example if you add +ten lines, then undo three of them you could use redo to put +them back, but if you move a line on the board before performing +the redo, you will lose the ability to "redo" the three "undone" lines. +Default: +@example +!Shiftr: Redo() +@end example + +@findex RemoveSelected() +@cindex removing selected objects +@cindex selected object, removing an +@item RemoveSelected() +This routine removes all visible and selected objects. +There are no defaults. + +@findex Report() +@cindex report +@cindex information about objects +@cindex drill +@item Report(Object|DrillReport) +This routine pops up a dialog box describing the various +characteristics of an object (or piece of an object such as a pad or pin) +in the layout at the cursor position, or a report about all of the +drill holes in the layout. +There are no defaults. + +@findex RouteStyle() +@cindex routing style +@cindex size of lines and vias +@item RouteStyle(1|2|3|4) +This routine copies the sizes corresponding to the numbered route style +into the active line thickens, via diameter, and via drill size. +Defaults: +@example +!Ctrl1: RouteStyle(1) +... +!CtrlNUM_STYLES: RouteStyle(NUM_STYLES) +@end example +The variable @code{NUM_STYLES} is set at compile time in +@file{globalconfig.h}. + +@findex Save() +@cindex saving files +@cindex saving connections +@item Save(Layout|LayoutAs) +@itemx Save(AllConnections|AllUnusedPins|ElementConnections) +Passing @emph{Layout} saves the layout using the file from which it was +loaded or, if it is a new layout, calls @emph{Save(LayoutAs)} which queries +the user for a filename. +The values: @emph{AllConnections}, @emph{AllUnusedPins} and +@emph{ElementConnections} start a connection scan and save all connections, +all unused pins or the connections of a single element to a file. +There are no defaults. + +@findex Select() +@cindex selection +@cindex selecting objects +@item Select(All|Block|Connection|ToggleObject) +@itemx Select(ElementByName|ObjectByName|PadByName|PinByName) +@itemx Select(TextByName|ViaByName) +Toggles either the selection flag of the object at the cross hair position +(@emph{ToggleObject}) or selects all visible objects, all inside a +rectangle or all objects which have been found during the last connection +scan. The @emph{ByName} functions use a @ref{Regular Expressions} search, +always case insensitive, to select the objects. +Default: +@example +None: Select(ToggleObject) +None,None: See resource file - this is complex +@end example + +@findex SetFlag() +@cindex flags, setting +@cindex octagonal flag, setting +@cindex square flag, setting +@cindex thermal flag, setting +@item SetFlag(Object|SelectElements|SelectedPins|SelectedVias|Selected,thermal|octagon|square) +Sets the indicated flag. This adds thermals, sets the flag +which indicates a pin/pad should be square, or sets the flag which +indicates a pin/pad should be octagonal. +@example +:SetFlag(Selected,thermal) +@end example + +@findex SetValue() +@cindex change settings +@cindex zoom, setting of +@cindex grid, setting of +@cindex drilling hole, setting of initial size +@cindex vias, setting of initial size +@cindex lines, setting of initial size +@item SetValue(Grid|LineSize|TextScale|ViaDrillingHole|ViaSize|Zoom, value) +Some internal values may be changed online by this function. +The first parameter specifies which data has to be changed. The other one +determines if the resource is set to the passed value, if @emph{value} is +specified without sign, or increments/decrements if it is specified with +a plus or minus sign. +The function doesn't change any existing object only the initial values of +new objects. Use the @emph{ChangeSize()} and @emph{ChangeDrillSize()} +to change existing objects. +Default: +@example +Noneg: SetValue(Grid, +5) +!Shiftg: SetValue(Grid, -5) +Nonel: SetValue(LineSize, +5) +!Shiftl: SetValue(LineSize, -5) +Nonet: SetValue(TextScale, +10) +!Shiftt: SetValue(TextScale, -10) +Nonev: SetValue(ViaSize, +5) +!Shiftv: SetValue(ViaSize, -5) +!Mod1v: SetValue(ViaDrillingHole, +5) +!Mod1 Shiftv: SetValue(ViaDrillingHole, -5) +Nonez: SetValue(Zoom, -1) +!Shiftz: SetValue(Zoom, +1) +@end example + +@findex SwapSides() +@cindex change viewing side +@cindex viewing side, changing of +@item SwapSides() +This routine changes the board side you are viewing. +Default: +@example +NoneTab: SwapSides() +@end example + +@findex SwitchDrawingLayer() +@cindex change drawing layer +@cindex layer, change active +@item SwitchDrawingLayer(value) +Makes layer number 1..MAX_LAYER the current one. +Default: +@example +None1: SwitchDrawingLayer(1) +... +NoneMAX_LAYER: SwitchDrawingLayer(MAX_LAYER) +@end example + +@findex ToggleHideName() +@cindex hide element name +@cindex element name, hiding +@cindex element name, removing from silk-screen +@item ToggleHideName(Object|SelectedElements) +Toggles whether the element's name is displayed or hidden. If it +is hidden you won't see it on the screen and it will not appear +on the silk layer when you print the layout. +@example +Noneh: ToggleHideName(Object) +!Shifth: ToggleHideName(SelectedElements) +@end example + +@findex ToggleVendor() +@cindex vendor map, toggling +@cindex vendor drill table, toggling +@item ToggleVendor() +Toggles automatic drill size mapping to the loaded vendor drill table. +@example +ToggleVendor() +@end example + +@findex ToggleVisibility() +@cindex toggle layer visibility +@cindex layer visibility, toggling +@item ToggleVisibility(Layer) +Toggles the visibility of the layer. +@example +Mod11: ToggleVisibility(1) +Mod12: ToggleVisibility(2) +Mod13: ToggleVisibility(3) +Mod14: ToggleVisibility(4) +@end example + +@findex Undo() +@cindex undo +@cindex recover +@item Undo() +@itemx Undo(ClearList) +The unlimited undo feature of @pcb{} allows you to recover +from most operations that materially affect you work. +Calling @emph{Undo()} without any parameter recovers +from the last (non-undo) operation. @emph{ClearList} is used to release the +allocated memory. @emph{ClearList} is called whenever a new layout is started +or loaded. See also @emph{Redo}. +Default: +@example +Noneu: Undo() +!Shift Ctrlu: Undo(ClearList) +@end example + +@findex UnloadVendor() +@cindex vendor map, unloading +@cindex vendor drill table, unloading +@item UnloadVendor() +Unloads the loaded vendor drill table. +@example +UnloadVendor() +@end example + +@findex Unselect() +@cindex selection +@cindex unselect objects +@item Unselect(All|Block|Connection) +Unselects all visible objects, all inside a rectangle or all objects which +have been found during the last connection scan. +Default: +@example +!Shift : Mode(Save) Mode(None) Unselect(Block) +!Shift : Unselect(Block) Mode(Restore) +@end example + +@end table + + +@node Translations +@section Default Translations +@cindex translations +@cindex default translations +@cindex X11 default translations + +This section covers some default translations of key and button events as +defined in the shipped default application resource file. Most of them have +already been listed in @ref{Actions}. @pcb{} makes use of a nice @code{X11} +feature; calling several action routines for one event. + +@table @samp + +@cindex removing objects +@cindex removing connections +@cindex object, removing an +@cindex connection, removing an +@item NoneBackSpace: +@item NoneDelete: +@itemx !ShiftBackSpace: +@itemx !Shift Ctrl: +The object at the cursor location is removed by @emph{NoneBackSpace} or +@emph{Shift Ctrl} whereas @emph{ShiftBackSpace} also removes +all other objects that are fully-connected to the one at the cursor location. + +@cindex scrolling +@item !Mod1 CtrlLeft: +@itemx !Mod1 CtrlRight: +@itemx !Mod1 CtrlUp: +@itemx !Mod1 CtrlDown: +Scroll one page in one of the four directions. + +@cindex scrolling +@item NoneLeft:, !ShiftLeft: +@itemx NoneRight:, !ShiftRight: +@itemx NoneUp:, !ShiftUp: +@itemx NoneDown:, !ShiftDown: +Move cross hair either one or ten points in grid. + +@cindex user input +@item NoneReturn: +Finished user input, selects the 'default' button of dialogs. + +@cindex user input +@item NoneEscape: +@emph{Mode(Reset)}, aborts user input, selects the 'abort' button of +dialogs or resets all modes. + +@cindex element, move name of +@cindex object, move an +@cindex object, copy an +@cindex move an object +@cindex copy an object +@item None, Btn2, None: +@itemx !Mod1, Btn2, !Mod1: +The first sequence moves the object or element name at the cursor location. +The second one copies the objects. Copying isn't available for +element names. + +@end table + + +@c --------------------------- chapter 6 ------------------------------- +@node File Formats +@chapter File Formats +@cindex file formats +@cindex ASCII files, format of + +All files used by @pcb{} are read from the standard output of a command +or written to the standard input of one as plain seven bit @code{ASCII}. This +makes it possible to use any editor to change the contents of a layout file. +It is the only way for element or font description files to be created. +To do so you'll need to study the example files @file{example/*} and +@file{default_font} which are shipped with @pcb{}. +For an overview refer to @ref{Intro}. + +@vindex elementCommand +@vindex fileCommand +@vindex fontCommand +@vindex libraryCommand +@vindex libraryContentsCommand +@vindex saveCommand +The following sections provide the necessary information about the syntax of +the files. +Netlist files are not created by @pcb{}, but it does use them. For information +on the format of a netlist file see the @emph{:rn}, +@ref{User Commands}. +The commands described allow you to add almost any additional +functionality you may need. Examples are compressed read and write access as +well as archives. The commands themselves are defined by the resources +@emph{elementCommand}, @emph{fileCommand}, @emph{fontCommand}, +@emph{libraryCommand}, @emph{libraryContentsCommand} and @emph{saveCommand}. +Note that the commands are not saved along with the data. +It is considered an advantage to have the layout file contain all necessary +information, independent of any other files. + +One thing common to all files is they may include comments, newlines, +and carriage returns at any place except within quoted strings. + +@menu +* Pad and Line Representation:: +* Layout File:: +* Element File:: +* Font File:: +* Netlist File:: +* Library Contents File:: +* Library File:: +* File Syntax:: +* Object Flags:: +* PCBFlags:: +@end menu + + + +@node Pad and Line Representation +@section Pad and Line Representation +@cindex pad specification +@cindex file formats, pads and lines + +Pads and lines (copper traces, silk screen lines, etc) are represented by the +line end points and the aperture used to draw the line. It is important to +understand this when creating the pads for a new footprint. The following figure +illustrates a pad or line which is drawn using a square aperture. The end +points (X0,Y0), (X1,Y1) specify the center of the aperture. The size parameter +specifies the size of the aperture. + +@center @image{pad,,,Pad Layout,png} + +Pads and lines are represented in this way because this is how lines are +specified in RS-274X (Gerber) files which are used for creating +the masks used in board manufacturing. In fact, older mask making +equipment created lines in precisely this fashion. A physical aperture was +used to pass light through onto a photosensitive film. + +@node Layout File +@section Layout File Format +@cindex layout files, format of +@cindex format of layout files +@cindex file format, layout data + +The layout file describes a complete layout including symbols, vias, +elements and layers with lines, rectangles and text. This is the most +complex file of all. As @pcb{} has evolved, the file format has +changed several times to accommodate new features. @pcb{} has +always been able to read all older versions of the @code{.pcb} file. +This allows the migration of older designs to newer versions of the +program. Obviously older versions of @pcb{} will not be able +to properly read layout files stored in newer versions of the file +format. + +In practice it is very common for footprint libraries to contain +elements which have been defined in various versions of the @pcb{} +file format. When faced with trying to understand an element file or +layout file which includes syntax not defined here, the best approach +is to examine the file @file{src/parse_y.y} which is the definitive +definition of the file format. + +The PCB layout file contains the following contents, in this order (individual items +are defined in @ref{File Syntax}: + +@table @code + +@item PCB +This names the board and sets its size + +@item Grid +Optional. + +@item Cursor +Optional. + +@item Flags +Optional. + +@item Groups +Optional. + +@item Styles +Optional. + +@item Symbols +Optional. + +@item Vias, Rats, Layers, and Elements +These may occur in any order, at this point in the file. + +@item Netlists +Optional. + +@end table + +@node Element File +@section Element File Format +@cindex element, file format +@cindex format of element files +@cindex file format, element data + +Element files are used to describe one component which then may be used +several times within one or more layouts. You will normally split the +file into two parts, one for the pinout and one for the package description. +Using @code{m4} allows you to define pin names as macros in one file and +include a package description file which evaluates the macros. See +the resource @emph{elementCommand} for more information. The pins (and pads) +must appear in sequential order in the element file (new in 1.5) so that +pin 1 must be the first PIN(...) in the file. + +Doing things this way makes it possible to use one package file for several +different circuits. See the sample files @file{dil*}. + +The lowest x and y coordinates of all sub-objects of an element are +used as an attachment point for the cross hair cursor of the main +window, unless the element has a mark, in which case that's the +attachment point. + + + +@node Font File +@section Font File Format +@cindex font file, format of +@cindex format of font files +@cindex file format, font data + +A number of user defined Symbols are called a font. There is only one per +layout. All symbols are made of lines. See the file @file{default_font} +as an example. + +The lowest x and y coordinates of all lines of a font are transformed to (0,0). + +@node Netlist File +@section Netlist File Format +@cindex netlist, file format +@cindex netlist, reading + +Netlists read by @pcb{} must have this simple text form: + +@example +netname [style] NAME-PINNUM NAME2-PINNUM2 NAME3-PINNUM3 ... [\] +@end example + +@noindent +for each net on the layout. +where "netname" is the name of the net which must be unique for each +net, [style] is an optional route-style name, +NAME is the layout-name name given to an element, +and PINNUM is the (usually numeric) +pin number of the element that connects to the net +(for details on pin numbering see @ref{Element Objects}). +Spaces or tabs separate the fields. +If the line ends with a "\" the +net continues on the next line and the "\" is treated exactly as if it +were a space. If a NAME ends with a lower-case letter, +all lower-case letters are stripped from the end of the NAME to determine the +matching layout-name name. For example: + +@example + Data U1-3 U2abc-4 FLOP1a-7 Uabc3-A9 +@end example + +specifies that the net called "Data" should have +pin 3 of U1 connected to pin 4 of U2, to pin 7 of +FLOP1 and to pin A9 of Uabc3. Note that element name and +pin number strings are case-sensitive. +It is up to you to name the elements so that their layout-name names +agrees with the netlist. + +@node Library Contents File +@section Library Contents File Format +@cindex library contents file, format of +@cindex format of library contents +@cindex file format, library contents + +There is nothing like a special library format. The ones that have been +introduced in 1.4.1 just use some nice (and time consuming) features of GNU +@code{m4}. The only predefined format is the one of the contents file +which is read during startup. It is made up of two basic line types: + +@example +menu entry = "TYPE="name +contents line = template":"package":"value":"description +name = String +template = String +package = String +value = String +description = String +String = +@end example + +No leading white spaces or comments are allowed in this file. If you need +either one, define a command that removes them before loading. Have a look +to the @emph{libraryContentsCommand} resource. + +The menu entry will appear in the selection menu at the top and of the +library window. + +@node Library File +@section Library File Format +@cindex library file, format of +@cindex format of libraries +@cindex file format, libraries + +This section provides an overview about the existing @code{m4} definitions +of the elements. There are basically two different types of files. One +to define element specific data like the pinout, package and so on, the +other to define the values. For example the static RAM circuits 43256 and +62256 are very similar. They therefore share a common definition in the +macro file but are defined with two different value labels. + +The macro file entry: +@example +define(`Description_43256_dil', `SRAM 32Kx8') +define(`Param1_43256_dil', 28) +define(`Param2_43256_dil', 600) +define(`PinList_43256_dil', ``pin1', `pin2', ...') +@end example + +And the list file: +@example +43256_dil:N:43256:62256 +@end example + +The macro must define a description, the pin list and up to two additional +parameters that are passed to the package definitions. The first one is +the number of pins whereas the second one defines for example the width +of a package. + +It is very important to select a unique identifier for each macro. In +the example this would be @emph{43256_dil} which is also the templates name. +It is required by some low-level macros that +@emph{Description_, Param1_, Param2_} and @emph{PinList_} are perpended. + +The list file uses a syntax: +@example +template:package:value[:more values] +@end example + +This means that the shown example will create two element entries with the +same package and pinout but with different names. + +A number of packages are defined in @file{common.m4}. Included are: + +@example +DIL packages with suffix D, DW, J, JD, JG, N, NT, P +PLCC +TO3 +generic connectors +DIN 41.612 connectors +zick-zack (SD suffix) +15 pin multiwatt +@end example + +If you are going to start your own library please take care about @code{m4} +functions. Be aware of quoting and so on and, most important check your +additional entry by calling the macro: + +@example +CreateObject(`template', `value', `package suffix') +@end example + +If quoting is incorrect an endless loop may occur (broken by a out-of-memory +message). + +The scripts in the @file{lib} directory handle the creation of libraries +as well as of their contents files. Querying is also supported. + +I know quite well that this description of the library implementation is +not what some out there expect. But in my opinion it's much more useful to +look at the comments and follow the macros step by step. + +@node File Syntax +@section File Syntax +@cindex File sytax +@cindex Syntax, file + +@include pcbfile.texi + +@c --------------------------- chapter 7 ------------------------------- +@node Library Creation +@chapter Library Creation +@cindex library creation + +This chapter provides a detailed look at how footprint libraries are +created and used. The chapter is split into two section, the first +section covers the "old" style libraries which use the @code{m4} macro +processor and the second section covers the "new" style libraries. + +Despite the names "old" and "new", both styles of libraries are useful +and the "old" style should not be discounted because of its name. The +advantage of the old style libraries is that one can define a family of +footprints, say a DIP package, and then quickly produce all the members +of that family. Because the individual packages make use of a base +definition, corrections made to the base definition propagate to all the +members of a family. The primary drawback to using this library +approach is that the effort to create a single footprint is more than a +graphical interface and may take even longer if the user has not used +the @code{m4} macro language previously. + +The new style of footprint libraries stores each footprint in its own +file. The footprints are created graphically by placing pads and then +converting a group of pads to a component. This library method has the +advantage of being quick to learn and it is easily to build single +footprints quickly. If you are building a family of parts, however, the +additional effort in creating each one individually makes this approach +undesirable. In addition, creating a part with a large pin count +can be quite tedious when done by hand. + + +@section Old Style (m4) Libraries +The old style libraries for pcb use the @code{m4} macro processor to +allow the definition of a family of parts. There are several files +associated with the old style library. The file @file{common.m4} is the +top level file associated with the library. @file{common.m4} defines a +few utility macros which are used by other portions of the library, +and then includes a predefined set of library files (the lines like +@code{include(geda.inc)}). + +@subsection Overview of Oldlib Operation +The big picture view of the old style library system is that the library +is simply a collection of macro definitions. The macros are written in +the @code{m4} macro language. An example of a macro and what it expands +to is the following. One of the predefined footprints in the library +which comes with PCB is the @code{PKG_SO8} macro. Note that all the +footprint macros begin with @code{PKG_}. For this particular example, +@code{PKG_SO8} is a macro for an 8-pin small outline surface mount +package. All of the footprint macros take 3 arguments. The first is the +canonical name of the footprint on the board. In this case "SO8" is an +appropriate name. The second argument is the reference designator on +the board such as "U1" or "U23". The third and final argument is the +value. For an integrated circuit this is usually the part number such +as "MAX4107" or "78L05" and for a component such as a resistor or +capacitor it is the resistance or capacitance. The complete call to the +macro in our example is @samp{PKG_SO8(SO8, U1, MAX4107)}. When +processed by @code{m4} using the macros defined in the PCB library, this +macro expands to +@example +Element(0x00 "SO8" "U1" "MAX4107" 146 50 3 100 0x00) +( + Pad(10 25 38 25 20 "1" 0x00) + Pad(10 75 38 75 20 "2" 0x100) + Pad(10 125 38 125 20 "3" 0x100) + Pad(10 175 38 175 20 "4" 0x100) + Pad(214 175 242 175 20 "5" 0x100) + Pad(214 125 242 125 20 "6" 0x100) + Pad(214 75 242 75 20 "7" 0x100) + Pad(214 25 242 25 20 "8" 0x100) + ElementLine(0 0 151 0 10) + ElementArc(126 0 25 25 0 180 10) + ElementLine(101 0 252 0 10) + ElementLine(252 0 252 200 10) + ElementLine(252 200 0 200 10) + ElementLine(0 200 0 0 10) + Mark(29 25) +) +@end example +which is the actual definition of the footprint that the PCB program +works with. As a user of PCB the only time you will need or want to run +@code{m4} directly is when you are debugging a new library addition. In +normal operation, the calls to @code{m4} are made by helper scripts that +come with PCB. + +Tools such as @code{gsch2pcb} (used to interface the gEDA schematic +capture program to PCB layout) will call @code{m4} to produce an initial +PCB layout that includes all the components on a schematic. In +addition, when manually instantiating parts from within PCB, @code{m4} +will be called by PCB's helper scripts to produce the footprints. + +@subsection The Library Scripts +There are several scripts that are used for processing the m4 +libraries. This section briefly describes these scripts and details how +they are used by PCB. + +@subsubsection Scripts Used During Compilation +The scripts described in this section are used during compilation of +PCB. They are run automatically by the build system, but are described +here to help document the complete library processing that occurs. +During the build of PCB, the following actions are taken. The +@code{CreateLibrary.sh} script is run to produce an M4 "frozen file". +This frozen file is simply a partially processed M4 input file which can +be loaded by M4 more quickly than the original input file. + +A typical call to @code{CreateLibrary.sh} used during the compilation of +PCB is: +@example +./CreateLibrary.sh -I . pcblib ./common.m4 TTL_74xx_DIL.m4 +connector.m4 crystal.m4 generic.m4 genericsmt.m4 gtag.m4 +jerry.m4 linear.m4 logic.m4 lsi.m4 memory.m4 optical.m4 pci.m4 +resistor_0.25W.m4 resistor_adjust.m4 resistor_array.m4 +texas_inst_amplifier.m4 texas_inst_voltage_reg.m4 +transistor.m4 geda.m4 +@end example +The @samp{-I .} says to search in the current directory for the +@file{.m4} files. The output frozen file is @file{pcblib}. The main +@file{common.m4} file is listed as well as all of the @file{*.m4} files +which define the components in the library. + +In addition, a library contents file is created during the build with +the @code{CreateLibraryContents.sh} script. +A typical call to @code{CreateLibrary.sh} used during the compilation of +PCB is: +@example +./CreateLibraryContents.sh -I . ./common.m4 TTL_74xx_DIL.list +connector.list crystal.list generic.list genericsmt.list gtag.list +jerry.list linear.list logic.list lsi.list memory.list optical.list +pci.list resistor_0.25W.list resistor_adjust.list resistor_array.list +texas_inst_amplifier.list texas_inst_voltage_reg.list transistor.list +geda.list > pcblib.contents +@end example + +The @file{pcblib.contents} file is used by the PCB program to define the +libraries and components which will be displayed when you bring up +the library window from within PCB. An example of part of the +@file{pcblib.contents} file is: +@example +TYPE=~TTL 74xx DIL +7400_dil:N:7400:4 dual-NAND +7401_dil:N:7401:4 dual-NAND OC +7402_dil:N:7402:4 dual-NOR +TYPE=~geda +geda_DIP6:DIP6:DIP6:Dual in-line package, narrow (300 mil) +geda_DIP8:DIP8:DIP8:Dual in-line package, narrow (300 mil) +geda_DIP14:DIP14:DIP14:Dual in-line package, narrow (300 mil) +geda_ACY300:ACY300:ACY300:Axial non-polar component, +@end example +The @code{TYPE=} lines define the library name that will show up in the +library window in PCB. The other lines define the actual components in +the library. + +@subsubsection Scripts Used by PCB at Runtime +When PCB is first executed, it makes a call to the +@code{ListLibraryContents.sh} script. This script provides the PCB +program with the contents of the library contents file created when PCB +was compiled. A typical call to @code{ListLibraryContents.sh} is +@example +../lib/ListLibraryContents.sh .:/tmp/pcb-20030903/src/../lib pcblib +@end example +This command says to search the path +@samp{.:/tmp/pcb-20030903/src/../lib} for a file called +@file{pcblib.contents} (the @file{.contents} part is added +automatically) and display the contents of the file. +PCB parses this output and generates the library window entries. + +When you pick a library component from the library window, PCB calls the +@code{QueryLibrary.sh} script to actually pull the footprint into the +layout. For example, when the ACY300 component is selected from the +@code{~geda} library, the generated call may be: + +@example +/tmp/pcb-20030903/src/../lib/QueryLibrary.sh +.:/tmp/pcb-20030903/src/../lib pcblib geda_ACY300 ACY300 +ACY300 +@end example +If you were to run this command by hand you would see the PCB code for +the element: +@example +Element(0x00 "Axial non-polar component," "" "ACY300" 245 70 0 100 0x00) +( + Pin(0 25 50 20 "1" 0x101) + Pin(300 25 50 20 "2" 0x01) + + ElementLine(0 25 75 25 10) + ElementLine(225 25 300 25 10) + + ElementLine(75 0 225 0 10) + ElementLine(225 0 225 50 10) + ElementLine(225 50 75 50 10) + ElementLine(75 50 75 0 10) + +# ElementArc(X1 Y 50 50 270 180 10) +# ElementArc(X2 Y 50 50 90 180 10) + + Mark(75 25) +) +@end example + +@subsection Creating an Oldlib Footprint +This section provides a complete example of defining a family of +footprints using the M4 style library. As a vehicle for this example, a +family of footprints for surface mount resistors and capacitors will be +developed. The file @file{example.inc} should have been installed on +your system as @file{$prefix/share/examples/oldlib/example.inc} where +@file{$prefix} is often times @file{/usr/local}. + +The @file{example.inc} file defines a macro called +@code{COMMON_PKG_RCSMT} which is a generic definition for a surface +mount footprint with two identical, rectangular pads. This macro will +be called with different parameters to fill out the family of parts. +The arguments to the @code{COMMON_PKG_RCSMT} are: +@example +# ------------------------------------------------------------------- +# the definition for surface mount resistors and capacitors +# $1: canonical name +# $2: name on PCB +# $3: value +# $4: pad width (in direction perpendicular to part) +# $5: pad length (in direction parallel with part) +# $6: pad spacing (center to center) +# $7: distance from edge of pad to silk (in direction +# perpendicular to part) +# $8: distance from edge of pad to silk (in direction parallel +# with part) +# $9: Set to "no" to skip silk screen on the sides of the part +@end example + +@example +define(`COMMON_PKG_RCSMT', + `define(`XMIN', `eval( -1*`$6'/2 - `$5'/2 - `$8')') + define(`XMAX', `eval( `$6'/2 + `$5'/2 + `$8')') + define(`YMIN', `eval(-1*`$4'/2 - `$7')') + define(`YMAX', `eval( `$4'/2 + `$7')') +Element(0x00 "$1" "$2" "$3" eval(XMIN+20) eval(YMAX+20) 0 100 0x00) +( + ifelse(0, eval($4>$5), + # Pads which have the perpendicular pad dimension less + # than or equal to the parallel pad dimension + Pad(eval(-1*( $6 + $5 - $4)/2) 0 + eval((-1*$6 + $5 - $4)/2) 0 eval($4) "1" 0x100) + Pad(eval(-1*(-1*$6 + $5 - $4)/2) 0 + eval(( $6 + $5 - $4)/2) 0 eval($4) "2" 0x100) + , + # Pads which have the perpendicular pad dimension greater + # than or equal to the parallel pad dimension + Pad(eval(-1*$6/2) eval(-1*($4 - $5)/2) + eval(-1*$6/2) eval(($4 - $5)/2) eval($5) "1" 0x100) + Pad(eval( $6/2) eval(-1*($4 - $5)/2) + eval( $6/2) eval(($4 - $5)/2) eval($5) "2" 0x100) + ) + + # silk screen + # ends + ElementLine(XMIN YMIN XMIN YMAX 10) + ElementLine(XMAX YMAX XMAX YMIN 10) + # sides +ifelse($9,"no", + #skip side silk + , + ElementLine(XMIN YMIN XMAX YMIN 10) + ElementLine(XMAX YMAX XMIN YMAX 10) +) + Mark(0 0) +)') +@end example +Note that the part has been defined with the mark located at +@code{(0,0)} and that the pads have been placed with the mark at the +common centroid of the footprint. While not a requirement, this is +highly desirable when developing a library that will need to interface +with a pick and place machine used for factory assembly of a board. + +The final part of @file{example.inc} defines particular versions of the +generic footprint we have created. These particular versions correspond +to various industry standard package sizes. +@example +# 0402 package +# +# 30x30 mil pad, 15 mil metal-metal spacing=> +# 15 + 15 + 15 = 45 center-to-center +define(`PKG_RC0402', + `COMMON_PKG_RCSMT(`$1', `$2', `$3', 30, 30, 45, 0, 10, "no")') + +# 0603 package +# +# 40x40 mil pad, 30 mil metal-metal spacing=> +# 30 + 20 + 20 = 70 center-to-center +define(`PKG_RC0603', + `COMMON_PKG_RCSMT(`$1', `$2', `$3', 40, 40, 70, 10, 10)') + +# 1206 package +# +# 40x60 mil pad, 90 mil metal-metal spacing=> +# 90 + 20 + 20 = 130 center-to-center +define(`PKG_RC1206', + `COMMON_PKG_RCSMT(`$1', `$2', `$3', 60, 40, 130, 10, 10)') +@end example + +At this point, the @file{example.inc} file could be used by third party +tools such as @code{gsch2pcb}. However to fully integrate our +footprints into PCB we need to create the @file{example.m4} and +@file{example.list} files. The @file{example.m4} file defines +descriptions for the new footprints. +@example +define(`Description_my_RC0402', + ``Standard SMT resistor/capacitor (0402)'') +define(`Description_my_RC0603', + ``Standard SMT resistor/capacitor (0603)'') +define(`Description_my_RC1206', + ``Standard SMT resistor/capacitor (1206)'') +@end example +Finally we need to create the @file{example.list} file. +@example +my_RC0402:RC0402:RES0402 +my_RC0402:RC0402:CAP0402 +my_RC0603:RC0603:RES0603 +my_RC0603:RC0603:CAP0603 +my_RC1206:RC1206:RES1206 +my_RC1206:RC1206:CAP1206 +@end example +The first field in the list file has the name corresponding to the +Description definitions in @file{example.m4}. The second field is the +template name which corresponds to the macros @code{PKG_*} we defined in +@file{example.inc} with the leading @code{PKG_} removed. It is the +second field which controls what footprint will actually appear on the +board. The final +field is the name of the part type on the board. The first line in our +@file{example.list} file will produce a menu entry in the library window +that reads: +@example +CAP0402, Standard SMT resistor/capacitor (0402) +@end example +The @code{CAP0402} portion comes directly from the third field in +@code{example.list} and the longer description comes from descriptions +macros in @code{example.m4}. Please note that any extra white space +at the end of a line in the @file{.list} files will cause them to +not work properly. + +@subsection Troubleshooting Old Style Libraries + +A powerful technique to help debug problems with libraries is to invoke +the @code{m4} processor directly. This approach will provide error +output which is not visible from within PCB. The following example +shows how one might try to debug an 8 pin small outline (SO8) package. The +macro name for the package is PKG_SO8. In this example, the +canonical name that is to be associated with the part is SO8, the +reference designator is U1, and the value is MAX4107 (the part number). + +@example +echo "PKG_SO8(SO8, U1, MAX4107)" | \ + gm4 common.m4 - | \ + awk '/^[ \t]*$/ @{next@} @{print@}' | \ + more +@end example +The @code{awk} call simply removes blank lines which make the output +hard to read. + +For this particular example, the output is: +@example +Element(0x00 "SO8" "U1" "MAX4107" 146 50 3 100 0x00) +( + Pad(10 25 38 25 20 "1" 0x00) + Pad(10 75 38 75 20 "2" 0x100) + Pad(10 125 38 125 20 "3" 0x100) + Pad(10 175 38 175 20 "4" 0x100) + Pad(214 175 242 175 20 "5" 0x100) + Pad(214 125 242 125 20 "6" 0x100) + Pad(214 75 242 75 20 "7" 0x100) + Pad(214 25 242 25 20 "8" 0x100) + ElementLine(0 0 151 0 10) + ElementArc(126 0 25 25 0 180 10) + ElementLine(101 0 252 0 10) + ElementLine(252 0 252 200 10) + ElementLine(252 200 0 200 10) + ElementLine(0 200 0 0 10) + Mark(29 25) +) +@end example + +@section New Style Libraries +Footprints for the new style library are created graphically using the +PCB program. A single footprint is saved in each file. + +@subsection Creating Newlib Footprints +To create +@enumerate +@item Start PCB with an empty layout. +@item Make the component layer active. +@item For a leaded part, select the via tool and place vias where the +pads for the part should go. For surface mount pads, draw line +segments. Note that until the footprint is completed, the surface +mount pads will remain rounded. Currently a rectangle or polygon +may not be used as a pad. +@item For each via and line segment which will become a pad, select it +and press 'n' to be able to enter a name. Enter +the pin number and press enter. +@item Make the silk layer active. +@item Using the line and arc tools, draw a silk screen outline for the +part. +@item Using the selection tool, select all of the pins and silk screen +for the part. +@item Place the pointer above the reference point for the part. This is +typically the common centroid. Keeping the pointer there, shift-right-click +to bring up the popup menu and choose "convert +selection to element". +@item At this point, the vias, line segments, and silk screen will have +been converted to an element. To change any of the line segments to +have square ends rather than round ends, select the pads by holding +down the shift key and clicking each pad with the center mouse button. +Now under the Select menu, "Change square-flag of selected objects" +section, choose "Pins". +@item Select the element, shift-right-click to bring up the popup menu, and +choose "Copy Selection to Buffer". Now left-click on the center of +the new element. +@item Under the buffer menu, choose "save buffer elements to file" to +save the new footprint to a file. +@item Press ESC to exit from buffer mode. +@end enumerate + +@subsection Modifying Newlib Footprints +@enumerate +@item In the @pcb{} program, instantiate the footprint you wish to modify. +@item Using the selection tool, select the footprint. +@item Now left-click on the selected element, this brings up a popup menu, choose +"Cut Selection to Buffer" from the popup menu. +@item Under the buffer menu, choose "break buffer element to pieces", +and then left-click to place the broken apart footprint to an open area of +the layout. Note that you must use the items under the buffer menu, the +items with the same names in the popup menu do not work. +@item Make your desired modifications to the footprint and then convert +the pieces back to an element using the same procedure as when starting +from scratch on a new footprint. +@end enumerate + + +@c --------------------------- chapter 8 ------------------------------- +@node Schematic Frontends +@chapter Schematic Capture for PCB +@cindex schematic capture +@cindex schematic frontend + +When designing a circuit board of any complexity, a schematic capture +front-end for the design is highly desired. Any schematic capture +program which is able to generate a netlist in a user defined format as +well as a bill of materials can be made to work with PCB. Currently, we +are aware of two freely available schematic capture programs which can +interface with PCB. This chapter shows how a design can be taken from +start to finish using either of these two tools for schematic capture +and PCB for layout. + +@menu +* gEDA:: Interfacing with GNU EDA (gEDA). +* xcircuit:: Interfacing with xcircuit. +@end menu + +@node gEDA +@section gEDA +@cindex gschem, how to interface with +@cindex gEDA, how to interface with + +This section shows how to use gEDA as the schematic capture front-end for +a PCB design. This section is not intended to be complete documentation +on gEDA and it is assumed that the user has at least some familiarity +with the gEDA suite of programs. + +The basic steps in a gEDA + PCB design flow are: +@enumerate +@item Set up project directories +@item Set up gEDA (gschem/gnetlist) config files +@item Set up gsch2pcb config files +@item Capture schematics using @code{gschem} (part of gEDA) +@item Create any unique PCB footprints needed for the design +@item Generate initial PCB design using @code{gsch2pcb} (part of gEDA) +@item Layout circuit board using @code{pcb} +@item Make any additional schematic changes with @code{gschem} and +forward annotate to PCB with @code{gsch2pcb} +@item Generate photoplot files (RS-274X, also known as "Gerber") for +board vendor +@end enumerate + +@subsection Set Up Project Directories +Although not required, a typical project directory will contain the +schematics and board layout at the top level. +Schematic symbols and circuit board footprints which are unique to this +project are stored in subdirectories. For this example, @file{sym} +contains the project specific schematic symbols and @file{pkg} contains +the project specific footprints. Set up the project subdirectory and +subdirectories by executing: +@example +mkdir ~/myproj +cd ~/myproj +mkdir sym +mkdir pkg +mkdir pkg/newlib +mkdir pkg/m4 +@end example + +@subsection Set Up gEDA Config Files +The gEDA tools, specifically @code{gschem} and @code{gnetlist}, use +configuration files to set the search path for symbol libraries in +addition to other user preferences. Create a file in the top level +project directory called @file{gschemrc}. Add the following lines to +that file: +@example + +;; list libraries here. Order matters as it sets the +;; search order +(component-library "./sym") + +@end example +This sets the local search path for the schematic capture program +@code{gschem}. Now the netlister, @code{gnetlist}, must also be +configured. This can be done by copying the file @file{gschemrc} to +@file{gnetlistrc} by running @samp{cp gschemrc gnetlistrc}. +Alternatively, you can create a soft link so only a single file needs to +be updated if additional symbol paths are added. The link is created by +running @samp{ln -s gschemrc gnetlistrc}. + +@subsection Set Up @code{gsch2pcb} Config Files +The program @code{gsch2pcb}, not to be confused with the older +@code{gschem2pcb} script, is used to link the schematic to layout. +@code{gsch2pcb} is responsible for creating the netlist used to provide +connectivity information to PCB as well creating an initial layout with +all components instantiated in the design. Forward annotation of +schematic changes to the layout is also done using @code{gsch2pcb}. +@code{gsch2pcb} uses a project file to set up the schematic file names, +PCB library locations, and output file names. Create a project file +called @file{project} using the following as an example: +@example + +# List all the schematics to be netlisted +# and laid out on the pc board. +schematics first.sch second.sch third.sch + +# For an output-name of foo, gsch2pcb generates files +# foo.net, foo.pcb, and foo.new.pcb. If there is no +# output-name specified, the file names are derived from +# the first listed schematic, i.e. first.net, etc. +output-name preamp + +@end example + + +@subsection Capture Schematics Using @code{gschem} +This section is fairly brief and assumes familiarity with using the +@code{gschem} schematic capture program. As you are creating your +schematics, be sure to observe the following rules: +@itemize +@item Make sure that each component in the schematic has a +@code{footprint} attribute that corresponds to a footprint in the PCB +library or a footprint you plan on creating. +@item Make sure all reference designators are unique. One way to ensure +this is to run the @code{refdes_renum} script (part of gEDA) after the +schematics are created. +@end itemize + +@subsection Create Any Unique PCB Footprints +Create the new footprints you design needs using either the m4 style or +newlib style of PCB libraries. Refer to @ref{Library Creation} for details on this +process. For m4 style footprints, store them in the @file{pkg/m4} +subdirectory and for newlib footprints, store them in the +@file{pkg/newlib} subdirectory. + +@subsection Generate Initial PCB Design Using @code{gsch2pcb} +The @code{gsch2pcb} program connects the schematic and layout. It basic +operation is to call @code{gnetlist} to generate the connectivity +netlist that PCB used to verify connectivity and to instantiate all +elements found in the schematic to a new layout. +The default, as of @code{gsch2pcb} version 0.9, is to use any found m4 +style parts first and then search for newlib style if no old style part +was found. By using the @code{--use-files} or @code{-f} flag to @code{gsch2pcb} +priority is given to newlib style parts even if m4 style are found. You +may wish to verify this in the @code{gsch2pcb} documentation in case +this changes in the future. +To start your layout, +run @samp{gsch2pcb project} where @file{project} is the project file +created previously. This will create a new netlist file, +@file{preamp.net}, and a new layout file, @file{preamp.pcb}. + + +@subsection Layout Circuit Board +Run PCB on the new layout by running @samp{pcb preamp.pcb}. +Load the netlist file by selecting "load netlist file" from the "file" +menu. In the file selection dialog box, choose @file{preamp.net}. This +loads connectivity information into PCB. + +Using the selection tool, grab and move apart the various footprints +with the middle mouse button. Once the parts are moved apart from each +other, choose "optimize rats-nest" from the "Connects" menu. This menu +choice will display and optimize the rats nest. Use the rats nest to +help guide placement of the parts. You may wish to re-run the "optimize +rats-nest" command after moving parts around. + +After the placement is complete, use the line tool to add traces to the +board. As traces are added, the corresponding rats line will disappear. + +@subsection Forward Annotation of Schematic Changes +If schematic changes are made after the layout has started, +@code{gsch2pcb} can be used to forward annotate these changes to the +layout. To forward annotate schematic changes, run @samp{gsch2pcb +project}. This command will create the files @file{preamp.new.pcb}, +@file{preamp.net}, and modify the file @file{preamp.pcb}. The +modifications to @file{preamp.pcb} include forward annotation of +schematic component value changes, adds any new components, and removes +any deleted components. + +@subsection Generate Photoplot Files (RS-274X) +After the layout is complete, choose "edit layer-groupings" from the +"Settings" menu. The LayerGroups form lets you specify which layers +will appear in each output layer group. For example, in the default +form, layer group 1 has "front" and "front side" in it. The +output file @file{1.gbr} if DOS file names are used, or +@file{somename_front.gbr} if long file names are used will contain the +"front" and "front side" layers in it. Usually the defaults are +sufficient, but this form is still a useful reference. + +Choose "print layout..." from the "File" menu. In the print dialog box, +select "Gerber/RS-274X" for the device +driver. Select the "outline", "alignment", and "drillhelper" options. +To get DOS compatible file names, select the "DOS (8.3) names" option, +otherwise enter "preamp" for the filename. Press "OK". + +The following output files should have been created in the project directory. +The names in parentheses correspond to the DOS compatible output file names. +@table @file +@item preamp_frontsilk.gbr (csilk.gbr) +Top side silk screen. +@item preamp_frontmask.gbr (cmask.gbr) +Top side soldermask relief. +@item preamp_front.gbr (1.gbr) +Top copper. +@item preamp_backmask.gbr (smask.gbr) +Bottom side soldermask relief. +@item preamp_back.gbr (2.gbr) +Bottom Copper. +@item preamp_fab.gbr (fab.gbr) +Fabrication drawing. Also known as the drill drawing. This drawing is +used for reference by the board vendor but is not directly used in the +fabrication process. +@item preamp_plated-drill.cnc (pdrill.cnc) +NC Drill format file for the plated through holes. +@item preamp_unplated-drill.cnc (udrill.cnc) +NC Drill format file for the unplated through holes. +@item preamp_bom.txt (bom.txt) +A bill of materials for the layout. +@item preamp_xy.txt (xy.txt) +Centroid (X-Y) data for driving automated assembly equipment. +@end table + +@comment to include an image: +@comment @image{geda1, 6in, 4in, geda schematic, png} + +@node xcircuit +@section xcircuit +@cindex xcircuit, how to interface with +@cindex xcircuit, how to interface with + +If anyone cares to contribute this section, it will get added. Please +submit changes to the bug tracking system for PCB which can be found from +the PCB homepage at @url{http://pcb.gpleda.org}. + +@c --------------------------- Appendix A ------------------------------- + +@node Installation +@appendix Installation and Troubleshooting + +Compiling and installing the package should be straightforward. If any problems +occur, please contact the author @email{Thomas.Nau@@rz.uni-ulm.de}, or the +current maintainer @email{haceaton@@aplcomm.jhuapl.edu} to find +a solution and include it into the next release. + +@menu +* compiling:: Compiling and installing. +* problems:: Troubleshooting. +@end menu + + +@node compiling +@section Compiling and Installing +@cindex install, how to +@cindex compile, how to + +This section covers the steps which are necessary to compile the package. + +@menu +* quickstart:: Quick start. +* running configure:: Customizing Pcb with Configure +@end menu + +@node quickstart +@subsection Quick Start +@cindex GNU build system + +Starting with version 2.0, @pcb{} has switched to a GNU +autoconf/automake build system. Installation of @pcb{} consists of +three steps: configuration, building, and installing. +In a typical installation, these steps are as simple as +@example +./configure +make +make install +@end example + +@node running configure +@subsection Running the configure Script +@cindex GNU configure script +@cindex configure + +The @code{configure} script accepts all of the standard GNU configure +options. For a complete list of configuration options, run +@code{./configure --help}. + + +@table @samp +@vindex INFOLIBDIR +@item INFOLIBDIR +must be set to the directory where your GNU info files are located. + +@vindex PCBLIBDIR +@item PCBLIBDIR +is the path of a directory where the font files will be installed. + +@vindex DEFAULTFONT +@item DEFAULTFONT +the name of the default font file. + +@vindex DEFAULTLIBRARY +@item DEFAULTLIBRARY +the name of the default library. + +@vindex GNUM4 +@item GNUM4 +the name of GNUs m4 version. + +@vindex BTNMOD +@item BTNMOD +If your window manager has already bound @emph{Mod1} together with some +function keys you may want to change this setting. This is true for HP-VUE. + + +@end table + +If you find things which must be changed to compile on your system, +please add the appropriate autoconf tests (if you are familiar with +that) and mail a copy to the maintainer, harry eaton, at +@email{haceaton@@aplcomm.jhuapl.edu}. + + +If you do not have the appropriate permissions you should run +@file{./pcbtest.sh} in the @file{src} directory to run @pcb{} from +the installation directory. + + +@node problems +@section Troubleshooting +@cindex problems +@cindex troubleshooting + +There are some known problems. Most of them are related to +missing parts of a standard @code{X11} distribution. Some others are caused by +third party applications such as @code{X} servers. To make this list more +complete please mail your problems and, if available, solutions to the author. +The mail address may be found at the beginning of this chapter. +In any case, read @ref{X11}. + +By the way, you @code{MUST HAVE AN ANSI COMPILER} to make @pcb{} work. + + +Another source of problems are older versions of @code{flex} and @code{bison}. +@pcb{} definitely works with @code{flex-2.4.7} and @code{bison-1.22} or +later. The problems will result in a @emph{syntax error} while parsing files. +This should only be a problem if you have modified the @code{flex} or +@code{bison} input files. + +The following list gives you just an idea because I'm not able to test +all @pcb{} releases on all platforms. + +@menu +* HP:: Hewlett-Packard series 700 and 800 running HP-UX 10.* +* Sun:: Sun, Solaris 2.5 +* SGI:: SGI, IRIX 5.3 and 6.* +* DEC Alpha:: DEC Alpha, DEC UNIX 3.2c and 4.0 +* SCO:: SCO Unix ODT 3.0, PC hardware +* Linux:: Linux 0.99pl14 and later +* BSD:: FreeBSD, NetBSD ... +* X11:: Refers to @code{X11R4}, @code{X11R5}, and @code{OpenWindows} +* TeX and Manuals:: Problems creating the @file{pcb.dvi} +@end menu + +@node HP +@subsection HP Series 700 and 800 +@cindex architecture +@cindex HP +@cindex Hewlett Packard + +You have to install several @code{X11} include files +or, better, install a complete @code{X11R5} release. Hewlett-Packard doesn't +support the Athena Widgets. So the header files and libraries are missing +from the application media, but they are available as a patch. +They also do not ship the @code{ANSI} compiler with the normal operating +system release so you have to buy one or use @code{GCC}. +Some of the tools are available as patches. + +In addition, @pcb{} has been successfully tested on these platforms with +@code{HPUX 9.*, 10.*} running self-compiled @code{X11R5}. + + +@node Sun +@subsection Sun SPARC architecture +@cindex architecture +@cindex Sun +@cindex Solaris +@cindex OpenWindows + +There are no known problems with Sun machines if they use @code{X11R5} instead +of @code{OpenWindows}. @pcb{} compiled successfully with all kinds of +SPARCstations @code{Solaris-2.[345]}. + +For problems with @code{OpenWindows} refer to @ref{X11}. + +@node SGI +@subsection Silicon Graphics +@cindex architecture +@cindex Silicon Graphics +@cindex SGI + +@pcb{} has been tested on some boxes running either @code{IRIX-4.0.5} or +@code{IRIX-5.3}. The former one uses a @code{X11R4} server. +There are no problems. +For known problems +with @code{X11R4}, see @ref{X11}. + + +@node DEC Alpha +@subsection DEC Alpha +@cindex architecture +@cindex DEC +@cindex Alpha + +@pcb{} compiled and runs without problems on @code{DEC UNIX V3.2c}. + + +@node SCO +@subsection SCO Unix +@cindex architecture +@cindex SCO +@cindex PC UNIX + +John DuBois wrote: +@example +@code{SCO-ODT-3.0} requires the latest version of tls003, the Athena +widget library (available from sosco.sco.com). The main problems +I have encountered are it core dumps fairly often, especially +while loading/dropping elements... +@end example +I'll see what I am able to do as soon as I have access to an @code{SCO} system. + + +@node Linux +@subsection Linux +@cindex architecture +@cindex Linux +@cindex PC UNIX + +Since the @code{X11} version of @pcb{} has been developed on a Linux +system here are no known problems. + + +@node BSD +@subsection FreeBSD and NetBSD +@cindex FreeBSD +@cindex NetBSD +@cindex PC UNIX + +@pcb{} has been tested on NetBSD and works without any problems. +You may also be able to find a NetBSD package at +@url{ftp://ftp.netbsd.org/pub/NetBSD/packages/cad/pcb/README.html} or a +FreeBSD port at +@url{http://www.freebsd.org/cgi/url.cgi?ports/cad/pcb/pkg-descr}. + +@node X11 +@subsection Problems related to X11 +@cindex X11, problems + +There are a some problems related to @code{X11R4} or systems derived from +@code{X11} such as @code{OpenWindows}. @xref{Sun}. You at least have to change +all occurances of @emph{baseTranslations} in the resource files to +@emph{translations} if you are using a @code{X11R4} server. Look at the +@code{X11R5} @emph{Intrinsics} manual for details. + +The panner widget (print dialog box) appears only in release @code{X11R5} and +later. It really simplifies adjusting the offsets. +With earlier releases the printout will always appear in the center of the +page. + +You may have some problems in a mixed @code{X11-OpenWindows} +environment. + +@pcb{} has been tested successfully with @code{X11R6} under Linux 1.1.59 +and later. + + +@node TeX and Manuals +@subsection Problems related to TeX +@cindex TeX, problems + +If your @code{TeX} installation complains about a missing @file{texinfo.tex} +file copy the one included in this release (directory @file{doc} +to your @code{TeX} macro directory. +Note, there are probably newer versions of this file available from some +FTP sites. +@code{TeX-3.0} failed, @code{TeX-3.14} worked just fine. Check our FTP server +@emph{ftp.uni-ulm.de} for ready-to-print versions of the manuals. + + +@c --------------------------- Appendix B ------------------------------- + +@node Custom Menus +@appendix Customizing the Menus + +The menu system is driven off a data file that contains +@dfn{resources}. A resource is a hierarchical description of a data +tree which, in this case, is mapped to the hierarchical menus used by +Pcb. + +@menu +* Resource Syntax:: What a resource file looks like. +* Menu Definitions:: Using a resource to define a menu. +* Menu Files and Defaults:: Where Pcb looks for its menu resource. +@end menu + +@node Resource Syntax +@section Resource Syntax + +A resource file is a simple text file. It contains curly braces to +group things, spaces between things, and double quotes when strings +need to include spaces. There are four fundamental ways of adding +data to a resource. + +First, a string (either a single word or a quoted string with spaces, +we call both ``strings'' in this appendix) can be added all by itself, +to add a string resource to the current resource. This is used, for +example, to define the string printed on a menu button. In this +example, four strings are added to the @var{File} resource: + +@example +File = @{ + Sample + "longer sample" + some text +@} +@end example + +Second, a named string may be added by giving two strings separated by +an equals sign. This is used to specify X resources and a few other +optional parameters of menus, for example. Note that a string all by +itself is thus an ``unnamed'' string. + +@example +@{"Layer groups" foreground=red sensitive=false@} +@end example + +Third, an unnamed subresource may be added. This is used to create +submenus and menu buttons. To add a subresource, simply group other +things in curly braces. This example describes a resource containing +one string and three subresources: + +@example +@{File + @{New do_new()@} + @{Save do_save()@} + @{Quit do_quit()@} +@} +@end example + +Lastly, a named subresource may be added by prefixing an unnamed +subresource with a string and an equals sign, just as when naming +strings. This syntax is used to name the resources used for the main +menu and popup menus: + +@example +MainMenu = @{ + @dots{} + @} +@end example + +Additionally, the menu parser allows for ``hooks'' whereby portions of +the menu system can be programmatically created at runtime by the +application. These hooks are invoked by a single word proceeded by an +at sign, such as this example where most of the Sizes menu is created +automatically: + +@example +@{Sizes + @@sizes + @{"Adjust active sizes ..." AdjustStyle(0)@} + @} +@end example + +In addition to all that, any unquoted pound sign (@code{#}) begins a +comment. Commented text continues until the end of the containing +line. Comments may begin at the beginning of a line, or after other +text on the line: + +@example +# This is a comment +MainMenu = @{ # This is also a comment +@end example + +@node Menu Definitions +@section Menu Definitions + +To best understand this section, you should find the +@file{pcb-menu.res} file that your Pcb uses and refer to it for +examples (@pxref{Menu Files and Defaults}). Note that the lesstif +GUI uses @file{pcb-menu.res} and the GTK+ GUI uses @file{gpcb-menu.res}. +The file format is identical however and if so desired, one can make +one file be a soft link to the other. + +A resource defines a menu when it meets certain semantic requirements. +The menu hierarchy is reflected as a hierarchy of unnamed +subresources, with the first string of each subresource defining the +label used for the menu button. A subresource that itself contains +subresources becomes a submenu, a subresource that does not becomes a +button. + +A submenu should only contain subresources for the buttons or submenus +within that submenu. Two exceptions are allowed: an initial string +sets the label, and the string ``-'' (a single dash) will create a +separator. + +A button should not contain subresources, but will contain many +strings, named and unnamed. The first member shall be an unnamed +string which is the label for the button. Any other unnamed strings +within the button's resource will be used as actions (much like the +.Xdefaults action strings), which are functions that will be called +when the button is pressed (or popped up, or created, depending on the +action). As a convenience, if a left parenthesis is seen, the current +``word'' will continue at least until the matching right parenthesis. +This allows you to pass strings with spaces as arguments to actions +without needing to quote the action. + +Named resources in button resources will be used as X resources. Such +resources can be used to set the font, color, and spacing of buttons. +As a convenience, ``fg'' can be used as an abbreviation for ``foreground''. + +Within the menu's resource file, Pcb will look for a few key named +subresources. At the moment, the only one it looks for is one called +@code{MainMenu}. This will be used for the main menu bar. In the +future, other named subresources will be used for popup resources. + +Given all this, a small sample @file{pcb-menu.res} would be: + +@example +MainMenu = @{ + @{File + @{"Load layout" Load(Layout)@} + - + @{"Quit Program" Quit() fg=red font=10x20@} + @} +@} +@end example + +Within the Pcb sources are specially crafted comments that mark all +the actions, flags, menu hooks, and whatnot that Pcb offers. Read the +file @file{src/gather-actions} in the Pcb source tree for +documentation for these comments. + +@node Menu Files and Defaults +@section Menu Files and Defaults + +Pcb will look for a file which defines its menus, trying the following +names (the example is for the lesstif GUI, the GTK+ GUI has ``gpcb-menu.res'' +in place of ``pcb-menu.res''): + +@example +./pcb-menu.res +$HOME/.pcb-menu.res +$PCBLIBDIR/pcb-menu.res + +@end example + +Note that @var{pcblibdir} defaults to @file{/usr/local/share/pcb} +(hence, @file{/usr/local/share/pcb/pcb-menu.res}). The +@file{} entry refers to a menu definition within the Pcb +application itself. The master file for all this is the file +@file{src/pcb-menu.res} in the Pcb source tree. This master source is +used to create the internal menu definition as well as being installed +in @file{$pcblibdir}. + +@c --------------------------- Appendix C ------------------------------- +@node Regular Expressions +@appendix Element Search/Regular Expressions +@cindex Element Search +@cindex Regular Expressions +@vindex Element Search +@vindex Regular Expressions + +@section Element Search/Regular Expressions +@pcb{}'s search is based on POSIX 1003.2 Regular Expressions. Full POSIX +Regular Expressions are supported by @pcb{} if the regex library was +available when @pcb{} was built. One difference from the regular +expressions found in tools like awk or grep is that PCB implicitly +adds a ``^'' to the begining of a regular expression and ``$'' to the +end of the regular expression. For example, if you enter ``C1'', the +actual regular expression used internally is ``^C1$''. Another difference +is that search patterns in pcb are not case sensitive. That is, ``CON'' is +treated the same as ``con''. + +It is easier to show by example how to search than explain +POSIX 1003.2. With regular expressions most characters are just +themselves, but some are special: + +@table @samp +@item * +Matches 0 or more instances of preceding character. + +@item + +Matches 1 or more instances of preceding character. + +@item ? +Matches 0 or 1 instances of preceding character. + +@item . +Matches any single character other than the newline character. + +@item | +The vertical bar is the alternation operator. It combines two +regular expressions. The result matches if either of them matches. + +@item \ +A backslash indicates the next character should not be interpreted literally +if it normally is, and should be interpreted literally if it normally isn't. + +@item @{n@} +An integer n enclosed in curly brackets matches the preceding item if +it occurs exactly n times. + +@item [ ] +A pair of square brackets matches every character they contain. Characters +may be given explicitly, or as ranges. + +@item - +A hyphen in the context of square brackets denotes the range between the +preceding and the following character. E.g., the range of digits is +``0-9'' . The range of letters from C to K is ``C-K'' . + +@item \^ inside square brackets +Inside square brackets the caret is an anti operator. Its presence makes +the square prackets match anything except the contents of the brackets. + +@item ( ) +Round parenthesis group parts of a regular expression. This is very much +like they do in math formulars. + +@end table + +If you need a special character literally, you can escape it with a +backslash. + +The following examples illustrate how regular expressions can be used to +specify element names (reference designators) to search for. +@table @samp + +@item C5 +Select the element whose name is exactly ``C5''. + +@item C5 | R3 +Select C5 and R3. + +@item C.* +Select all elements whose name start with the letter ``C'', such as C5, or +C42, or CF1. + +@item C.*1 +Select all elements that start with ``C'' and end with ``1'', such as C1, +or C51 or C5/9B71. + +@item R10? +Search for R1 or R10, but will not select R100 or R105. The question mark +is a quantifier for the character ``0''. + +@item R128+ +Selects R128, R1288, R12888, etc. + +@item TB. +Select all terminal blocks having exactly one character designator after +``TB'' such as TB1, TBA, or TBx but not TB. + +@item TB.. +Select all terminal blocks having a two character designator such as TB21 or +TB1a. + +@item TB.* +Select all terminal blocks with any designator. + +@item .*31 +Select all items, whose name ends with ``31'' such as Q31, or R31, or R531. + +@item Q[12] +Select Q1 and Q2. + +@item [A-D].* +Select all items, whose name starts with ``A'', ``B'', ``C'', or ``D''. + +@item .*N@{2@}.* +Select all items, whose name contains two ``N'' in a row such as +CONN23, or connA, but not CON5 + +@item [^D].* +Select all items that do not start with the letter ``D'', such as C2, or +R34, but not D34 + +@end table + + +@c --------------------------- Appendix -- drill sizes ------------------------------- +@node Standard Drill Sizes +@appendix Standard Drill Size Tables +@cindex drill sizes, list of standard +@cindex standard drill sizes + +@section American Standard Wire Size Drills +@include wire_size.texi + +@section American Standard Letter Size Drills +@include letter_size.texi + +@section Fractional Inch Size Drills +@include fractional_size.texi + +@section Metric Drills +@include metric_size.texi + +@c --------------------------- Appendix -- Centroid File Format ---------------------- +@node Centroid File Format +@appendix Centroid (X-Y) File Format +@cindex centroid file format +@cindex x-y file format + +@section Overview + +@section File Format +The centroid output file is in a standard comma seperated values (CSV) +format. Comment lines begin with a ``#''. The output file contains a +header with an RCS Id tag (useful for those who will check the file +into a version control system), a version number for the file format, +some comments containing the author and title of the board, and a +comment describing the remainder of the file format. + +An example centroid file is shown below. + +@example + +# @verb{ $ }Id@verb{ $ } +# PcbXY Version 1.0 +# Date: Fri Jul 22 03:40:08 2005 UTC +# Author: PCB User +# Title: MyBoard - PCB X-Y +# RefDes, Description, Value, X, Y, rotation, top/bottom +# X,Y in mils. rotation in degrees. +# -------------------------------------------- +R61,"0603","10",2610.00,3560.00,90,top +J5,"AMPHENOL_ARFX1231","unknown",2390.00,4220.00,180,top +C13,"0402","0.01u",2340.00,3014.00,270,top + +@end example + +@section Computation of Centroid and Rotation +@cindex centroid file, algorithms +@cindex x-y file, algorithms +The center of each element is found by averaging the (X,Y) coordinates +for the center of each pin and pad in the element. For example if an +element has 2 pins, 1 at (1,0) and another at (1,4) then the centroid +will be at (1,2). + +The calculation of rotation is a bit more complex. Currently a +rotation is not stored for each element but rather the rotated element +is stored. In other words if the element from the library has a pin +at (0,0) and (0,2) and it has been rotated by 90 degrees, then the +@file{.pcb} file will store (0,0) and (2,0) for the pin locations with +no indication that they have been rotated from the original. + +In the event that the element has only 1 pin, then the rotation is set +to zero. If the element has only one pad (as opposed to a +through-hole pin), then the rotation of the pad is used. + +When the element has multiple pins, the location of pin #1 is placed +in the coordinate system which has the centroid of the part at (0,0). +Then which quadrant pin #1 falls in determines the rotation. Zero +degrees of rotation is defined as pin #1 being in the upper left +quadrant. Increasing angles correspond to counterclockwise rotation so a +rotation of 90 degrees places pin #1 in the lower left quadrant. +Currently, the only allowed rotations are 0, 90, 180, and 270 degrees. + +If pin #1 happens to be at the centroid of the part, then pin #2 is +examined to see which quadrant it is located in. The same rules apply +for the definitions of rotation. In other words, when pin #1 is at +the centroid of the part and pin #2 is in the upper left quadrant, the +rotation is declared to be zero degrees. + +@c --------------------------- Appendix -- Actions ---------------------- +@node Action Reference +@appendix Action Reference +@cindex action reference + +@include actions.texi + +@c --------------------------- Appendix -- Glossary ---------------------- +@node Glossary +@appendix Glossary +@cindex glossary +@cindex terminology +@cindex index of terms + +@table @asis + +@item Footprint +The pattern of metal, silkscreen, soldermask relief, and drills which +defines where you place a component on a circuit board. +Footprints are the placed by the user onto the PC board during the +placement phase of PCB layout. + +@item Gerber File +The file format used in the industry to convey a board database to the +manufacturer is RS-274X (which replaces the now obsolete RS-274D +format). This file format was originally developed by Gerber for +their photo plotters and thus RS-274D and RS-274X format files +are often times refered to as ``Gerber'' files. + +@item Thermal, Thermal Relief +A thermal relief is a way of connecting a pin to a ground +or power plane. Instead of directly connecting to the plane, small "spokes" +are used to increase the thermal resistance between the pin and the plane. +Often times these connections are refered to as simply a thermal. By increasing +the thermal resistance to the plane, it becomes easier to solder to the +pin. In the drawing below, the pin on the left is connected to the +polygon using a solid connection with no thermal relief, the middle +pin is connected using a thermal, while the pin on the right has no +connection to the polygon. In PCB, the ``Thermal'' Tool is used to +make both a solid connection and one with thermal relief (see @ref{Polygon Objects}). + +@center @image{thermal,,,Example of a thermal relief,png} + +@end table + +@c --------------------------------------------------------------------- +@node Index +@unnumbered Index of Resources +@printindex vr + +@unnumbered Index of Actions, Commands and Options +@printindex fn + +@unnumbered Index of Concepts +@printindex cp + +@contents +@bye Index: trunk/doc-orig/pcbfile.texi =================================================================== --- trunk/doc-orig/pcbfile.texi (nonexistent) +++ trunk/doc-orig/pcbfile.texi (revision 1037) @@ -0,0 +1,946 @@ +@c key pcbfile +@c ./../src/parse_y.y 143 + +A special note about units: Older versions of @code{pcb} used mils +(1/1000 inch) as the base unit; a value of 500 in the file meant +half an inch. Newer versions uses a "high resolution" syntax, +where the base unit is 1/100 of a mil (0.000010 inch); a value of 500 in +the file means 5 mils. As a general rule, the variants of each entry +listed below which use square brackets are the high resolution formats +and use the 1/100 mil units, and the ones with parentheses are the older +variants and use 1 mil units. Note that when multiple variants +are listed, the most recent (and most preferred) format is the first +listed. + +Symbolic and numeric flags (SFlags and NFlags) are described in +@ref{Object Flags}. + +@menu +* Arc syntax:: +* Attribute syntax:: +* Connect syntax:: +* Cursor syntax:: +* DRC syntax:: +* Element syntax:: +* ElementArc syntax:: +* ElementLine syntax:: +* FileVersion syntax:: +* Flags syntax:: +* Grid syntax:: +* Groups syntax:: +* Layer syntax:: +* Line syntax:: +* Mark syntax:: +* Net syntax:: +* Netlist syntax:: +* Pad syntax:: +* PCB syntax:: +* Pin syntax:: +* PolyArea syntax:: +* Polygon syntax:: +* Rat syntax:: +* Styles syntax:: +* Symbol syntax:: +* SymbolLine syntax:: +* Text syntax:: +* Thermal syntax:: +* Via syntax:: +@end menu +@c pcbfile Arc +@node Arc syntax +@subsection Arc +@c ./../src/parse_y.y 660 + +@cartouche +@format +Arc [X Y Width Height Thickness Clearance StartAngle DeltaAngle SFlags] +Arc (X Y Width Height Thickness Clearance StartAngle DeltaAngle NFlags) +Arc (X Y Width Height Thickness StartAngle DeltaAngle NFlags) +@end format +@end cartouche + +@table @var +@item X Y +Coordinates of the center of the arc. +@item Width Height +The width and height, from the center to the edge. The bounds of the +circle of which this arc is a segment, is thus @math{2*Width} by +@math{2*Height}. +@item Thickness +The width of the copper trace which forms the arc. +@item Clearance +The amount of space cleared around the arc when the line passes +through a polygon. The clearance is added to the thickness to get the +thickness of the clear; thus the space between the arc and the polygon +is @math{Clearance/2} wide. +@item StartAngle +The angle of one end of the arc, in degrees. In PCB, an angle of zero +points left (negative X direction), and 90 degrees points down +(positive Y direction). +@item DeltaAngle +The sweep of the arc. This may be negative. Positive angles sweep +counterclockwise. +@item SFlags +Symbolic or numeric flags. +@item NFlags +Numeric flags. +@end table + +@c pcbfile Attribute +@node Attribute syntax +@subsection Attribute +@c ./../src/parse_y.y 1268 + +@cartouche +@format +Attribute ("Name" "Value") +@end format +@end cartouche + +Attributes allow boards and elements to have arbitrary data attached +to them, which is not directly used by PCB itself but may be of use by +other programs or users. + +@table @var +@item Name +The name of the attribute + +@item Value +The value of the attribute. Values are always stored as strings, even +if the value is interpreted as, for example, a number. + +@end table + +@c pcbfile Connect +@node Connect syntax +@subsection Connect +@c ./../src/parse_y.y 1258 + +@cartouche +@format +Connect ("PinPad") +@end format +@end cartouche + +@table @var +@item PinPad +The name of a pin or pad which is included in this net. Pin and Pad +names are named by the refdes and pin name, like @code{"U14-7"} for +pin 7 of U14, or @code{"T4-E"} for pin E of T4. +@end table + +@c pcbfile Cursor +@node Cursor syntax +@subsection Cursor +@c ./../src/parse_y.y 335 + +@cartouche +@format +Cursor [X Y Zoom] +Cursor (X Y Zoom) +@end format +@end cartouche + +@table @var +@item X Y +Location of the cursor when the board was saved. +@item Zoom +The current zoom factor. Note that a zoom factor of "0" means 1 mil +per screen pixel, N means @math{2^N} mils per screen pixel, etc. The +first variant accepts floating point numbers. The special value +"1000" means "zoom to fit" +@end table + +@c pcbfile DRC +@node DRC syntax +@subsection DRC +@c ./../src/parse_y.y 376 + +@cartouche +@format +DRC [Bloat Shrink Line Silk Drill Ring] +DRC [Bloat Shrink Line Silk] +DRC [Bloat Shrink Line] +@end format +@end cartouche + +@table @var +@item Bloat +Minimum spacing between copper. +@item Shrink +Minimum copper overlap to guarantee connectivity. +@item Line +Minimum line thickness. +@item Silk +Minimum silk thickness. +@item Drill +Minimum drill size. +@item Ring +Minimum width of the annular ring around pins and vias. +@end table + +@c pcbfile Element +@node Element syntax +@subsection Element +@c ./../src/parse_y.y 816 + +@cartouche +@format +Element [SFlags "Desc" "Name" "Value" MX MY TX TY TDir TScale TSFlags] ( +Element (NFlags "Desc" "Name" "Value" MX MY TX TY TDir TScale TNFlags) ( +Element (NFlags "Desc" "Name" "Value" TX TY TDir TScale TNFlags) ( +Element (NFlags "Desc" "Name" TX TY TDir TScale TNFlags) ( +Element ("Desc" "Name" TX TY TDir TScale TNFlags) ( +@ @ @ @dots{} contents @dots{} +) +@end format +@end cartouche + +@table @var +@item SFlags +Symbolic or numeric flags, for the element as a whole. +@item NFlags +Numeric flags, for the element as a whole. +@item Desc +The description of the element. This is one of the three strings +which can be displayed on the screen. +@item Name +The name of the element, usually the reference designator. +@item Value +The value of the element. +@item MX MY +The location of the element's mark. This is the reference point +for placing the element and its pins and pads. +@item TX TY +The upper left corner of the text (one of the three strings). +@item TDir +The relative direction of the text. 0 means left to right for +an unrotated element, 1 means up, 2 left, 3 down. +@item TScale +Size of the text, as a percentage of the ``default'' size of of the +font (the default font is about 40 mils high). Default is 100 (40 +mils). +@item TSFlags +Symbolic or numeric flags, for the text. +@item TNFlags +Numeric flags, for the text. +@end table + +Elements may contain pins, pads, element lines, element arcs, +attributes, and (for older elements) an optional mark. Note that +element definitions that have the mark coordinates in the element +line, only support pins and pads which use relative coordinates. The +pin and pad coordinates are relative to the mark. Element definitions +which do not include the mark coordinates in the element line, may +have a Mark definition in their contents, and only use pin and pad +definitions which use absolute coordinates. + +@c pcbfile ElementArc +@node ElementArc syntax +@subsection ElementArc +@c ./../src/parse_y.y 927 + +@cartouche +@format +ElementArc [X Y Width Height StartAngle DeltaAngle Thickness] +ElementArc (X Y Width Height StartAngle DeltaAngle Thickness) +@end format +@end cartouche + +@table @var +@item X Y +Coordinates of the center of the arc. These are relative to the +Element's mark point for new element formats, or absolute for older +formats. +@item Width Height +The width and height, from the center to the edge. The bounds of the +circle of which this arc is a segment, is thus @math{2*Width} by +@math{2*Height}. +@item StartAngle +The angle of one end of the arc, in degrees. In PCB, an angle of zero +points left (negative X direction), and 90 degrees points down +(positive Y direction). +@item DeltaAngle +The sweep of the arc. This may be negative. Positive angles sweep +counterclockwise. +@item Thickness +The width of the silk line which forms the arc. +@end table + +@c pcbfile ElementLine +@node ElementLine syntax +@subsection ElementLine +@c ./../src/parse_y.y 925 + +@cartouche +@format +ElementLine [X1 Y1 X2 Y2 Thickness] +ElementLine (X1 Y1 X2 Y2 Thickness) +@end format +@end cartouche + +@table @var +@item X1 Y1 X2 Y2 +Coordinates of the endpoints of the line. These are relative to the +Element's mark point for new element formats, or absolute for older +formats. +@item Thickness +The width of the silk for this line. +@end table + +@c pcbfile FileVersion +@node FileVersion syntax +@subsection FileVersion +@c ./../src/parse_y.y 258 + +@cartouche +@format +FileVersion[Version] +@end format +@end cartouche + +@table @var +@item Version +File format version. This version number represents the date when the pcb file +format was last changed. +@end table + +Any version of pcb build from sources equal to or newer +than this number should be able to read the file. If this line is not present +in the input file then file format compatibility is not checked. + + +@c pcbfile Flags +@node Flags syntax +@subsection Flags +@c ./../src/parse_y.y 418 + +@cartouche +@format +Flags(Number) +@end format +@end cartouche + +@table @var +@item Number +A number, whose value is normally given in hex, individual bits of which +represent pcb-wide flags as defined in @ref{PCBFlags}. + +@end table + +@c pcbfile Grid +@node Grid syntax +@subsection Grid +@c ./../src/parse_y.y 294 + +@cartouche +@format +Grid [Step OffsetX OffsetY Visible] +Grid (Step OffsetX OffsetY Visible) +Grid (Step OffsetX OffsetY) +@end format +@end cartouche + +@table @var +@item Step +Distance from one grid point to adjacent points. This value may be a +floating point number for the first two variants. +@item OffsetX OffsetY +The "origin" of the grid. Normally zero. +@item Visible +If non-zero, the grid will be visible on the screen. +@end table + +@c pcbfile Groups +@node Groups syntax +@subsection Groups +@c ./../src/parse_y.y 432 + +@cartouche +@format +Groups("String") +@end format +@end cartouche + +@table @var +@item String + +Encodes the layer grouping information. Each group is separated by a +colon, each member of each group is separated by a comma. Group +members are either numbers from @code{1}..@var{N} for each layer, and +the letters @code{c} or @code{s} representing the component side and +solder side of the board. Including @code{c} or @code{s} marks that +group as being the top or bottom side of the board. + +@example +Groups("1,2,c:3:4:5,6,s:7,8") +@end example + +@end table + +@c pcbfile Layer +@node Layer syntax +@subsection Layer +@c ./../src/parse_y.y 573 + +@cartouche +@format +Layer (LayerNum "Name") ( +@ @ @ @dots{} contents @dots{} +) +@end format +@end cartouche + +@table @var +@item LayerNum +The layer number. Layers are numbered sequentially, starting with 1. +The last two layers (9 and 10 by default) are solder-side silk and +component-side silk, in that order. +@item Name +The layer name. +@item contents +The contents of the layer, which may include attributes, lines, arcs, rectangles, +text, and polygons. +@end table + +@c pcbfile Line +@node Line syntax +@subsection Line +@c ./../src/parse_y.y 629 + +@cartouche +@format +Line [X1 Y1 X2 Y2 Thickness Clearance SFlags] +Line (X1 Y1 X2 Y2 Thickness Clearance NFlags) +Line (X1 Y1 X2 Y2 Thickness NFlags) +@end format +@end cartouche + +@table @var +@item X1 Y1 X2 Y2 +The end points of the line +@item Thickness +The width of the line +@item Clearance +The amount of space cleared around the line when the line passes +through a polygon. The clearance is added to the thickness to get the +thickness of the clear; thus the space between the line and the +polygon is @math{Clearance/2} wide. +@item SFlags +Symbolic or numeric flags +@item NFlags +Numeric flags. +@end table + +@c pcbfile Mark +@node Mark syntax +@subsection Mark +@c ./../src/parse_y.y 929 + +@cartouche +@format +Mark [X Y] +Mark (X Y) +@end format +@end cartouche + +@table @var +@item X Y +Coordinates of the Mark, for older element formats that don't have +the mark as part of the Element line. +@end table + +@c pcbfile Net +@node Net syntax +@subsection Net +@c ./../src/parse_y.y 1235 + +@cartouche +@format +Net ("Name" "Style") ( +@ @ @ @dots{} connects @dots{} +) +@end format +@end cartouche + +@table @var +@item Name +The name of this net. +@item Style +The routing style that should be used when autorouting this net. +@end table + +@c pcbfile Netlist +@node Netlist syntax +@subsection Netlist +@c ./../src/parse_y.y 1214 + +@cartouche +@format +Netlist ( ) ( +@ @ @ @dots{} nets @dots{} +) +@end format +@end cartouche + +@c pcbfile Pad +@node Pad syntax +@subsection Pad +@c ./../src/parse_y.y 1086 + +@cartouche +@format +Pad [rX1 rY1 rX2 rY2 Thickness Clearance Mask "Name" "Number" SFlags] +Pad (rX1 rY1 rX2 rY2 Thickness Clearance Mask "Name" "Number" NFlags) +Pad (aX1 aY1 aX2 aY2 Thickness "Name" "Number" NFlags) +Pad (aX1 aY1 aX2 aY2 Thickness "Name" NFlags) +@end format +@end cartouche + +@table @var +@item rX1 rY1 rX2 rY2 +Coordinates of the endpoints of the pad, relative to the element's +mark. Note that the copper extends beyond these coordinates by half +the thickness. To make a square or round pad, specify the same +coordinate twice. +@item aX1 aY1 aX2 aY2 +Same, but absolute coordinates of the endpoints of the pad. +@item Thickness +width of the pad. +@item Clearance +add to thickness to get clearance width. +@item Mask +width of solder mask opening. +@item Name +name of pin +@item Number +number of pin +@item SFlags +symbolic or numerical flags +@item NFlags +numerical flags only +@end table + +@c pcbfile PCB +@node PCB syntax +@subsection PCB +@c ./../src/parse_y.y 271 + +@cartouche +@format +PCB ["Name" Width Height] +PCB ("Name" Width Height] +PCB ("Name") +@end format +@end cartouche + +@table @var +@item Name +Name of the PCB project +@item Width Height +Size of the board +@end table + +If you don't specify the size of the board, a very large default is +chosen. + +@c pcbfile Pin +@node Pin syntax +@subsection Pin +@c ./../src/parse_y.y 1013 + +@cartouche +@format +Pin [rX rY Thickness Clearance Mask Drill "Name" "Number" SFlags] +Pin (rX rY Thickness Clearance Mask Drill "Name" "Number" NFlags) +Pin (aX aY Thickness Drill "Name" "Number" NFlags) +Pin (aX aY Thickness Drill "Name" NFlags) +Pin (aX aY Thickness "Name" NFlags) +@end format +@end cartouche + +@table @var +@item rX rY +coordinates of center, relative to the element's mark +@item aX aY +absolute coordinates of center. +@item Thickness +outer diameter of copper annulus +@item Clearance +add to thickness to get clearance diameter +@item Mask +diameter of solder mask opening +@item Drill +diameter of drill +@item Name +name of pin +@item Number +number of pin +@item SFlags +symbolic or numerical flags +@item NFlags +numerical flags only +@end table + +@c pcbfile PolyArea +@node PolyArea syntax +@subsection PolyArea +@c ./../src/parse_y.y 353 + +@cartouche +@format +PolyArea [Area] +@end format +@end cartouche + +@table @var +@item Area +Minimum area of polygon island to retain. If a polygon has clearances that cause an isolated island to be created, then will only be retained if the area exceeds this minimum area. +@end table + +@c pcbfile Polygon +@node Polygon syntax +@subsection Polygon +@c ./../src/parse_y.y 743 + +@cartouche +@format +Polygon (SFlags) ( +@ @ @ @dots{} (X Y) @dots{} +@ @ @ @dots{} [X Y] @dots{} +@ @ @ Hole ( +@ @ @ @ @ @ @dots{} (X Y) @dots{} +@ @ @ @ @ @ @dots{} [X Y] @dots{} +@ @ @ ) +@ @ @ @dots{} +) +@end format +@end cartouche + +@table @var +@item SFlags +Symbolic or numeric flags. +@item X Y +Coordinates of each vertex. You must list at least three coordinates. +@item Hole (...) +Defines a hole within the polygon's outer contour. There may be zero or more such sections. +@end table + +@c pcbfile Rat +@node Rat syntax +@subsection Rat +@c ./../src/parse_y.y 558 + +@cartouche +@format +Rat [X1 Y1 Group1 X2 Y2 Group2 SFlags] +Rat (X1 Y1 Group1 X2 Y2 Group2 NFlags) +@end format +@end cartouche + +@table @var +@item X1 Y1 X2 Y2 +The endpoints of the rat line. +@item Group1 Group2 +The layer group each end is connected on. +@item SFlags +Symbolic or numeric flags. +@item NFlags +Numeric flags. +@end table + +@c pcbfile Styles +@node Styles syntax +@subsection Styles +@c ./../src/parse_y.y 442 + +@cartouche +@format +Styles("String") +@end format +@end cartouche + +@table @var +@item String + +Encodes the four routing styles @code{pcb} knows about. The four styles +are separated by colons. Each style consists of five parameters as follows: + +@table @var +@item Name +The name of the style. +@item Thickness +Width of lines and arcs. +@item Diameter +Copper diameter of pins and vias. +@item Drill +Drill diameter of pins and vias. +@item Keepaway +Minimum spacing to other nets. If omitted, 10 mils is the default. + +@end table + +@end table + +@example +Styles("Signal,10,40,20:Power,25,60,35:Fat,40,60,35:Skinny,8,36,20") +Styles["Logic,1000,3600,2000,1000:Power,2500,6000,3500,1000: +@ @ @ Line,4000,6000,3500,1000:Breakout,600,2402,1181,600"] +@end example + +@noindent +Note that strings in actual files cannot span lines; the above example +is split across lines only to make it readable. + +@c pcbfile Symbol +@node Symbol syntax +@subsection Symbol +@c ./../src/parse_y.y 1148 + +@cartouche +@format +Symbol [Char Delta] ( +Symbol (Char Delta) ( +@ @ @ @dots{} symbol lines @dots{} +) +@end format +@end cartouche + +@table @var +@item Char +The character or numerical character value this symbol represents. +Characters must be in single quotes. +@item Delta +Additional space to allow after this character. +@end table + +@c pcbfile SymbolLine +@node SymbolLine syntax +@subsection SymbolLine +@c ./../src/parse_y.y 1197 + +@cartouche +@format +SymbolLine [X1 Y1 X2 Y1 Thickness] +SymbolLine (X1 Y1 X2 Y1 Thickness) +@end format +@end cartouche + +@table @var +@item X1 Y1 X2 Y2 +The endpoints of this line. +@item Thickness +The width of this line. +@end table + +@c pcbfile Text +@node Text syntax +@subsection Text +@c ./../src/parse_y.y 689 + +@cartouche +@format +Text [X Y Direction Scale "String" SFlags] +Text (X Y Direction Scale "String" NFlags) +Text (X Y Direction "String" NFlags) +@end format +@end cartouche + +@table @var +@item X Y +The location of the upper left corner of the text. +@item Direction +0 means text is drawn left to right, 1 means up, 2 means right to left +(i.e. upside down), and 3 means down. +@item Scale +Size of the text, as a percentage of the ``default'' size of of the +font (the default font is about 40 mils high). Default is 100 (40 +mils). +@item String +The string to draw. +@item SFlags +Symbolic or numeric flags. +@item NFlags +Numeric flags. +@end table + +@c pcbfile Thermal +@node Thermal syntax +@subsection Thermal +@c ./../src/parse_y.y 365 + +@cartouche +@format +Thermal [Scale] +@end format +@end cartouche + +@table @var +@item Scale +Relative size of thermal fingers. A value of 1.0 makes the finger +width twice the clearance gap width (measured across the gap, not +diameter). The normal value is 0.5, which results in a finger width +the same as the clearance gap width. +@end table + +@c pcbfile Via +@node Via syntax +@subsection Via +@c ./../src/parse_y.y 498 + +@cartouche +@format +Via [X Y Thickness Clearance Mask Drill "Name" SFlags] +Via (X Y Thickness Clearance Mask Drill "Name" NFlags) +Via (X Y Thickness Clearance Drill "Name" NFlags) +Via (X Y Thickness Drill "Name" NFlags) +Via (X Y Thickness "Name" NFlags) +@end format +@end cartouche + +@table @var +@item X Y +coordinates of center +@item Thickness +outer diameter of copper annulus +@item Clearance +add to thickness to get clearance diameter +@item Mask +diameter of solder mask opening +@item Drill +diameter of drill +@item Name +string, name of via (vias have names?) +@item SFlags +symbolic or numerical flags +@item NFlags +numerical flags only +@end table + +@c pcbfile ~objectflags +@c ./../src/const.h 110 +@node Object Flags +@section Object Flags + +Note that object flags can be given numerically (like @code{0x0147}) +or symbolically (like @code{"found,showname,square"}. Some numeric +values are reused for different object types. The table below lists +the numeric value followed by the symbolic name. + +@table @code +@item 0x0001 pin +If set, this object is a pin. This flag is for internal use only. +@item 0x0002 via +Likewise, for vias. +@item 0x0004 found +If set, this object has been found by @code{FindConnection()}. +@item 0x0008 hole +For pins and vias, this flag means that the pin or via is a hole +without a copper annulus. +@item 0x0010 rat +If set for a line, indicates that this line is a rat line instead of a +copper trace. +@item 0x0010 pininpoly +For pins and pads, this flag is used internally to indicate that the +pin or pad overlaps a polygon on some layer. +@item 0x0010 clearpoly +For polygons, this flag means that pins and vias will normally clear +these polygons (thus, thermals are required for electrical +connection). When clear, polygons will solidly connect to pins and +vias. +@item 0x0010 hidename +For elements, when set the name of the element is hidden. +@item 0x0020 showname +For elements, when set the names of pins are shown. +@item 0x0020 clearline +For lines and arcs, the line/arc will clear polygons instead of +connecting to them. +@item 0x0020 fullpoly +For polygons, the full polygon is drawn (i.e. all parts instead of only the biggest one). +@item 0x0040 selected +Set when the object is selected. +@item 0x0080 onsolder +For elements and pads, indicates that they are on the solder side. +@item 0x0080 auto +For lines and vias, indicates that these were created by the +autorouter. +@item 0x0100 square +For pins and pads, indicates a square (vs round) pin/pad. +@item 0x0200 rubberend +For lines, used internally for rubber band moves. +@item 0x0200 warn +For pins, vias, and pads, set to indicate a warning. +@item 0x0400 usetherm +Obsolete, indicates that pins/vias should be drawn with thermal +fingers. +@item 0x0400 +Obsolete, old files used this to indicate lines drawn on silk. +@item 0x0800 octagon +Draw pins and vias as octagons. +@item 0x1000 drc +Set for objects that fail DRC. +@item 0x2000 lock +Set for locked objects. +@item 0x4000 edge2 +For pads, indicates that the second point is closer to the edge. For +pins, indicates that the pin is closer to a horizontal edge and thus +pinout text should be vertical. +@item 0x8000 marker +Marker used internally to avoid revisiting an object. +@item 0x10000 nopaste +For pads, set to prevent a solderpaste stencil opening for the +pad. Primarily used for pads used as fiducials. +@end table +@c pcbfile ~pcbflags +@c ./../src/const.h 149 +@node PCBFlags +@section PCBFlags +@table @code +@item 0x00001 +Pinout displays pin numbers instead of pin names. +@item 0x00002 +Use local reference for moves, by setting the mark at the beginning of +each move. +@item 0x00004 +When set, only polygons and their clearances are drawn, to see if +polygons have isolated regions. +@item 0x00008 +Display DRC region on crosshair. +@item 0x00010 +Do all move, mirror, rotate with rubberband connections. +@item 0x00020 +Display descriptions of elements, instead of refdes. +@item 0x00040 +Display names of elements, instead of refdes. +@item 0x00080 +Auto-DRC flag. When set, PCB doesn't let you place copper that +violates DRC. +@item 0x00100 +Enable 'all-direction' lines. +@item 0x00200 +Switch starting angle after each click. +@item 0x00400 +Force unique names on board. +@item 0x00800 +New lines/arc clear polygons. +@item 0x01000 +Crosshair snaps to pins and pads. +@item 0x02000 +Show the solder mask layer. +@item 0x04000 +Draw with thin lines. +@item 0x08000 +Move items orthogonally. +@item 0x10000 +Draw autoroute paths real-time. +@item 0x20000 +New polygons are full ones. +@item 0x40000 +Names are locked, the mouse cannot select them. +@item 0x80000 +Everything but names are locked, the mouse cannot select anything else. +@item 0x100000 +New polygons are full polygons. +@item 0x200000 +When set, element names are not drawn. +@end table Index: trunk/doc-orig/puller.pcb =================================================================== --- trunk/doc-orig/puller.pcb (nonexistent) +++ trunk/doc-orig/puller.pcb (revision 1037) @@ -0,0 +1,848 @@ +# release: pcb 1.99s + +PCB["" 110000 30000] + +Grid[10000.00000000 0 0 1] +Cursor[0 0 0.000000] +Thermal[0.500000] +DRC[1000 1000 1000 1000 1500 1000] +Flags(0x0000000000001c40) +Groups("1,c:2,s:3:4:5:6:7:8") +Styles["Signal,1000,3600,2000,1000:Power,2500,6000,3500,1000:Fat,5000,10000,5000,1000:Skinny,600,2402,1181,600"] + +Symbol[' ' 1800] +( +) +Symbol['!' 1200] +( + SymbolLine[0 4500 0 5000 800] + SymbolLine[0 1000 0 3500 800] +) +Symbol['"' 1200] +( + SymbolLine[0 1000 0 2000 800] + SymbolLine[1000 1000 1000 2000 800] +) +Symbol['#' 1200] +( + SymbolLine[0 3500 2000 3500 800] + SymbolLine[0 2500 2000 2500 800] + SymbolLine[1500 2000 1500 4000 800] + SymbolLine[500 2000 500 4000 800] +) +Symbol['$' 1200] +( + SymbolLine[1500 1500 2000 2000 800] + SymbolLine[500 1500 1500 1500 800] + SymbolLine[0 2000 500 1500 800] + SymbolLine[0 2000 0 2500 800] + SymbolLine[0 2500 500 3000 800] + SymbolLine[500 3000 1500 3000 800] + SymbolLine[1500 3000 2000 3500 800] + SymbolLine[2000 3500 2000 4000 800] + SymbolLine[1500 4500 2000 4000 800] + SymbolLine[500 4500 1500 4500 800] + SymbolLine[0 4000 500 4500 800] + SymbolLine[1000 1000 1000 5000 800] +) +Symbol['%' 1200] +( + SymbolLine[0 1500 0 2000 800] + SymbolLine[0 1500 500 1000 800] + SymbolLine[500 1000 1000 1000 800] + SymbolLine[1000 1000 1500 1500 800] + SymbolLine[1500 1500 1500 2000 800] + SymbolLine[1000 2500 1500 2000 800] + SymbolLine[500 2500 1000 2500 800] + SymbolLine[0 2000 500 2500 800] + SymbolLine[0 5000 4000 1000 800] + SymbolLine[3500 5000 4000 4500 800] + SymbolLine[4000 4000 4000 4500 800] + SymbolLine[3500 3500 4000 4000 800] + SymbolLine[3000 3500 3500 3500 800] + SymbolLine[2500 4000 3000 3500 800] + SymbolLine[2500 4000 2500 4500 800] + SymbolLine[2500 4500 3000 5000 800] + SymbolLine[3000 5000 3500 5000 800] +) +Symbol['&' 1200] +( + SymbolLine[0 4500 500 5000 800] + SymbolLine[0 1500 0 2500 800] + SymbolLine[0 1500 500 1000 800] + SymbolLine[0 3500 1500 2000 800] + SymbolLine[500 5000 1000 5000 800] + SymbolLine[1000 5000 2000 4000 800] + SymbolLine[0 2500 2500 5000 800] + SymbolLine[500 1000 1000 1000 800] + SymbolLine[1000 1000 1500 1500 800] + SymbolLine[1500 1500 1500 2000 800] + SymbolLine[0 3500 0 4500 800] +) +Symbol[''' 1200] +( + SymbolLine[0 2000 1000 1000 800] +) +Symbol['(' 1200] +( + SymbolLine[0 4500 500 5000 800] + SymbolLine[0 1500 500 1000 800] + SymbolLine[0 1500 0 4500 800] +) +Symbol[')' 1200] +( + SymbolLine[0 1000 500 1500 800] + SymbolLine[500 1500 500 4500 800] + SymbolLine[0 5000 500 4500 800] +) +Symbol['*' 1200] +( + SymbolLine[0 2000 2000 4000 800] + SymbolLine[0 4000 2000 2000 800] + SymbolLine[0 3000 2000 3000 800] + SymbolLine[1000 2000 1000 4000 800] +) +Symbol['+' 1200] +( + SymbolLine[0 3000 2000 3000 800] + SymbolLine[1000 2000 1000 4000 800] +) +Symbol[',' 1200] +( + SymbolLine[0 6000 1000 5000 800] +) +Symbol['-' 1200] +( + SymbolLine[0 3000 2000 3000 800] +) +Symbol['.' 1200] +( + SymbolLine[0 5000 500 5000 800] +) +Symbol['/' 1200] +( + SymbolLine[0 4500 3000 1500 800] +) +Symbol['0' 1200] +( + SymbolLine[0 4500 500 5000 800] + SymbolLine[0 1500 0 4500 800] + SymbolLine[0 1500 500 1000 800] + SymbolLine[500 1000 1500 1000 800] + SymbolLine[1500 1000 2000 1500 800] + SymbolLine[2000 1500 2000 4500 800] + SymbolLine[1500 5000 2000 4500 800] + SymbolLine[500 5000 1500 5000 800] + SymbolLine[0 4000 2000 2000 800] +) +Symbol['1' 1200] +( + SymbolLine[500 5000 1500 5000 800] + SymbolLine[1000 1000 1000 5000 800] + SymbolLine[0 2000 1000 1000 800] +) +Symbol['2' 1200] +( + SymbolLine[0 1500 500 1000 800] + SymbolLine[500 1000 2000 1000 800] + SymbolLine[2000 1000 2500 1500 800] + SymbolLine[2500 1500 2500 2500 800] + SymbolLine[0 5000 2500 2500 800] + SymbolLine[0 5000 2500 5000 800] +) +Symbol['3' 1200] +( + SymbolLine[0 1500 500 1000 800] + SymbolLine[500 1000 1500 1000 800] + SymbolLine[1500 1000 2000 1500 800] + SymbolLine[2000 1500 2000 4500 800] + SymbolLine[1500 5000 2000 4500 800] + SymbolLine[500 5000 1500 5000 800] + SymbolLine[0 4500 500 5000 800] + SymbolLine[500 3000 2000 3000 800] +) +Symbol['4' 1200] +( + SymbolLine[0 3000 2000 1000 800] + SymbolLine[0 3000 2500 3000 800] + SymbolLine[2000 1000 2000 5000 800] +) +Symbol['5' 1200] +( + SymbolLine[0 1000 2000 1000 800] + SymbolLine[0 1000 0 3000 800] + SymbolLine[0 3000 500 2500 800] + SymbolLine[500 2500 1500 2500 800] + SymbolLine[1500 2500 2000 3000 800] + SymbolLine[2000 3000 2000 4500 800] + SymbolLine[1500 5000 2000 4500 800] + SymbolLine[500 5000 1500 5000 800] + SymbolLine[0 4500 500 5000 800] +) +Symbol['6' 1200] +( + SymbolLine[1500 1000 2000 1500 800] + SymbolLine[500 1000 1500 1000 800] + SymbolLine[0 1500 500 1000 800] + SymbolLine[0 1500 0 4500 800] + SymbolLine[0 4500 500 5000 800] + SymbolLine[1500 3000 2000 3500 800] + SymbolLine[0 3000 1500 3000 800] + SymbolLine[500 5000 1500 5000 800] + SymbolLine[1500 5000 2000 4500 800] + SymbolLine[2000 3500 2000 4500 800] +) +Symbol['7' 1200] +( + SymbolLine[0 5000 2500 2500 800] + SymbolLine[2500 1000 2500 2500 800] + SymbolLine[0 1000 2500 1000 800] +) +Symbol['8' 1200] +( + SymbolLine[0 4500 500 5000 800] + SymbolLine[0 3500 0 4500 800] + SymbolLine[0 3500 500 3000 800] + SymbolLine[500 3000 1500 3000 800] + SymbolLine[1500 3000 2000 3500 800] + SymbolLine[2000 3500 2000 4500 800] + SymbolLine[1500 5000 2000 4500 800] + SymbolLine[500 5000 1500 5000 800] + SymbolLine[0 2500 500 3000 800] + SymbolLine[0 1500 0 2500 800] + SymbolLine[0 1500 500 1000 800] + SymbolLine[500 1000 1500 1000 800] + SymbolLine[1500 1000 2000 1500 800] + SymbolLine[2000 1500 2000 2500 800] + SymbolLine[1500 3000 2000 2500 800] +) +Symbol['9' 1200] +( + SymbolLine[0 5000 2000 3000 800] + SymbolLine[2000 1500 2000 3000 800] + SymbolLine[1500 1000 2000 1500 800] + SymbolLine[500 1000 1500 1000 800] + SymbolLine[0 1500 500 1000 800] + SymbolLine[0 1500 0 2500 800] + SymbolLine[0 2500 500 3000 800] + SymbolLine[500 3000 2000 3000 800] +) +Symbol[':' 1200] +( + SymbolLine[0 2500 500 2500 800] + SymbolLine[0 3500 500 3500 800] +) +Symbol[';' 1200] +( + SymbolLine[0 5000 1000 4000 800] + SymbolLine[1000 2500 1000 3000 800] +) +Symbol['<' 1200] +( + SymbolLine[0 3000 1000 2000 800] + SymbolLine[0 3000 1000 4000 800] +) +Symbol['=' 1200] +( + SymbolLine[0 2500 2000 2500 800] + SymbolLine[0 3500 2000 3500 800] +) +Symbol['>' 1200] +( + SymbolLine[0 2000 1000 3000 800] + SymbolLine[0 4000 1000 3000 800] +) +Symbol['?' 1200] +( + SymbolLine[1000 3000 1000 3500 800] + SymbolLine[1000 4500 1000 5000 800] + SymbolLine[0 1500 0 2000 800] + SymbolLine[0 1500 500 1000 800] + SymbolLine[500 1000 1500 1000 800] + SymbolLine[1500 1000 2000 1500 800] + SymbolLine[2000 1500 2000 2000 800] + SymbolLine[1000 3000 2000 2000 800] +) +Symbol['@' 1200] +( + SymbolLine[0 1000 0 4000 800] + SymbolLine[0 4000 1000 5000 800] + SymbolLine[1000 5000 4000 5000 800] + SymbolLine[5000 3500 5000 1000 800] + SymbolLine[5000 1000 4000 0 800] + SymbolLine[4000 0 1000 0 800] + SymbolLine[1000 0 0 1000 800] + SymbolLine[1500 2000 1500 3000 800] + SymbolLine[1500 3000 2000 3500 800] + SymbolLine[2000 3500 3000 3500 800] + SymbolLine[3000 3500 3500 3000 800] + SymbolLine[3500 3000 4000 3500 800] + SymbolLine[3500 3000 3500 1500 800] + SymbolLine[3500 2000 3000 1500 800] + SymbolLine[2000 1500 3000 1500 800] + SymbolLine[2000 1500 1500 2000 800] + SymbolLine[4000 3500 5000 3500 800] +) +Symbol['A' 1200] +( + SymbolLine[0 1500 0 5000 800] + SymbolLine[0 1500 500 1000 800] + SymbolLine[500 1000 2000 1000 800] + SymbolLine[2000 1000 2500 1500 800] + SymbolLine[2500 1500 2500 5000 800] + SymbolLine[0 3000 2500 3000 800] +) +Symbol['B' 1200] +( + SymbolLine[0 5000 2000 5000 800] + SymbolLine[2000 5000 2500 4500 800] + SymbolLine[2500 3500 2500 4500 800] + SymbolLine[2000 3000 2500 3500 800] + SymbolLine[500 3000 2000 3000 800] + SymbolLine[500 1000 500 5000 800] + SymbolLine[0 1000 2000 1000 800] + SymbolLine[2000 1000 2500 1500 800] + SymbolLine[2500 1500 2500 2500 800] + SymbolLine[2000 3000 2500 2500 800] +) +Symbol['C' 1200] +( + SymbolLine[500 5000 2000 5000 800] + SymbolLine[0 4500 500 5000 800] + SymbolLine[0 1500 0 4500 800] + SymbolLine[0 1500 500 1000 800] + SymbolLine[500 1000 2000 1000 800] +) +Symbol['D' 1200] +( + SymbolLine[500 1000 500 5000 800] + SymbolLine[2000 1000 2500 1500 800] + SymbolLine[2500 1500 2500 4500 800] + SymbolLine[2000 5000 2500 4500 800] + SymbolLine[0 5000 2000 5000 800] + SymbolLine[0 1000 2000 1000 800] +) +Symbol['E' 1200] +( + SymbolLine[0 3000 1500 3000 800] + SymbolLine[0 5000 2000 5000 800] + SymbolLine[0 1000 0 5000 800] + SymbolLine[0 1000 2000 1000 800] +) +Symbol['F' 1200] +( + SymbolLine[0 1000 0 5000 800] + SymbolLine[0 1000 2000 1000 800] + SymbolLine[0 3000 1500 3000 800] +) +Symbol['G' 1200] +( + SymbolLine[2000 1000 2500 1500 800] + SymbolLine[500 1000 2000 1000 800] + SymbolLine[0 1500 500 1000 800] + SymbolLine[0 1500 0 4500 800] + SymbolLine[0 4500 500 5000 800] + SymbolLine[500 5000 2000 5000 800] + SymbolLine[2000 5000 2500 4500 800] + SymbolLine[2500 3500 2500 4500 800] + SymbolLine[2000 3000 2500 3500 800] + SymbolLine[1000 3000 2000 3000 800] +) +Symbol['H' 1200] +( + SymbolLine[0 1000 0 5000 800] + SymbolLine[2500 1000 2500 5000 800] + SymbolLine[0 3000 2500 3000 800] +) +Symbol['I' 1200] +( + SymbolLine[0 1000 1000 1000 800] + SymbolLine[500 1000 500 5000 800] + SymbolLine[0 5000 1000 5000 800] +) +Symbol['J' 1200] +( + SymbolLine[0 1000 1500 1000 800] + SymbolLine[1500 1000 1500 4500 800] + SymbolLine[1000 5000 1500 4500 800] + SymbolLine[500 5000 1000 5000 800] + SymbolLine[0 4500 500 5000 800] +) +Symbol['K' 1200] +( + SymbolLine[0 1000 0 5000 800] + SymbolLine[0 3000 2000 1000 800] + SymbolLine[0 3000 2000 5000 800] +) +Symbol['L' 1200] +( + SymbolLine[0 1000 0 5000 800] + SymbolLine[0 5000 2000 5000 800] +) +Symbol['M' 1200] +( + SymbolLine[0 1000 0 5000 800] + SymbolLine[0 1000 1500 2500 800] + SymbolLine[1500 2500 3000 1000 800] + SymbolLine[3000 1000 3000 5000 800] +) +Symbol['N' 1200] +( + SymbolLine[0 1000 0 5000 800] + SymbolLine[0 1000 0 1500 800] + SymbolLine[0 1500 2500 4000 800] + SymbolLine[2500 1000 2500 5000 800] +) +Symbol['O' 1200] +( + SymbolLine[0 1500 0 4500 800] + SymbolLine[0 1500 500 1000 800] + SymbolLine[500 1000 1500 1000 800] + SymbolLine[1500 1000 2000 1500 800] + SymbolLine[2000 1500 2000 4500 800] + SymbolLine[1500 5000 2000 4500 800] + SymbolLine[500 5000 1500 5000 800] + SymbolLine[0 4500 500 5000 800] +) +Symbol['P' 1200] +( + SymbolLine[500 1000 500 5000 800] + SymbolLine[0 1000 2000 1000 800] + SymbolLine[2000 1000 2500 1500 800] + SymbolLine[2500 1500 2500 2500 800] + SymbolLine[2000 3000 2500 2500 800] + SymbolLine[500 3000 2000 3000 800] +) +Symbol['Q' 1200] +( + SymbolLine[0 1500 0 4500 800] + SymbolLine[0 1500 500 1000 800] + SymbolLine[500 1000 1500 1000 800] + SymbolLine[1500 1000 2000 1500 800] + SymbolLine[2000 1500 2000 4500 800] + SymbolLine[1500 5000 2000 4500 800] + SymbolLine[500 5000 1500 5000 800] + SymbolLine[0 4500 500 5000 800] + SymbolLine[1000 4000 2000 5000 800] +) +Symbol['R' 1200] +( + SymbolLine[0 1000 2000 1000 800] + SymbolLine[2000 1000 2500 1500 800] + SymbolLine[2500 1500 2500 2500 800] + SymbolLine[2000 3000 2500 2500 800] + SymbolLine[500 3000 2000 3000 800] + SymbolLine[500 1000 500 5000 800] + SymbolLine[500 3000 2500 5000 800] +) +Symbol['S' 1200] +( + SymbolLine[2000 1000 2500 1500 800] + SymbolLine[500 1000 2000 1000 800] + SymbolLine[0 1500 500 1000 800] + SymbolLine[0 1500 0 2500 800] + SymbolLine[0 2500 500 3000 800] + SymbolLine[500 3000 2000 3000 800] + SymbolLine[2000 3000 2500 3500 800] + SymbolLine[2500 3500 2500 4500 800] + SymbolLine[2000 5000 2500 4500 800] + SymbolLine[500 5000 2000 5000 800] + SymbolLine[0 4500 500 5000 800] +) +Symbol['T' 1200] +( + SymbolLine[0 1000 2000 1000 800] + SymbolLine[1000 1000 1000 5000 800] +) +Symbol['U' 1200] +( + SymbolLine[0 1000 0 4500 800] + SymbolLine[0 4500 500 5000 800] + SymbolLine[500 5000 1500 5000 800] + SymbolLine[1500 5000 2000 4500 800] + SymbolLine[2000 1000 2000 4500 800] +) +Symbol['V' 1200] +( + SymbolLine[0 1000 0 4000 800] + SymbolLine[0 4000 1000 5000 800] + SymbolLine[1000 5000 2000 4000 800] + SymbolLine[2000 1000 2000 4000 800] +) +Symbol['W' 1200] +( + SymbolLine[0 1000 0 5000 800] + SymbolLine[0 5000 1500 3500 800] + SymbolLine[1500 3500 3000 5000 800] + SymbolLine[3000 1000 3000 5000 800] +) +Symbol['X' 1200] +( + SymbolLine[0 1000 0 1500 800] + SymbolLine[0 1500 2500 4000 800] + SymbolLine[2500 4000 2500 5000 800] + SymbolLine[0 4000 0 5000 800] + SymbolLine[0 4000 2500 1500 800] + SymbolLine[2500 1000 2500 1500 800] +) +Symbol['Y' 1200] +( + SymbolLine[0 1000 0 1500 800] + SymbolLine[0 1500 1000 2500 800] + SymbolLine[1000 2500 2000 1500 800] + SymbolLine[2000 1000 2000 1500 800] + SymbolLine[1000 2500 1000 5000 800] +) +Symbol['Z' 1200] +( + SymbolLine[0 1000 2500 1000 800] + SymbolLine[2500 1000 2500 1500 800] + SymbolLine[0 4000 2500 1500 800] + SymbolLine[0 4000 0 5000 800] + SymbolLine[0 5000 2500 5000 800] +) +Symbol['[' 1200] +( + SymbolLine[0 1000 500 1000 800] + SymbolLine[0 1000 0 5000 800] + SymbolLine[0 5000 500 5000 800] +) +Symbol['\' 1200] +( + SymbolLine[0 1500 3000 4500 800] +) +Symbol[']' 1200] +( + SymbolLine[0 1000 500 1000 800] + SymbolLine[500 1000 500 5000 800] + SymbolLine[0 5000 500 5000 800] +) +Symbol['^' 1200] +( + SymbolLine[0 1500 500 1000 800] + SymbolLine[500 1000 1000 1500 800] +) +Symbol['_' 1200] +( + SymbolLine[0 5000 2000 5000 800] +) +Symbol['a' 1200] +( + SymbolLine[1500 3000 2000 3500 800] + SymbolLine[500 3000 1500 3000 800] + SymbolLine[0 3500 500 3000 800] + SymbolLine[0 3500 0 4500 800] + SymbolLine[0 4500 500 5000 800] + SymbolLine[2000 3000 2000 4500 800] + SymbolLine[2000 4500 2500 5000 800] + SymbolLine[500 5000 1500 5000 800] + SymbolLine[1500 5000 2000 4500 800] +) +Symbol['b' 1200] +( + SymbolLine[0 1000 0 5000 800] + SymbolLine[0 4500 500 5000 800] + SymbolLine[500 5000 1500 5000 800] + SymbolLine[1500 5000 2000 4500 800] + SymbolLine[2000 3500 2000 4500 800] + SymbolLine[1500 3000 2000 3500 800] + SymbolLine[500 3000 1500 3000 800] + SymbolLine[0 3500 500 3000 800] +) +Symbol['c' 1200] +( + SymbolLine[500 3000 2000 3000 800] + SymbolLine[0 3500 500 3000 800] + SymbolLine[0 3500 0 4500 800] + SymbolLine[0 4500 500 5000 800] + SymbolLine[500 5000 2000 5000 800] +) +Symbol['d' 1200] +( + SymbolLine[2000 1000 2000 5000 800] + SymbolLine[1500 5000 2000 4500 800] + SymbolLine[500 5000 1500 5000 800] + SymbolLine[0 4500 500 5000 800] + SymbolLine[0 3500 0 4500 800] + SymbolLine[0 3500 500 3000 800] + SymbolLine[500 3000 1500 3000 800] + SymbolLine[1500 3000 2000 3500 800] +) +Symbol['e' 1200] +( + SymbolLine[500 5000 2000 5000 800] + SymbolLine[0 4500 500 5000 800] + SymbolLine[0 3500 0 4500 800] + SymbolLine[0 3500 500 3000 800] + SymbolLine[500 3000 1500 3000 800] + SymbolLine[1500 3000 2000 3500 800] + SymbolLine[0 4000 2000 4000 800] + SymbolLine[2000 4000 2000 3500 800] +) +Symbol['f' 1000] +( + SymbolLine[500 1500 500 5000 800] + SymbolLine[500 1500 1000 1000 800] + SymbolLine[1000 1000 1500 1000 800] + SymbolLine[0 3000 1000 3000 800] +) +Symbol['g' 1200] +( + SymbolLine[1500 3000 2000 3500 800] + SymbolLine[500 3000 1500 3000 800] + SymbolLine[0 3500 500 3000 800] + SymbolLine[0 3500 0 4500 800] + SymbolLine[0 4500 500 5000 800] + SymbolLine[500 5000 1500 5000 800] + SymbolLine[1500 5000 2000 4500 800] + SymbolLine[0 6000 500 6500 800] + SymbolLine[500 6500 1500 6500 800] + SymbolLine[1500 6500 2000 6000 800] + SymbolLine[2000 3000 2000 6000 800] +) +Symbol['h' 1200] +( + SymbolLine[0 1000 0 5000 800] + SymbolLine[0 3500 500 3000 800] + SymbolLine[500 3000 1500 3000 800] + SymbolLine[1500 3000 2000 3500 800] + SymbolLine[2000 3500 2000 5000 800] +) +Symbol['i' 1000] +( + SymbolLine[0 2000 0 2500 800] + SymbolLine[0 3500 0 5000 800] +) +Symbol['j' 1000] +( + SymbolLine[500 2000 500 2500 800] + SymbolLine[500 3500 500 6000 800] + SymbolLine[0 6500 500 6000 800] +) +Symbol['k' 1200] +( + SymbolLine[0 1000 0 5000 800] + SymbolLine[0 3500 1500 5000 800] + SymbolLine[0 3500 1000 2500 800] +) +Symbol['l' 1000] +( + SymbolLine[0 1000 0 4500 800] + SymbolLine[0 4500 500 5000 800] +) +Symbol['m' 1200] +( + SymbolLine[500 3500 500 5000 800] + SymbolLine[500 3500 1000 3000 800] + SymbolLine[1000 3000 1500 3000 800] + SymbolLine[1500 3000 2000 3500 800] + SymbolLine[2000 3500 2000 5000 800] + SymbolLine[2000 3500 2500 3000 800] + SymbolLine[2500 3000 3000 3000 800] + SymbolLine[3000 3000 3500 3500 800] + SymbolLine[3500 3500 3500 5000 800] + SymbolLine[0 3000 500 3500 800] +) +Symbol['n' 1200] +( + SymbolLine[500 3500 500 5000 800] + SymbolLine[500 3500 1000 3000 800] + SymbolLine[1000 3000 1500 3000 800] + SymbolLine[1500 3000 2000 3500 800] + SymbolLine[2000 3500 2000 5000 800] + SymbolLine[0 3000 500 3500 800] +) +Symbol['o' 1200] +( + SymbolLine[0 3500 0 4500 800] + SymbolLine[0 3500 500 3000 800] + SymbolLine[500 3000 1500 3000 800] + SymbolLine[1500 3000 2000 3500 800] + SymbolLine[2000 3500 2000 4500 800] + SymbolLine[1500 5000 2000 4500 800] + SymbolLine[500 5000 1500 5000 800] + SymbolLine[0 4500 500 5000 800] +) +Symbol['p' 1200] +( + SymbolLine[500 3500 500 6500 800] + SymbolLine[0 3000 500 3500 800] + SymbolLine[500 3500 1000 3000 800] + SymbolLine[1000 3000 2000 3000 800] + SymbolLine[2000 3000 2500 3500 800] + SymbolLine[2500 3500 2500 4500 800] + SymbolLine[2000 5000 2500 4500 800] + SymbolLine[1000 5000 2000 5000 800] + SymbolLine[500 4500 1000 5000 800] +) +Symbol['q' 1200] +( + SymbolLine[2000 3500 2000 6500 800] + SymbolLine[1500 3000 2000 3500 800] + SymbolLine[500 3000 1500 3000 800] + SymbolLine[0 3500 500 3000 800] + SymbolLine[0 3500 0 4500 800] + SymbolLine[0 4500 500 5000 800] + SymbolLine[500 5000 1500 5000 800] + SymbolLine[1500 5000 2000 4500 800] +) +Symbol['r' 1200] +( + SymbolLine[500 3500 500 5000 800] + SymbolLine[500 3500 1000 3000 800] + SymbolLine[1000 3000 2000 3000 800] + SymbolLine[0 3000 500 3500 800] +) +Symbol['s' 1200] +( + SymbolLine[500 5000 2000 5000 800] + SymbolLine[2000 5000 2500 4500 800] + SymbolLine[2000 4000 2500 4500 800] + SymbolLine[500 4000 2000 4000 800] + SymbolLine[0 3500 500 4000 800] + SymbolLine[0 3500 500 3000 800] + SymbolLine[500 3000 2000 3000 800] + SymbolLine[2000 3000 2500 3500 800] + SymbolLine[0 4500 500 5000 800] +) +Symbol['t' 1000] +( + SymbolLine[500 1000 500 4500 800] + SymbolLine[500 4500 1000 5000 800] + SymbolLine[0 2500 1000 2500 800] +) +Symbol['u' 1200] +( + SymbolLine[0 3000 0 4500 800] + SymbolLine[0 4500 500 5000 800] + SymbolLine[500 5000 1500 5000 800] + SymbolLine[1500 5000 2000 4500 800] + SymbolLine[2000 3000 2000 4500 800] +) +Symbol['v' 1200] +( + SymbolLine[0 3000 0 4000 800] + SymbolLine[0 4000 1000 5000 800] + SymbolLine[1000 5000 2000 4000 800] + SymbolLine[2000 3000 2000 4000 800] +) +Symbol['w' 1200] +( + SymbolLine[0 3000 0 4500 800] + SymbolLine[0 4500 500 5000 800] + SymbolLine[500 5000 1000 5000 800] + SymbolLine[1000 5000 1500 4500 800] + SymbolLine[1500 3000 1500 4500 800] + SymbolLine[1500 4500 2000 5000 800] + SymbolLine[2000 5000 2500 5000 800] + SymbolLine[2500 5000 3000 4500 800] + SymbolLine[3000 3000 3000 4500 800] +) +Symbol['x' 1200] +( + SymbolLine[0 3000 2000 5000 800] + SymbolLine[0 5000 2000 3000 800] +) +Symbol['y' 1200] +( + SymbolLine[0 3000 0 4500 800] + SymbolLine[0 4500 500 5000 800] + SymbolLine[2000 3000 2000 6000 800] + SymbolLine[1500 6500 2000 6000 800] + SymbolLine[500 6500 1500 6500 800] + SymbolLine[0 6000 500 6500 800] + SymbolLine[500 5000 1500 5000 800] + SymbolLine[1500 5000 2000 4500 800] +) +Symbol['z' 1200] +( + SymbolLine[0 3000 2000 3000 800] + SymbolLine[0 5000 2000 3000 800] + SymbolLine[0 5000 2000 5000 800] +) +Symbol['{' 1200] +( + SymbolLine[500 1500 1000 1000 800] + SymbolLine[500 1500 500 2500 800] + SymbolLine[0 3000 500 2500 800] + SymbolLine[0 3000 500 3500 800] + SymbolLine[500 3500 500 4500 800] + SymbolLine[500 4500 1000 5000 800] +) +Symbol['|' 1200] +( + SymbolLine[0 1000 0 5000 800] +) +Symbol['}' 1200] +( + SymbolLine[0 1000 500 1500 800] + SymbolLine[500 1500 500 2500 800] + SymbolLine[500 2500 1000 3000 800] + SymbolLine[500 3500 1000 3000 800] + SymbolLine[500 3500 500 4500 800] + SymbolLine[0 5000 500 4500 800] +) +Symbol['~' 1200] +( + SymbolLine[0 3500 500 3000 800] + SymbolLine[500 3000 1000 3000 800] + SymbolLine[1000 3000 1500 3500 800] + SymbolLine[1500 3500 2000 3500 800] + SymbolLine[2000 3500 2500 3000 800] +) +Via[30000 20000 10000 2000 0 5000 "" ""] +Via[80000 20000 10000 2000 0 5000 "" ""] +Layer(1 "component") +( + Line[10000 20000 20000 20000 2000 2000 "clearline"] + Line[40000 20000 50000 20000 2000 2000 "clearline"] + Line[60000 20000 70000 20000 2000 2000 "clearline"] + Line[100000 20000 84848 11254 2000 2000 "clearline"] + Arc[30000 20000 10000 10000 2000 2000 270 -90 "clearline"] + Arc[30000 20000 10000 10000 2000 2000 270 90 "clearline"] + Arc[80000 20000 10000 10000 2000 2000 270 -29 "clearline"] + Arc[80000 20000 10000 10000 2000 2000 270 90 "clearline"] +) +Layer(2 "solder") +( +) +Layer(3 "GND") +( +) +Layer(4 "power") +( +) +Layer(5 "signal1") +( +) +Layer(6 "signal2") +( +) +Layer(7 "signal3") +( +) +Layer(8 "signal4") +( +) +Layer(9 "silk") +( +) +Layer(10 "silk") +( + Line[33000 20000 38000 20000 500 2000 "clearline"] + Line[40000 13000 40000 18000 500 2000 "clearline"] + Line[42000 20000 47000 20000 500 2000 "clearline"] + Line[40000 22000 40000 27000 500 2000 "clearline"] + Line[77848 11254 82848 11254 500 2000 "clearline"] + Line[84848 4254 84848 9254 500 2000 "clearline"] + Line[86848 11254 91848 11254 500 2000 "clearline"] + Line[84848 13254 84848 18254 500 2000 "clearline"] + Arc[40000 20000 2000 2000 500 2000 0 -90 "clearline"] + Arc[39999 20001 2001 2001 500 2000 270 -90 "clearline"] + Arc[40002 20002 1998 1998 500 2000 180 -90 "clearline"] + Arc[40002 19998 2002 2002 500 2000 90 -90 "clearline"] + Arc[84848 11254 2000 2000 500 2000 0 -90 "clearline"] + Arc[84847 11255 2001 2001 500 2000 270 -90 "clearline"] + Arc[84850 11256 1998 1998 500 2000 180 -90 "clearline"] + Arc[84850 11252 2002 2002 500 2000 90 -90 "clearline"] +) Index: trunk/doc-orig/puller.pdf =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: trunk/doc-orig/puller.pdf =================================================================== --- trunk/doc-orig/puller.pdf (nonexistent) +++ trunk/doc-orig/puller.pdf (revision 1037) Property changes on: trunk/doc-orig/puller.pdf ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: trunk/doc-orig/puller.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: trunk/doc-orig/puller.png =================================================================== --- trunk/doc-orig/puller.png (nonexistent) +++ trunk/doc-orig/puller.png (revision 1037) Property changes on: trunk/doc-orig/puller.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: trunk/doc-orig/refcard.pdf =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: trunk/doc-orig/refcard.pdf =================================================================== --- trunk/doc-orig/refcard.pdf (nonexistent) +++ trunk/doc-orig/refcard.pdf (revision 1037) Property changes on: trunk/doc-orig/refcard.pdf ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: trunk/doc-orig/refcard.tex =================================================================== --- trunk/doc-orig/refcard.tex (nonexistent) +++ trunk/doc-orig/refcard.tex (revision 1037) @@ -0,0 +1,258 @@ +% $Id$ +% +% COPYRIGHT +% +% PCB, interactive printed circuit board design +% Copyright (C) 1994, 1995 Thomas Nau +% Copyright (C) 1998, 1999, 2000, 2001 harry eaton +% Copyright (C) 2009 Chitlesh Goorah +% +% This program is free software; you can redistribute it and/or modify +% it under the terms of the GNU General Public License as published by +% the Free Software Foundation; either version 2 of the License, or +% (at your option) any later version. +% +% This program is distributed in the hope that it will be useful, +% but WITHOUT ANY WARRANTY; without even the implied warranty of +% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +% GNU General Public License for more details. +% +% You should have received a copy of the GNU General Public License +% along with this program; if not, write to the Free Software +% Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +% +% Contact addresses for paper mail and Email: +% Thomas Nau, Schlehenweg 15, 88471 Baustetten, Germany +% Thomas.Nau@rz.uni-ulm.de + + +\documentclass[11pt,landscape]{article} +\usepackage{multicol} +\usepackage{calc} +\usepackage{ifthen} +\usepackage[landscape,left=2.5cm,top=2cm,right=2cm,bottom=2cm,nohead]{geometry} + +% Turn off header and footer +\pagestyle{empty} + +% Redefine section commands to use less space +\makeatletter +\renewcommand{\section}{\@startsection{section}{1}{0mm}% + {-1ex plus -.5ex minus -.2ex}% + {0.5ex plus .2ex}%x + {\normalfont\large\bfseries}} +\renewcommand{\subsection}{\@startsection{subsection}{2}{0mm}% + {-1explus -.5ex minus -.2ex}% + {0.5ex plus .2ex}% + {\normalfont\normalsize\bfseries}} +\renewcommand{\subsubsection}{\@startsection{subsubsection}{3}{0mm}% + {-1ex plus -.5ex minus -.2ex}% + {1ex plus .2ex}% + {\normalfont\small\bfseries}} +\makeatother + +% Define BibTeX command +\def\BibTeX{{\rm B\kern-.05em{\sc i\kern-.025em b}\kern-.08em + T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}} + +% Don't print section numbers +\setcounter{secnumdepth}{0} + + +\setlength{\parindent}{0pt} +\setlength{\parskip}{0pt plus 0.5ex} + +%------------------------------------------------------------------ +% some new commands to define the modifier keys +% +\newcommand{\Shift}{{\it [S]}} +\newcommand{\Ctrl}{{\it [C]}} +\newcommand{\Mod}{{\it [M]}} +\newcommand{\Btn}{{\it Btn}} +\newcommand{\Fun}{{\it F}} + +\begin{document} +\raggedright +\footnotesize +\begin{multicols}{3} + + +% multicol parameters +% These lengths are set only within the two main columns +%\setlength{\columnseprule}{0.25pt} +\setlength{\premulticols}{1pt} +\setlength{\postmulticols}{1pt} +\setlength{\multicolsep}{1pt} +\setlength{\columnsep}{2pt} + +\begin{center} + \Large{\textbf{PCB Command reference}} + \footnote{http://pcb.gpleda.org/index.html} + \footnote{Obviously \Shift, \Ctrl, \Mod, \Fun \space and \Btn \space mean the shift, + control, modifier1 (BTNMOD for buttons), function key and mouse button.} \\ +\end{center} + +\section{Misc operations} +\begin{tabular}{@{}ll@{}} +backspace & remove object \\ +\Shift\Ctrl\Btn1 & remove object \\ +scroll wheel & vertical pan \\ +\Shift scroll wheel & horizontal pan \\ +\Btn1 & current mode action\\ +u & undo operation \\ +\Shift r & redo operation \\ +\Shift\Ctrl u & clear undo-list \\ +tab & switch viewing side \\ +cursor key & move crosshair 1 grid\\ +\Shift cursor key! & move crosshair 10 grid\\ +\end{tabular} + + +\section{Connections} +\begin{tabular}{@{}ll@{}} +\Shift f & reset found connections \\ +f & find connections \\ +\Shift backspace & remove connections \\ +\end{tabular} + + +\section{User (:) commands} +\begin{tabular}{@{}ll@{}} +:DRC() & check layout for rule violations \\ +:l [file] & load data file \\ +:le [file] & load element to buffer \\ +:m [file] & load layout to buffer \\ +:q & quit application \\ +:rn [file] & load netlist \\ +:s [file] & save data as file \\ +\end{tabular} + +\section{Display} +\begin{tabular}{@{}ll@{}} +c & center display \\ +g & increase grid spacing \\ +\Shift g & decrease grid spacing \\ +\Ctrl m & mark location \\ +r & clear and redraw output \\ +z & zoom in \\ +\Shift z & zoom out \\ +v & zoom extents \\ +\Shift\Btn3 & temporary zoom extents \\ +\end{tabular} + + +\section{Selections} +\begin{tabular}{@{}ll@{}} +\Btn2 & select/deselect object \\ +\Shift\Btn2 & toggle object to selection \\ +drag \Btn2 & select only objects in box \\ +drag \Shift\Btn2 & add box to selection \\ +\Shift m & move selected to current layer \\ +\end{tabular} + + +\section{Copy and move} +\begin{tabular}{@{}ll@{}} +drag \Btn2 & move object or selection\\ +drag \Mod\Btn2 & copy object \\ +drag \Shift\Mod\Btn2 & override rubberband \& move \\ +m & move to current layer \\ +\end{tabular} + + +\section{Pastebuffer} +\begin{tabular}{@{}ll@{}} +\Ctrl x & copy selected objects to buffer \\ + & and enter pastebuffer mode \\ +\Shift \Ctrl x & cut selected objects to buffer \\ + & and enter pastebuffer mode \\ +\Btn1 & in pastebuffer mode copy to layout \\ +\Shift \Fun7 & rotate 90 degree cc \\ +\Ctrl 1$\cdots$5 & select buffer \# 1$\cdots$5 \\ +\end{tabular} + + +\section{Sizing} +\begin{tabular}{@{}ll@{}} +s & increase size of TLAPV\footnotemark\\ +\Shift s & decrease size of TLAPV\\ +\Mod s & increase drill size of PV \\ +\Shift\Mod s & decrease drill size of PV \\ +k & increase clearance of LAPV\\ +\Shift\ k & decrease clearance of LAPV\\ +\end{tabular} +\footnotetext{TLAPV: text, line, arc, pin or via} + + +\section{Element} +\begin{tabular}{@{}ll@{}} +d & display pinout \\ +\Shift d & open pinout window \\ +h & hide/show element name \\ +n & change element name \\ +\end{tabular} + + +\section{Pin/pad} +\begin{tabular}{@{}ll@{}} +n & change name \\ +q & toggle square flag \\ +\end{tabular} + + +\section{Via} +\begin{tabular}{@{}ll@{}} +\Fun1 & enter via-mode \\ +\Ctrl v & increase initial size \\ +\Shift \Ctrl v & decrease initial size \\ +\Mod v & inc. initial drilling hole \\ +\Shift\Mod v & dec. initial drilling hole \\ +\Ctrl h & convert via to mounting hole \\ +\end{tabular} + + +\section{Lines and arcs} +\begin{tabular}{@{}ll@{}} +\Fun2 & enter line mode \\ +\Fun3 & enter arc mode \\ +l & increase initial line size \\ +\Shift l & decrease initial line size \\ +period & toggle 45 degree enforcement \\ +/ & cycle multiline mode \\ +\Shift & override multiline mode \\ +\end{tabular} + + +\section{Polygon} +\begin{tabular}{@{}ll@{}} +\Fun5 & enter rectangle-mode \\ +\Fun6 & enter polygon-mode \\ +\Shift p & close path \\ +insert & enter insert point mode \\ +\end{tabular} + + +\section{Text} +\begin{tabular}{@{}ll@{}} +\Fun4 & enter text-mode \\ +n & edit string \\ +t & increase initial text size \\ +\Shift t & decrease initial text size \\ +\end{tabular} + + +\section{Rats nest} +\begin{tabular}{@{}ll@{}} +w & add all rats \\ +\Shift w & add rats to selected pins/pads \\ +e & delete all rats \\ +\Shift e & delete selected rats \\ +o & optimize all rats \\ +\Shift o & optimize selected rats \\ +\end{tabular} + + +\end{multicols} + + +\end{document} Index: trunk/doc-orig/stamp-vti =================================================================== --- trunk/doc-orig/stamp-vti (nonexistent) +++ trunk/doc-orig/stamp-vti (revision 1037) @@ -0,0 +1,4 @@ +@set UPDATED 17 September 2011 +@set UPDATED-MONTH September 2011 +@set EDITION 20110918 +@set VERSION 20110918 Index: trunk/doc-orig/texinfo.tex =================================================================== --- trunk/doc-orig/texinfo.tex (nonexistent) +++ trunk/doc-orig/texinfo.tex (revision 1037) @@ -0,0 +1,7086 @@ +% texinfo.tex -- TeX macros to handle Texinfo files. +% +% Load plain if necessary, i.e., if running under initex. +\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi +% +\def\texinfoversion{2005-01-30.17} +% +% Copyright (C) 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995, +% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software +% Foundation, Inc. +% +% This texinfo.tex file is free software; you can redistribute it and/or +% modify it under the terms of the GNU General Public License as +% published by the Free Software Foundation; either version 2, or (at +% your option) any later version. +% +% This texinfo.tex file is distributed in the hope that it will be +% useful, but WITHOUT ANY WARRANTY; without even the implied warranty +% of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +% General Public License for more details. +% +% You should have received a copy of the GNU General Public License +% along with this texinfo.tex file; see the file COPYING. If not, write +% to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +% Boston, MA 02111-1307, USA. +% +% As a special exception, when this file is read by TeX when processing +% a Texinfo source document, you may use the result without +% restriction. (This has been our intent since Texinfo was invented.) +% +% Please try the latest version of texinfo.tex before submitting bug +% reports; you can get the latest version from: +% http://www.gnu.org/software/texinfo/ (the Texinfo home page), or +% ftp://tug.org/tex/texinfo.tex +% (and all CTAN mirrors, see http://www.ctan.org). +% The texinfo.tex in any given distribution could well be out +% of date, so if that's what you're using, please check. +% +% Send bug reports to bug-texinfo@gnu.org. Please include including a +% complete document in each bug report with which we can reproduce the +% problem. Patches are, of course, greatly appreciated. +% +% To process a Texinfo manual with TeX, it's most reliable to use the +% texi2dvi shell script that comes with the distribution. For a simple +% manual foo.texi, however, you can get away with this: +% tex foo.texi +% texindex foo.?? +% tex foo.texi +% tex foo.texi +% dvips foo.dvi -o # or whatever; this makes foo.ps. +% The extra TeX runs get the cross-reference information correct. +% Sometimes one run after texindex suffices, and sometimes you need more +% than two; texi2dvi does it as many times as necessary. +% +% It is possible to adapt texinfo.tex for other languages, to some +% extent. You can get the existing language-specific files from the +% full Texinfo distribution. +% +% The GNU Texinfo home page is http://www.gnu.org/software/texinfo. + + +\message{Loading texinfo [version \texinfoversion]:} + +% If in a .fmt file, print the version number +% and turn on active characters that we couldn't do earlier because +% they might have appeared in the input file name. +\everyjob{\message{[Texinfo version \texinfoversion]}% + \catcode`+=\active \catcode`\_=\active} + +\message{Basics,} +\chardef\other=12 + +% We never want plain's \outer definition of \+ in Texinfo. +% For @tex, we can use \tabalign. +\let\+ = \relax + +% Save some plain tex macros whose names we will redefine. +\let\ptexb=\b +\let\ptexbullet=\bullet +\let\ptexc=\c +\let\ptexcomma=\, +\let\ptexdot=\. +\let\ptexdots=\dots +\let\ptexend=\end +\let\ptexequiv=\equiv +\let\ptexexclam=\! +\let\ptexfootnote=\footnote +\let\ptexgtr=> +\let\ptexhat=^ +\let\ptexi=\i +\let\ptexindent=\indent +\let\ptexinsert=\insert +\let\ptexlbrace=\{ +\let\ptexless=< +\let\ptexnewwrite\newwrite +\let\ptexnoindent=\noindent +\let\ptexplus=+ +\let\ptexrbrace=\} +\let\ptexslash=\/ +\let\ptexstar=\* +\let\ptext=\t + +% If this character appears in an error message or help string, it +% starts a new line in the output. +\newlinechar = `^^J + +% Use TeX 3.0's \inputlineno to get the line number, for better error +% messages, but if we're using an old version of TeX, don't do anything. +% +\ifx\inputlineno\thisisundefined + \let\linenumber = \empty % Pre-3.0. +\else + \def\linenumber{l.\the\inputlineno:\space} +\fi + +% Set up fixed words for English if not already set. +\ifx\putwordAppendix\undefined \gdef\putwordAppendix{Appendix}\fi +\ifx\putwordChapter\undefined \gdef\putwordChapter{Chapter}\fi +\ifx\putwordfile\undefined \gdef\putwordfile{file}\fi +\ifx\putwordin\undefined \gdef\putwordin{in}\fi +\ifx\putwordIndexIsEmpty\undefined \gdef\putwordIndexIsEmpty{(Index is empty)}\fi +\ifx\putwordIndexNonexistent\undefined \gdef\putwordIndexNonexistent{(Index is nonexistent)}\fi +\ifx\putwordInfo\undefined \gdef\putwordInfo{Info}\fi +\ifx\putwordInstanceVariableof\undefined \gdef\putwordInstanceVariableof{Instance Variable of}\fi +\ifx\putwordMethodon\undefined \gdef\putwordMethodon{Method on}\fi +\ifx\putwordNoTitle\undefined \gdef\putwordNoTitle{No Title}\fi +\ifx\putwordof\undefined \gdef\putwordof{of}\fi +\ifx\putwordon\undefined \gdef\putwordon{on}\fi +\ifx\putwordpage\undefined \gdef\putwordpage{page}\fi +\ifx\putwordsection\undefined \gdef\putwordsection{section}\fi +\ifx\putwordSection\undefined \gdef\putwordSection{Section}\fi +\ifx\putwordsee\undefined \gdef\putwordsee{see}\fi +\ifx\putwordSee\undefined \gdef\putwordSee{See}\fi +\ifx\putwordShortTOC\undefined \gdef\putwordShortTOC{Short Contents}\fi +\ifx\putwordTOC\undefined \gdef\putwordTOC{Table of Contents}\fi +% +\ifx\putwordMJan\undefined \gdef\putwordMJan{January}\fi +\ifx\putwordMFeb\undefined \gdef\putwordMFeb{February}\fi +\ifx\putwordMMar\undefined \gdef\putwordMMar{March}\fi +\ifx\putwordMApr\undefined \gdef\putwordMApr{April}\fi +\ifx\putwordMMay\undefined \gdef\putwordMMay{May}\fi +\ifx\putwordMJun\undefined \gdef\putwordMJun{June}\fi +\ifx\putwordMJul\undefined \gdef\putwordMJul{July}\fi +\ifx\putwordMAug\undefined \gdef\putwordMAug{August}\fi +\ifx\putwordMSep\undefined \gdef\putwordMSep{September}\fi +\ifx\putwordMOct\undefined \gdef\putwordMOct{October}\fi +\ifx\putwordMNov\undefined \gdef\putwordMNov{November}\fi +\ifx\putwordMDec\undefined \gdef\putwordMDec{December}\fi +% +\ifx\putwordDefmac\undefined \gdef\putwordDefmac{Macro}\fi +\ifx\putwordDefspec\undefined \gdef\putwordDefspec{Special Form}\fi +\ifx\putwordDefvar\undefined \gdef\putwordDefvar{Variable}\fi +\ifx\putwordDefopt\undefined \gdef\putwordDefopt{User Option}\fi +\ifx\putwordDeffunc\undefined \gdef\putwordDeffunc{Function}\fi + +% In some macros, we cannot use the `\? notation---the left quote is +% in some cases the escape char. +\chardef\colonChar = `\: +\chardef\commaChar = `\, +\chardef\dotChar = `\. +\chardef\exclamChar= `\! +\chardef\questChar = `\? +\chardef\semiChar = `\; +\chardef\underChar = `\_ + +\chardef\spaceChar = `\ % +\chardef\spacecat = 10 +\def\spaceisspace{\catcode\spaceChar=\spacecat} + +% Ignore a token. +% +\def\gobble#1{} + +% The following is used inside several \edef's. +\def\makecsname#1{\expandafter\noexpand\csname#1\endcsname} + +% Hyphenation fixes. +\hyphenation{ + Flor-i-da Ghost-script Ghost-view Mac-OS Post-Script + ap-pen-dix bit-map bit-maps + data-base data-bases eshell fall-ing half-way long-est man-u-script + man-u-scripts mini-buf-fer mini-buf-fers over-view par-a-digm + par-a-digms rath-er rec-tan-gu-lar ro-bot-ics se-vere-ly set-up spa-ces + spell-ing spell-ings + stand-alone strong-est time-stamp time-stamps which-ever white-space + wide-spread wrap-around +} + +% Margin to add to right of even pages, to left of odd pages. +\newdimen\bindingoffset +\newdimen\normaloffset +\newdimen\pagewidth \newdimen\pageheight + +% For a final copy, take out the rectangles +% that mark overfull boxes (in case you have decided +% that the text looks ok even though it passes the margin). +% +\def\finalout{\overfullrule=0pt} + +% @| inserts a changebar to the left of the current line. It should +% surround any changed text. This approach does *not* work if the +% change spans more than two lines of output. To handle that, we would +% have adopt a much more difficult approach (putting marks into the main +% vertical list for the beginning and end of each change). +% +\def\|{% + % \vadjust can only be used in horizontal mode. + \leavevmode + % + % Append this vertical mode material after the current line in the output. + \vadjust{% + % We want to insert a rule with the height and depth of the current + % leading; that is exactly what \strutbox is supposed to record. + \vskip-\baselineskip + % + % \vadjust-items are inserted at the left edge of the type. So + % the \llap here moves out into the left-hand margin. + \llap{% + % + % For a thicker or thinner bar, change the `1pt'. + \vrule height\baselineskip width1pt + % + % This is the space between the bar and the text. + \hskip 12pt + }% + }% +} + +% Sometimes it is convenient to have everything in the transcript file +% and nothing on the terminal. We don't just call \tracingall here, +% since that produces some useless output on the terminal. We also make +% some effort to order the tracing commands to reduce output in the log +% file; cf. trace.sty in LaTeX. +% +\def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}% +\def\loggingall{% + \tracingstats2 + \tracingpages1 + \tracinglostchars2 % 2 gives us more in etex + \tracingparagraphs1 + \tracingoutput1 + \tracingmacros2 + \tracingrestores1 + \showboxbreadth\maxdimen \showboxdepth\maxdimen + \ifx\eTeXversion\undefined\else % etex gives us more logging + \tracingscantokens1 + \tracingifs1 + \tracinggroups1 + \tracingnesting2 + \tracingassigns1 + \fi + \tracingcommands3 % 3 gives us more in etex + \errorcontextlines16 +}% + +% add check for \lastpenalty to plain's definitions. If the last thing +% we did was a \nobreak, we don't want to insert more space. +% +\def\smallbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\smallskipamount + \removelastskip\penalty-50\smallskip\fi\fi} +\def\medbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\medskipamount + \removelastskip\penalty-100\medskip\fi\fi} +\def\bigbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\bigskipamount + \removelastskip\penalty-200\bigskip\fi\fi} + +% For @cropmarks command. +% Do @cropmarks to get crop marks. +% +\newif\ifcropmarks +\let\cropmarks = \cropmarkstrue +% +% Dimensions to add cropmarks at corners. +% Added by P. A. MacKay, 12 Nov. 1986 +% +\newdimen\outerhsize \newdimen\outervsize % set by the paper size routines +\newdimen\cornerlong \cornerlong=1pc +\newdimen\cornerthick \cornerthick=.3pt +\newdimen\topandbottommargin \topandbottommargin=.75in + +% Main output routine. +\chardef\PAGE = 255 +\output = {\onepageout{\pagecontents\PAGE}} + +\newbox\headlinebox +\newbox\footlinebox + +% \onepageout takes a vbox as an argument. Note that \pagecontents +% does insertions, but you have to call it yourself. +\def\onepageout#1{% + \ifcropmarks \hoffset=0pt \else \hoffset=\normaloffset \fi + % + \ifodd\pageno \advance\hoffset by \bindingoffset + \else \advance\hoffset by -\bindingoffset\fi + % + % Do this outside of the \shipout so @code etc. will be expanded in + % the headline as they should be, not taken literally (outputting ''code). + \setbox\headlinebox = \vbox{\let\hsize=\pagewidth \makeheadline}% + \setbox\footlinebox = \vbox{\let\hsize=\pagewidth \makefootline}% + % + {% + % Have to do this stuff outside the \shipout because we want it to + % take effect in \write's, yet the group defined by the \vbox ends + % before the \shipout runs. + % + \escapechar = `\\ % use backslash in output files. + \indexdummies % don't expand commands in the output. + \normalturnoffactive % \ in index entries must not stay \, e.g., if + % the page break happens to be in the middle of an example. + \shipout\vbox{% + % Do this early so pdf references go to the beginning of the page. + \ifpdfmakepagedest \pdfdest name{\the\pageno} xyz\fi + % + \ifcropmarks \vbox to \outervsize\bgroup + \hsize = \outerhsize + \vskip-\topandbottommargin + \vtop to0pt{% + \line{\ewtop\hfil\ewtop}% + \nointerlineskip + \line{% + \vbox{\moveleft\cornerthick\nstop}% + \hfill + \vbox{\moveright\cornerthick\nstop}% + }% + \vss}% + \vskip\topandbottommargin + \line\bgroup + \hfil % center the page within the outer (page) hsize. + \ifodd\pageno\hskip\bindingoffset\fi + \vbox\bgroup + \fi + % + \unvbox\headlinebox + \pagebody{#1}% + \ifdim\ht\footlinebox > 0pt + % Only leave this space if the footline is nonempty. + % (We lessened \vsize for it in \oddfootingxxx.) + % The \baselineskip=24pt in plain's \makefootline has no effect. + \vskip 2\baselineskip + \unvbox\footlinebox + \fi + % + \ifcropmarks + \egroup % end of \vbox\bgroup + \hfil\egroup % end of (centering) \line\bgroup + \vskip\topandbottommargin plus1fill minus1fill + \boxmaxdepth = \cornerthick + \vbox to0pt{\vss + \line{% + \vbox{\moveleft\cornerthick\nsbot}% + \hfill + \vbox{\moveright\cornerthick\nsbot}% + }% + \nointerlineskip + \line{\ewbot\hfil\ewbot}% + }% + \egroup % \vbox from first cropmarks clause + \fi + }% end of \shipout\vbox + }% end of group with \normalturnoffactive + \advancepageno + \ifnum\outputpenalty>-20000 \else\dosupereject\fi +} + +\newinsert\margin \dimen\margin=\maxdimen + +\def\pagebody#1{\vbox to\pageheight{\boxmaxdepth=\maxdepth #1}} +{\catcode`\@ =11 +\gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi +% marginal hacks, juha@viisa.uucp (Juha Takala) +\ifvoid\margin\else % marginal info is present + \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi +\dimen@=\dp#1 \unvbox#1 +\ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi +\ifr@ggedbottom \kern-\dimen@ \vfil \fi} +} + +% Here are the rules for the cropmarks. Note that they are +% offset so that the space between them is truly \outerhsize or \outervsize +% (P. A. MacKay, 12 November, 1986) +% +\def\ewtop{\vrule height\cornerthick depth0pt width\cornerlong} +\def\nstop{\vbox + {\hrule height\cornerthick depth\cornerlong width\cornerthick}} +\def\ewbot{\vrule height0pt depth\cornerthick width\cornerlong} +\def\nsbot{\vbox + {\hrule height\cornerlong depth\cornerthick width\cornerthick}} + +% Parse an argument, then pass it to #1. The argument is the rest of +% the input line (except we remove a trailing comment). #1 should be a +% macro which expects an ordinary undelimited TeX argument. +% +\def\parsearg{\parseargusing{}} +\def\parseargusing#1#2{% + \def\next{#2}% + \begingroup + \obeylines + \spaceisspace + #1% + \parseargline\empty% Insert the \empty token, see \finishparsearg below. +} + +{\obeylines % + \gdef\parseargline#1^^M{% + \endgroup % End of the group started in \parsearg. + \argremovecomment #1\comment\ArgTerm% + }% +} + +% First remove any @comment, then any @c comment. +\def\argremovecomment#1\comment#2\ArgTerm{\argremovec #1\c\ArgTerm} +\def\argremovec#1\c#2\ArgTerm{\argcheckspaces#1\^^M\ArgTerm} + +% Each occurence of `\^^M' or `\^^M' is replaced by a single space. +% +% \argremovec might leave us with trailing space, e.g., +% @end itemize @c foo +% This space token undergoes the same procedure and is eventually removed +% by \finishparsearg. +% +\def\argcheckspaces#1\^^M{\argcheckspacesX#1\^^M \^^M} +\def\argcheckspacesX#1 \^^M{\argcheckspacesY#1\^^M} +\def\argcheckspacesY#1\^^M#2\^^M#3\ArgTerm{% + \def\temp{#3}% + \ifx\temp\empty + % We cannot use \next here, as it holds the macro to run; + % thus we reuse \temp. + \let\temp\finishparsearg + \else + \let\temp\argcheckspaces + \fi + % Put the space token in: + \temp#1 #3\ArgTerm +} + +% If a _delimited_ argument is enclosed in braces, they get stripped; so +% to get _exactly_ the rest of the line, we had to prevent such situation. +% We prepended an \empty token at the very beginning and we expand it now, +% just before passing the control to \next. +% (Similarily, we have to think about #3 of \argcheckspacesY above: it is +% either the null string, or it ends with \^^M---thus there is no danger +% that a pair of braces would be stripped. +% +% But first, we have to remove the trailing space token. +% +\def\finishparsearg#1 \ArgTerm{\expandafter\next\expandafter{#1}} + +% \parseargdef\foo{...} +% is roughly equivalent to +% \def\foo{\parsearg\Xfoo} +% \def\Xfoo#1{...} +% +% Actually, I use \csname\string\foo\endcsname, ie. \\foo, as it is my +% favourite TeX trick. --kasal, 16nov03 + +\def\parseargdef#1{% + \expandafter \doparseargdef \csname\string#1\endcsname #1% +} +\def\doparseargdef#1#2{% + \def#2{\parsearg#1}% + \def#1##1% +} + +% Several utility definitions with active space: +{ + \obeyspaces + \gdef\obeyedspace{ } + + % Make each space character in the input produce a normal interword + % space in the output. Don't allow a line break at this space, as this + % is used only in environments like @example, where each line of input + % should produce a line of output anyway. + % + \gdef\sepspaces{\obeyspaces\let =\tie} + + % If an index command is used in an @example environment, any spaces + % therein should become regular spaces in the raw index file, not the + % expansion of \tie (\leavevmode \penalty \@M \ ). + \gdef\unsepspaces{\let =\space} +} + + +\def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next} + +% Define the framework for environments in texinfo.tex. It's used like this: +% +% \envdef\foo{...} +% \def\Efoo{...} +% +% It's the responsibility of \envdef to insert \begingroup before the +% actual body; @end closes the group after calling \Efoo. \envdef also +% defines \thisenv, so the current environment is known; @end checks +% whether the environment name matches. The \checkenv macro can also be +% used to check whether the current environment is the one expected. +% +% Non-false conditionals (@iftex, @ifset) don't fit into this, so they +% are not treated as enviroments; they don't open a group. (The +% implementation of @end takes care not to call \endgroup in this +% special case.) + + +% At runtime, environments start with this: +\def\startenvironment#1{\begingroup\def\thisenv{#1}} +% initialize +\let\thisenv\empty + +% ... but they get defined via ``\envdef\foo{...}'': +\long\def\envdef#1#2{\def#1{\startenvironment#1#2}} +\def\envparseargdef#1#2{\parseargdef#1{\startenvironment#1#2}} + +% Check whether we're in the right environment: +\def\checkenv#1{% + \def\temp{#1}% + \ifx\thisenv\temp + \else + \badenverr + \fi +} + +% Evironment mismatch, #1 expected: +\def\badenverr{% + \errhelp = \EMsimple + \errmessage{This command can appear only \inenvironment\temp, + not \inenvironment\thisenv}% +} +\def\inenvironment#1{% + \ifx#1\empty + out of any environment% + \else + in environment \expandafter\string#1% + \fi +} + +% @end foo executes the definition of \Efoo. +% But first, it executes a specialized version of \checkenv +% +\parseargdef\end{% + \if 1\csname iscond.#1\endcsname + \else + % The general wording of \badenverr may not be ideal, but... --kasal, 06nov03 + \expandafter\checkenv\csname#1\endcsname + \csname E#1\endcsname + \endgroup + \fi +} + +\newhelp\EMsimple{Press RETURN to continue.} + + +%% Simple single-character @ commands + +% @@ prints an @ +% Kludge this until the fonts are right (grr). +\def\@{{\tt\char64}} + +% This is turned off because it was never documented +% and you can use @w{...} around a quote to suppress ligatures. +%% Define @` and @' to be the same as ` and ' +%% but suppressing ligatures. +%\def\`{{`}} +%\def\'{{'}} + +% Used to generate quoted braces. +\def\mylbrace {{\tt\char123}} +\def\myrbrace {{\tt\char125}} +\let\{=\mylbrace +\let\}=\myrbrace +\begingroup + % Definitions to produce \{ and \} commands for indices, + % and @{ and @} for the aux file. + \catcode`\{ = \other \catcode`\} = \other + \catcode`\[ = 1 \catcode`\] = 2 + \catcode`\! = 0 \catcode`\\ = \other + !gdef!lbracecmd[\{]% + !gdef!rbracecmd[\}]% + !gdef!lbraceatcmd[@{]% + !gdef!rbraceatcmd[@}]% +!endgroup + +% @comma{} to avoid , parsing problems. +\let\comma = , + +% Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent +% Others are defined by plain TeX: @` @' @" @^ @~ @= @u @v @H. +\let\, = \c +\let\dotaccent = \. +\def\ringaccent#1{{\accent23 #1}} +\let\tieaccent = \t +\let\ubaraccent = \b +\let\udotaccent = \d + +% Other special characters: @questiondown @exclamdown @ordf @ordm +% Plain TeX defines: @AA @AE @O @OE @L (plus lowercase versions) @ss. +\def\questiondown{?`} +\def\exclamdown{!`} +\def\ordf{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{a}}} +\def\ordm{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{o}}} + +% Dotless i and dotless j, used for accents. +\def\imacro{i} +\def\jmacro{j} +\def\dotless#1{% + \def\temp{#1}% + \ifx\temp\imacro \ptexi + \else\ifx\temp\jmacro \j + \else \errmessage{@dotless can be used only with i or j}% + \fi\fi +} + +% The \TeX{} logo, as in plain, but resetting the spacing so that a +% period following counts as ending a sentence. (Idea found in latex.) +% +\edef\TeX{\TeX \spacefactor=1000 } + +% @LaTeX{} logo. Not quite the same results as the definition in +% latex.ltx, since we use a different font for the raised A; it's most +% convenient for us to use an explicitly smaller font, rather than using +% the \scriptstyle font (since we don't reset \scriptstyle and +% \scriptscriptstyle). +% +\def\LaTeX{% + L\kern-.36em + {\setbox0=\hbox{T}% + \vbox to \ht0{\hbox{\selectfonts\lllsize A}\vss}}% + \kern-.15em + \TeX +} + +% Be sure we're in horizontal mode when doing a tie, since we make space +% equivalent to this in @example-like environments. Otherwise, a space +% at the beginning of a line will start with \penalty -- and +% since \penalty is valid in vertical mode, we'd end up putting the +% penalty on the vertical list instead of in the new paragraph. +{\catcode`@ = 11 + % Avoid using \@M directly, because that causes trouble + % if the definition is written into an index file. + \global\let\tiepenalty = \@M + \gdef\tie{\leavevmode\penalty\tiepenalty\ } +} + +% @: forces normal size whitespace following. +\def\:{\spacefactor=1000 } + +% @* forces a line break. +\def\*{\hfil\break\hbox{}\ignorespaces} + +% @/ allows a line break. +\let\/=\allowbreak + +% @. is an end-of-sentence period. +\def\.{.\spacefactor=3000 } + +% @! is an end-of-sentence bang. +\def\!{!\spacefactor=3000 } + +% @? is an end-of-sentence query. +\def\?{?\spacefactor=3000 } + +% @w prevents a word break. Without the \leavevmode, @w at the +% beginning of a paragraph, when TeX is still in vertical mode, would +% produce a whole line of output instead of starting the paragraph. +\def\w#1{\leavevmode\hbox{#1}} + +% @group ... @end group forces ... to be all on one page, by enclosing +% it in a TeX vbox. We use \vtop instead of \vbox to construct the box +% to keep its height that of a normal line. According to the rules for +% \topskip (p.114 of the TeXbook), the glue inserted is +% max (\topskip - \ht (first item), 0). If that height is large, +% therefore, no glue is inserted, and the space between the headline and +% the text is small, which looks bad. +% +% Another complication is that the group might be very large. This can +% cause the glue on the previous page to be unduly stretched, because it +% does not have much material. In this case, it's better to add an +% explicit \vfill so that the extra space is at the bottom. The +% threshold for doing this is if the group is more than \vfilllimit +% percent of a page (\vfilllimit can be changed inside of @tex). +% +\newbox\groupbox +\def\vfilllimit{0.7} +% +\envdef\group{% + \ifnum\catcode`\^^M=\active \else + \errhelp = \groupinvalidhelp + \errmessage{@group invalid in context where filling is enabled}% + \fi + \startsavinginserts + % + \setbox\groupbox = \vtop\bgroup + % Do @comment since we are called inside an environment such as + % @example, where each end-of-line in the input causes an + % end-of-line in the output. We don't want the end-of-line after + % the `@group' to put extra space in the output. Since @group + % should appear on a line by itself (according to the Texinfo + % manual), we don't worry about eating any user text. + \comment +} +% +% The \vtop produces a box with normal height and large depth; thus, TeX puts +% \baselineskip glue before it, and (when the next line of text is done) +% \lineskip glue after it. Thus, space below is not quite equal to space +% above. But it's pretty close. +\def\Egroup{% + % To get correct interline space between the last line of the group + % and the first line afterwards, we have to propagate \prevdepth. + \endgraf % Not \par, as it may have been set to \lisppar. + \global\dimen1 = \prevdepth + \egroup % End the \vtop. + % \dimen0 is the vertical size of the group's box. + \dimen0 = \ht\groupbox \advance\dimen0 by \dp\groupbox + % \dimen2 is how much space is left on the page (more or less). + \dimen2 = \pageheight \advance\dimen2 by -\pagetotal + % if the group doesn't fit on the current page, and it's a big big + % group, force a page break. + \ifdim \dimen0 > \dimen2 + \ifdim \pagetotal < \vfilllimit\pageheight + \page + \fi + \fi + \box\groupbox + \prevdepth = \dimen1 + \checkinserts +} +% +% TeX puts in an \escapechar (i.e., `@') at the beginning of the help +% message, so this ends up printing `@group can only ...'. +% +\newhelp\groupinvalidhelp{% +group can only be used in environments such as @example,^^J% +where each line of input produces a line of output.} + +% @need space-in-mils +% forces a page break if there is not space-in-mils remaining. + +\newdimen\mil \mil=0.001in + +% Old definition--didn't work. +%\parseargdef\need{\par % +%% This method tries to make TeX break the page naturally +%% if the depth of the box does not fit. +%{\baselineskip=0pt% +%\vtop to #1\mil{\vfil}\kern -#1\mil\nobreak +%\prevdepth=-1000pt +%}} + +\parseargdef\need{% + % Ensure vertical mode, so we don't make a big box in the middle of a + % paragraph. + \par + % + % If the @need value is less than one line space, it's useless. + \dimen0 = #1\mil + \dimen2 = \ht\strutbox + \advance\dimen2 by \dp\strutbox + \ifdim\dimen0 > \dimen2 + % + % Do a \strut just to make the height of this box be normal, so the + % normal leading is inserted relative to the preceding line. + % And a page break here is fine. + \vtop to #1\mil{\strut\vfil}% + % + % TeX does not even consider page breaks if a penalty added to the + % main vertical list is 10000 or more. But in order to see if the + % empty box we just added fits on the page, we must make it consider + % page breaks. On the other hand, we don't want to actually break the + % page after the empty box. So we use a penalty of 9999. + % + % There is an extremely small chance that TeX will actually break the + % page at this \penalty, if there are no other feasible breakpoints in + % sight. (If the user is using lots of big @group commands, which + % almost-but-not-quite fill up a page, TeX will have a hard time doing + % good page breaking, for example.) However, I could not construct an + % example where a page broke at this \penalty; if it happens in a real + % document, then we can reconsider our strategy. + \penalty9999 + % + % Back up by the size of the box, whether we did a page break or not. + \kern -#1\mil + % + % Do not allow a page break right after this kern. + \nobreak + \fi +} + +% @br forces paragraph break (and is undocumented). + +\let\br = \par + +% @page forces the start of a new page. +% +\def\page{\par\vfill\supereject} + +% @exdent text.... +% outputs text on separate line in roman font, starting at standard page margin + +% This records the amount of indent in the innermost environment. +% That's how much \exdent should take out. +\newskip\exdentamount + +% This defn is used inside fill environments such as @defun. +\parseargdef\exdent{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break} + +% This defn is used inside nofill environments such as @example. +\parseargdef\nofillexdent{{\advance \leftskip by -\exdentamount + \leftline{\hskip\leftskip{\rm#1}}}} + +% @inmargin{WHICH}{TEXT} puts TEXT in the WHICH margin next to the current +% paragraph. For more general purposes, use the \margin insertion +% class. WHICH is `l' or `r'. +% +\newskip\inmarginspacing \inmarginspacing=1cm +\def\strutdepth{\dp\strutbox} +% +\def\doinmargin#1#2{\strut\vadjust{% + \nobreak + \kern-\strutdepth + \vtop to \strutdepth{% + \baselineskip=\strutdepth + \vss + % if you have multiple lines of stuff to put here, you'll need to + % make the vbox yourself of the appropriate size. + \ifx#1l% + \llap{\ignorespaces #2\hskip\inmarginspacing}% + \else + \rlap{\hskip\hsize \hskip\inmarginspacing \ignorespaces #2}% + \fi + \null + }% +}} +\def\inleftmargin{\doinmargin l} +\def\inrightmargin{\doinmargin r} +% +% @inmargin{TEXT [, RIGHT-TEXT]} +% (if RIGHT-TEXT is given, use TEXT for left page, RIGHT-TEXT for right; +% else use TEXT for both). +% +\def\inmargin#1{\parseinmargin #1,,\finish} +\def\parseinmargin#1,#2,#3\finish{% not perfect, but better than nothing. + \setbox0 = \hbox{\ignorespaces #2}% + \ifdim\wd0 > 0pt + \def\lefttext{#1}% have both texts + \def\righttext{#2}% + \else + \def\lefttext{#1}% have only one text + \def\righttext{#1}% + \fi + % + \ifodd\pageno + \def\temp{\inrightmargin\righttext}% odd page -> outside is right margin + \else + \def\temp{\inleftmargin\lefttext}% + \fi + \temp +} + +% @include file insert text of that file as input. +% +\def\include{\parseargusing\filenamecatcodes\includezzz} +\def\includezzz#1{% + \pushthisfilestack + \def\thisfile{#1}% + {% + \makevalueexpandable + \def\temp{\input #1 }% + \expandafter + }\temp + \popthisfilestack +} +\def\filenamecatcodes{% + \catcode`\\=\other + \catcode`~=\other + \catcode`^=\other + \catcode`_=\other + \catcode`|=\other + \catcode`<=\other + \catcode`>=\other + \catcode`+=\other + \catcode`-=\other +} + +\def\pushthisfilestack{% + \expandafter\pushthisfilestackX\popthisfilestack\StackTerm +} +\def\pushthisfilestackX{% + \expandafter\pushthisfilestackY\thisfile\StackTerm +} +\def\pushthisfilestackY #1\StackTerm #2\StackTerm {% + \gdef\popthisfilestack{\gdef\thisfile{#1}\gdef\popthisfilestack{#2}}% +} + +\def\popthisfilestack{\errthisfilestackempty} +\def\errthisfilestackempty{\errmessage{Internal error: + the stack of filenames is empty.}} + +\def\thisfile{} + +% @center line +% outputs that line, centered. +% +\parseargdef\center{% + \ifhmode + \let\next\centerH + \else + \let\next\centerV + \fi + \next{\hfil \ignorespaces#1\unskip \hfil}% +} +\def\centerH#1{% + {% + \hfil\break + \advance\hsize by -\leftskip + \advance\hsize by -\rightskip + \line{#1}% + \break + }% +} +\def\centerV#1{\line{\kern\leftskip #1\kern\rightskip}} + +% @sp n outputs n lines of vertical space + +\parseargdef\sp{\vskip #1\baselineskip} + +% @comment ...line which is ignored... +% @c is the same as @comment +% @ignore ... @end ignore is another way to write a comment + +\def\comment{\begingroup \catcode`\^^M=\other% +\catcode`\@=\other \catcode`\{=\other \catcode`\}=\other% +\commentxxx} +{\catcode`\^^M=\other \gdef\commentxxx#1^^M{\endgroup}} + +\let\c=\comment + +% @paragraphindent NCHARS +% We'll use ems for NCHARS, close enough. +% NCHARS can also be the word `asis' or `none'. +% We cannot feasibly implement @paragraphindent asis, though. +% +\def\asisword{asis} % no translation, these are keywords +\def\noneword{none} +% +\parseargdef\paragraphindent{% + \def\temp{#1}% + \ifx\temp\asisword + \else + \ifx\temp\noneword + \defaultparindent = 0pt + \else + \defaultparindent = #1em + \fi + \fi + \parindent = \defaultparindent +} + +% @exampleindent NCHARS +% We'll use ems for NCHARS like @paragraphindent. +% It seems @exampleindent asis isn't necessary, but +% I preserve it to make it similar to @paragraphindent. +\parseargdef\exampleindent{% + \def\temp{#1}% + \ifx\temp\asisword + \else + \ifx\temp\noneword + \lispnarrowing = 0pt + \else + \lispnarrowing = #1em + \fi + \fi +} + +% @firstparagraphindent WORD +% If WORD is `none', then suppress indentation of the first paragraph +% after a section heading. If WORD is `insert', then do indent at such +% paragraphs. +% +% The paragraph indentation is suppressed or not by calling +% \suppressfirstparagraphindent, which the sectioning commands do. +% We switch the definition of this back and forth according to WORD. +% By default, we suppress indentation. +% +\def\suppressfirstparagraphindent{\dosuppressfirstparagraphindent} +\def\insertword{insert} +% +\parseargdef\firstparagraphindent{% + \def\temp{#1}% + \ifx\temp\noneword + \let\suppressfirstparagraphindent = \dosuppressfirstparagraphindent + \else\ifx\temp\insertword + \let\suppressfirstparagraphindent = \relax + \else + \errhelp = \EMsimple + \errmessage{Unknown @firstparagraphindent option `\temp'}% + \fi\fi +} + +% Here is how we actually suppress indentation. Redefine \everypar to +% \kern backwards by \parindent, and then reset itself to empty. +% +% We also make \indent itself not actually do anything until the next +% paragraph. +% +\gdef\dosuppressfirstparagraphindent{% + \gdef\indent{% + \restorefirstparagraphindent + \indent + }% + \gdef\noindent{% + \restorefirstparagraphindent + \noindent + }% + \global\everypar = {% + \kern -\parindent + \restorefirstparagraphindent + }% +} + +\gdef\restorefirstparagraphindent{% + \global \let \indent = \ptexindent + \global \let \noindent = \ptexnoindent + \global \everypar = {}% +} + + +% @asis just yields its argument. Used with @table, for example. +% +\def\asis#1{#1} + +% @math outputs its argument in math mode. +% +% One complication: _ usually means subscripts, but it could also mean +% an actual _ character, as in @math{@var{some_variable} + 1}. So make +% _ active, and distinguish by seeing if the current family is \slfam, +% which is what @var uses. +{ + \catcode\underChar = \active + \gdef\mathunderscore{% + \catcode\underChar=\active + \def_{\ifnum\fam=\slfam \_\else\sb\fi}% + } +} +% Another complication: we want \\ (and @\) to output a \ character. +% FYI, plain.tex uses \\ as a temporary control sequence (why?), but +% this is not advertised and we don't care. Texinfo does not +% otherwise define @\. +% +% The \mathchar is class=0=ordinary, family=7=ttfam, position=5C=\. +\def\mathbackslash{\ifnum\fam=\ttfam \mathchar"075C \else\backslash \fi} +% +\def\math{% + \tex + \mathunderscore + \let\\ = \mathbackslash + \mathactive + $\finishmath +} +\def\finishmath#1{#1$\endgroup} % Close the group opened by \tex. + +% Some active characters (such as <) are spaced differently in math. +% We have to reset their definitions in case the @math was an argument +% to a command which sets the catcodes (such as @item or @section). +% +{ + \catcode`^ = \active + \catcode`< = \active + \catcode`> = \active + \catcode`+ = \active + \gdef\mathactive{% + \let^ = \ptexhat + \let< = \ptexless + \let> = \ptexgtr + \let+ = \ptexplus + } +} + +% @bullet and @minus need the same treatment as @math, just above. +\def\bullet{$\ptexbullet$} +\def\minus{$-$} + +% @dots{} outputs an ellipsis using the current font. +% We do .5em per period so that it has the same spacing in a typewriter +% font as three actual period characters. +% +\def\dots{% + \leavevmode + \hbox to 1.5em{% + \hskip 0pt plus 0.25fil + .\hfil.\hfil.% + \hskip 0pt plus 0.5fil + }% +} + +% @enddots{} is an end-of-sentence ellipsis. +% +\def\enddots{% + \dots + \spacefactor=3000 +} + +% @comma{} is so commas can be inserted into text without messing up +% Texinfo's parsing. +% +\let\comma = , + +% @refill is a no-op. +\let\refill=\relax + +% If working on a large document in chapters, it is convenient to +% be able to disable indexing, cross-referencing, and contents, for test runs. +% This is done with @novalidate (before @setfilename). +% +\newif\iflinks \linkstrue % by default we want the aux files. +\let\novalidate = \linksfalse + +% @setfilename is done at the beginning of every texinfo file. +% So open here the files we need to have open while reading the input. +% This makes it possible to make a .fmt file for texinfo. +\def\setfilename{% + \fixbackslash % Turn off hack to swallow `\input texinfo'. + \iflinks + \tryauxfile + % Open the new aux file. TeX will close it automatically at exit. + \immediate\openout\auxfile=\jobname.aux + \fi % \openindices needs to do some work in any case. + \openindices + \let\setfilename=\comment % Ignore extra @setfilename cmds. + % + % If texinfo.cnf is present on the system, read it. + % Useful for site-wide @afourpaper, etc. + \openin 1 texinfo.cnf + \ifeof 1 \else \input texinfo.cnf \fi + \closein 1 + % + \comment % Ignore the actual filename. +} + +% Called from \setfilename. +% +\def\openindices{% + \newindex{cp}% + \newcodeindex{fn}% + \newcodeindex{vr}% + \newcodeindex{tp}% + \newcodeindex{ky}% + \newcodeindex{pg}% +} + +% @bye. +\outer\def\bye{\pagealignmacro\tracingstats=1\ptexend} + + +\message{pdf,} +% adobe `portable' document format +\newcount\tempnum +\newcount\lnkcount +\newtoks\filename +\newcount\filenamelength +\newcount\pgn +\newtoks\toksA +\newtoks\toksB +\newtoks\toksC +\newtoks\toksD +\newbox\boxA +\newcount\countA +\newif\ifpdf +\newif\ifpdfmakepagedest + +% when pdftex is run in dvi mode, \pdfoutput is defined (so \pdfoutput=1 +% can be set). So we test for \relax and 0 as well as \undefined, +% borrowed from ifpdf.sty. +\ifx\pdfoutput\undefined +\else + \ifx\pdfoutput\relax + \else + \ifcase\pdfoutput + \else + \pdftrue + \fi + \fi +\fi +% +\ifpdf + \input pdfcolor + \pdfcatalog{/PageMode /UseOutlines}% + \def\dopdfimage#1#2#3{% + \def\imagewidth{#2}% + \def\imageheight{#3}% + % without \immediate, pdftex seg faults when the same image is + % included twice. (Version 3.14159-pre-1.0-unofficial-20010704.) + \ifnum\pdftexversion < 14 + \immediate\pdfimage + \else + \immediate\pdfximage + \fi + \ifx\empty\imagewidth\else width \imagewidth \fi + \ifx\empty\imageheight\else height \imageheight \fi + \ifnum\pdftexversion<13 + #1.pdf% + \else + {#1.pdf}% + \fi + \ifnum\pdftexversion < 14 \else + \pdfrefximage \pdflastximage + \fi} + \def\pdfmkdest#1{{% + % We have to set dummies so commands such as @code in a section title + % aren't expanded. + \atdummies + \normalturnoffactive + \pdfdest name{#1} xyz% + }} + \def\pdfmkpgn#1{#1} + \let\linkcolor = \Blue % was Cyan, but that seems light? + \def\endlink{\Black\pdfendlink} + % Adding outlines to PDF; macros for calculating structure of outlines + % come from Petr Olsak + \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0% + \else \csname#1\endcsname \fi} + \def\advancenumber#1{\tempnum=\expnumber{#1}\relax + \advance\tempnum by 1 + \expandafter\xdef\csname#1\endcsname{\the\tempnum}} + % + % #1 is the section text. #2 is the pdf expression for the number + % of subentries (or empty, for subsubsections). #3 is the node + % text, which might be empty if this toc entry had no + % corresponding node. #4 is the page number. + % + \def\dopdfoutline#1#2#3#4{% + % Generate a link to the node text if that exists; else, use the + % page number. We could generate a destination for the section + % text in the case where a section has no node, but it doesn't + % seem worthwhile, since most documents are normally structured. + \def\pdfoutlinedest{#3}% + \ifx\pdfoutlinedest\empty \def\pdfoutlinedest{#4}\fi + % + \pdfoutline goto name{\pdfmkpgn{\pdfoutlinedest}}#2{#1}% + } + % + \def\pdfmakeoutlines{% + \begingroup + % Thanh's hack / proper braces in bookmarks + \edef\mylbrace{\iftrue \string{\else}\fi}\let\{=\mylbrace + \edef\myrbrace{\iffalse{\else\string}\fi}\let\}=\myrbrace + % + % Read toc silently, to get counts of subentries for \pdfoutline. + \def\numchapentry##1##2##3##4{% + \def\thischapnum{##2}% + \def\thissecnum{0}% + \def\thissubsecnum{0}% + }% + \def\numsecentry##1##2##3##4{% + \advancenumber{chap\thischapnum}% + \def\thissecnum{##2}% + \def\thissubsecnum{0}% + }% + \def\numsubsecentry##1##2##3##4{% + \advancenumber{sec\thissecnum}% + \def\thissubsecnum{##2}% + }% + \def\numsubsubsecentry##1##2##3##4{% + \advancenumber{subsec\thissubsecnum}% + }% + \def\thischapnum{0}% + \def\thissecnum{0}% + \def\thissubsecnum{0}% + % + % use \def rather than \let here because we redefine \chapentry et + % al. a second time, below. + \def\appentry{\numchapentry}% + \def\appsecentry{\numsecentry}% + \def\appsubsecentry{\numsubsecentry}% + \def\appsubsubsecentry{\numsubsubsecentry}% + \def\unnchapentry{\numchapentry}% + \def\unnsecentry{\numsecentry}% + \def\unnsubsecentry{\numsubsecentry}% + \def\unnsubsubsecentry{\numsubsubsecentry}% + \input \jobname.toc + % + % Read toc second time, this time actually producing the outlines. + % The `-' means take the \expnumber as the absolute number of + % subentries, which we calculated on our first read of the .toc above. + % + % We use the node names as the destinations. + \def\numchapentry##1##2##3##4{% + \dopdfoutline{##1}{count-\expnumber{chap##2}}{##3}{##4}}% + \def\numsecentry##1##2##3##4{% + \dopdfoutline{##1}{count-\expnumber{sec##2}}{##3}{##4}}% + \def\numsubsecentry##1##2##3##4{% + \dopdfoutline{##1}{count-\expnumber{subsec##2}}{##3}{##4}}% + \def\numsubsubsecentry##1##2##3##4{% count is always zero + \dopdfoutline{##1}{}{##3}{##4}}% + % + % PDF outlines are displayed using system fonts, instead of + % document fonts. Therefore we cannot use special characters, + % since the encoding is unknown. For example, the eogonek from + % Latin 2 (0xea) gets translated to a | character. Info from + % Staszek Wawrykiewicz, 19 Jan 2004 04:09:24 +0100. + % + % xx to do this right, we have to translate 8-bit characters to + % their "best" equivalent, based on the @documentencoding. Right + % now, I guess we'll just let the pdf reader have its way. + \indexnofonts + \turnoffactive + \input \jobname.toc + \endgroup + } + % + \def\makelinks #1,{% + \def\params{#1}\def\E{END}% + \ifx\params\E + \let\nextmakelinks=\relax + \else + \let\nextmakelinks=\makelinks + \ifnum\lnkcount>0,\fi + \picknum{#1}% + \startlink attr{/Border [0 0 0]} + goto name{\pdfmkpgn{\the\pgn}}% + \linkcolor #1% + \advance\lnkcount by 1% + \endlink + \fi + \nextmakelinks + } + \def\picknum#1{\expandafter\pn#1} + \def\pn#1{% + \def\p{#1}% + \ifx\p\lbrace + \let\nextpn=\ppn + \else + \let\nextpn=\ppnn + \def\first{#1} + \fi + \nextpn + } + \def\ppn#1{\pgn=#1\gobble} + \def\ppnn{\pgn=\first} + \def\pdfmklnk#1{\lnkcount=0\makelinks #1,END,} + \def\skipspaces#1{\def\PP{#1}\def\D{|}% + \ifx\PP\D\let\nextsp\relax + \else\let\nextsp\skipspaces + \ifx\p\space\else\addtokens{\filename}{\PP}% + \advance\filenamelength by 1 + \fi + \fi + \nextsp} + \def\getfilename#1{\filenamelength=0\expandafter\skipspaces#1|\relax} + \ifnum\pdftexversion < 14 + \let \startlink \pdfannotlink + \else + \let \startlink \pdfstartlink + \fi + \def\pdfurl#1{% + \begingroup + \normalturnoffactive\def\@{@}% + \makevalueexpandable + \leavevmode\Red + \startlink attr{/Border [0 0 0]}% + user{/Subtype /Link /A << /S /URI /URI (#1) >>}% + \endgroup} + \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}} + \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks} + \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks} + \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}} + \def\maketoks{% + \expandafter\poptoks\the\toksA|ENDTOKS|\relax + \ifx\first0\adn0 + \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3 + \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6 + \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9 + \else + \ifnum0=\countA\else\makelink\fi + \ifx\first.\let\next=\done\else + \let\next=\maketoks + \addtokens{\toksB}{\the\toksD} + \ifx\first,\addtokens{\toksB}{\space}\fi + \fi + \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi + \next} + \def\makelink{\addtokens{\toksB}% + {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0} + \def\pdflink#1{% + \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}} + \linkcolor #1\endlink} + \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st} +\else + \let\pdfmkdest = \gobble + \let\pdfurl = \gobble + \let\endlink = \relax + \let\linkcolor = \relax + \let\pdfmakeoutlines = \relax +\fi % \ifx\pdfoutput + + +\message{fonts,} + +% Change the current font style to #1, remembering it in \curfontstyle. +% For now, we do not accumulate font styles: @b{@i{foo}} prints foo in +% italics, not bold italics. +% +\def\setfontstyle#1{% + \def\curfontstyle{#1}% not as a control sequence, because we are \edef'd. + \csname ten#1\endcsname % change the current font +} + +% Select #1 fonts with the current style. +% +\def\selectfonts#1{\csname #1fonts\endcsname \csname\curfontstyle\endcsname} + +\def\rm{\fam=0 \setfontstyle{rm}} +\def\it{\fam=\itfam \setfontstyle{it}} +\def\sl{\fam=\slfam \setfontstyle{sl}} +\def\bf{\fam=\bffam \setfontstyle{bf}}\def\bfstylename{bf} +\def\tt{\fam=\ttfam \setfontstyle{tt}} + +% Texinfo sort of supports the sans serif font style, which plain TeX does not. +% So we set up a \sf. +\newfam\sffam +\def\sf{\fam=\sffam \setfontstyle{sf}} +\let\li = \sf % Sometimes we call it \li, not \sf. + +% We don't need math for this font style. +\def\ttsl{\setfontstyle{ttsl}} + +% Default leading. +\newdimen\textleading \textleading = 13.2pt + +% Set the baselineskip to #1, and the lineskip and strut size +% correspondingly. There is no deep meaning behind these magic numbers +% used as factors; they just match (closely enough) what Knuth defined. +% +\def\lineskipfactor{.08333} +\def\strutheightpercent{.70833} +\def\strutdepthpercent {.29167} +% +\def\setleading#1{% + \normalbaselineskip = #1\relax + \normallineskip = \lineskipfactor\normalbaselineskip + \normalbaselines + \setbox\strutbox =\hbox{% + \vrule width0pt height\strutheightpercent\baselineskip + depth \strutdepthpercent \baselineskip + }% +} + +% Set the font macro #1 to the font named #2, adding on the +% specified font prefix (normally `cm'). +% #3 is the font's design size, #4 is a scale factor +\def\setfont#1#2#3#4{\font#1=\fontprefix#2#3 scaled #4} + +% Use cm as the default font prefix. +% To specify the font prefix, you must define \fontprefix +% before you read in texinfo.tex. +\ifx\fontprefix\undefined +\def\fontprefix{cm} +\fi +% Support font families that don't use the same naming scheme as CM. +\def\rmshape{r} +\def\rmbshape{bx} %where the normal face is bold +\def\bfshape{b} +\def\bxshape{bx} +\def\ttshape{tt} +\def\ttbshape{tt} +\def\ttslshape{sltt} +\def\itshape{ti} +\def\itbshape{bxti} +\def\slshape{sl} +\def\slbshape{bxsl} +\def\sfshape{ss} +\def\sfbshape{ss} +\def\scshape{csc} +\def\scbshape{csc} + +% Text fonts (11.2pt, magstep1). +\def\textnominalsize{11pt} +\edef\mainmagstep{\magstephalf} +\setfont\textrm\rmshape{10}{\mainmagstep} +\setfont\texttt\ttshape{10}{\mainmagstep} +\setfont\textbf\bfshape{10}{\mainmagstep} +\setfont\textit\itshape{10}{\mainmagstep} +\setfont\textsl\slshape{10}{\mainmagstep} +\setfont\textsf\sfshape{10}{\mainmagstep} +\setfont\textsc\scshape{10}{\mainmagstep} +\setfont\textttsl\ttslshape{10}{\mainmagstep} +\font\texti=cmmi10 scaled \mainmagstep +\font\textsy=cmsy10 scaled \mainmagstep + +% A few fonts for @defun names and args. +\setfont\defbf\bfshape{10}{\magstep1} +\setfont\deftt\ttshape{10}{\magstep1} +\setfont\defttsl\ttslshape{10}{\magstep1} +\def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf} + +% Fonts for indices, footnotes, small examples (9pt). +\def\smallnominalsize{9pt} +\setfont\smallrm\rmshape{9}{1000} +\setfont\smalltt\ttshape{9}{1000} +\setfont\smallbf\bfshape{10}{900} +\setfont\smallit\itshape{9}{1000} +\setfont\smallsl\slshape{9}{1000} +\setfont\smallsf\sfshape{9}{1000} +\setfont\smallsc\scshape{10}{900} +\setfont\smallttsl\ttslshape{10}{900} +\font\smalli=cmmi9 +\font\smallsy=cmsy9 + +% Fonts for small examples (8pt). +\def\smallernominalsize{8pt} +\setfont\smallerrm\rmshape{8}{1000} +\setfont\smallertt\ttshape{8}{1000} +\setfont\smallerbf\bfshape{10}{800} +\setfont\smallerit\itshape{8}{1000} +\setfont\smallersl\slshape{8}{1000} +\setfont\smallersf\sfshape{8}{1000} +\setfont\smallersc\scshape{10}{800} +\setfont\smallerttsl\ttslshape{10}{800} +\font\smalleri=cmmi8 +\font\smallersy=cmsy8 + +% Fonts for title page (20.4pt): +\def\titlenominalsize{20pt} +\setfont\titlerm\rmbshape{12}{\magstep3} +\setfont\titleit\itbshape{10}{\magstep4} +\setfont\titlesl\slbshape{10}{\magstep4} +\setfont\titlett\ttbshape{12}{\magstep3} +\setfont\titlettsl\ttslshape{10}{\magstep4} +\setfont\titlesf\sfbshape{17}{\magstep1} +\let\titlebf=\titlerm +\setfont\titlesc\scbshape{10}{\magstep4} +\font\titlei=cmmi12 scaled \magstep3 +\font\titlesy=cmsy10 scaled \magstep4 +\def\authorrm{\secrm} +\def\authortt{\sectt} + +% Chapter (and unnumbered) fonts (17.28pt). +\def\chapnominalsize{17pt} +\setfont\chaprm\rmbshape{12}{\magstep2} +\setfont\chapit\itbshape{10}{\magstep3} +\setfont\chapsl\slbshape{10}{\magstep3} +\setfont\chaptt\ttbshape{12}{\magstep2} +\setfont\chapttsl\ttslshape{10}{\magstep3} +\setfont\chapsf\sfbshape{17}{1000} +\let\chapbf=\chaprm +\setfont\chapsc\scbshape{10}{\magstep3} +\font\chapi=cmmi12 scaled \magstep2 +\font\chapsy=cmsy10 scaled \magstep3 + +% Section fonts (14.4pt). +\def\secnominalsize{14pt} +\setfont\secrm\rmbshape{12}{\magstep1} +\setfont\secit\itbshape{10}{\magstep2} +\setfont\secsl\slbshape{10}{\magstep2} +\setfont\sectt\ttbshape{12}{\magstep1} +\setfont\secttsl\ttslshape{10}{\magstep2} +\setfont\secsf\sfbshape{12}{\magstep1} +\let\secbf\secrm +\setfont\secsc\scbshape{10}{\magstep2} +\font\seci=cmmi12 scaled \magstep1 +\font\secsy=cmsy10 scaled \magstep2 + +% Subsection fonts (13.15pt). +\def\ssecnominalsize{13pt} +\setfont\ssecrm\rmbshape{12}{\magstephalf} +\setfont\ssecit\itbshape{10}{1315} +\setfont\ssecsl\slbshape{10}{1315} +\setfont\ssectt\ttbshape{12}{\magstephalf} +\setfont\ssecttsl\ttslshape{10}{1315} +\setfont\ssecsf\sfbshape{12}{\magstephalf} +\let\ssecbf\ssecrm +\setfont\ssecsc\scbshape{10}{1315} +\font\sseci=cmmi12 scaled \magstephalf +\font\ssecsy=cmsy10 scaled 1315 + +% Reduced fonts for @acro in text (10pt). +\def\reducednominalsize{10pt} +\setfont\reducedrm\rmshape{10}{1000} +\setfont\reducedtt\ttshape{10}{1000} +\setfont\reducedbf\bfshape{10}{1000} +\setfont\reducedit\itshape{10}{1000} +\setfont\reducedsl\slshape{10}{1000} +\setfont\reducedsf\sfshape{10}{1000} +\setfont\reducedsc\scshape{10}{1000} +\setfont\reducedttsl\ttslshape{10}{1000} +\font\reducedi=cmmi10 +\font\reducedsy=cmsy10 + +% In order for the font changes to affect most math symbols and letters, +% we have to define the \textfont of the standard families. Since +% texinfo doesn't allow for producing subscripts and superscripts except +% in the main text, we don't bother to reset \scriptfont and +% \scriptscriptfont (which would also require loading a lot more fonts). +% +\def\resetmathfonts{% + \textfont0=\tenrm \textfont1=\teni \textfont2=\tensy + \textfont\itfam=\tenit \textfont\slfam=\tensl \textfont\bffam=\tenbf + \textfont\ttfam=\tentt \textfont\sffam=\tensf +} + +% The font-changing commands redefine the meanings of \tenSTYLE, instead +% of just \STYLE. We do this because \STYLE needs to also set the +% current \fam for math mode. Our \STYLE (e.g., \rm) commands hardwire +% \tenSTYLE to set the current font. +% +% Each font-changing command also sets the names \lsize (one size lower) +% and \lllsize (three sizes lower). These relative commands are used in +% the LaTeX logo and acronyms. +% +% This all needs generalizing, badly. +% +\def\textfonts{% + \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl + \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc + \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy + \let\tenttsl=\textttsl + \def\curfontsize{text}% + \def\lsize{reduced}\def\lllsize{smaller}% + \resetmathfonts \setleading{\textleading}} +\def\titlefonts{% + \let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl + \let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc + \let\tensf=\titlesf \let\teni=\titlei \let\tensy=\titlesy + \let\tenttsl=\titlettsl + \def\curfontsize{title}% + \def\lsize{chap}\def\lllsize{subsec}% + \resetmathfonts \setleading{25pt}} +\def\titlefont#1{{\titlefonts\rm #1}} +\def\chapfonts{% + \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl + \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc + \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy + \let\tenttsl=\chapttsl + \def\curfontsize{chap}% + \def\lsize{sec}\def\lllsize{text}% + \resetmathfonts \setleading{19pt}} +\def\secfonts{% + \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl + \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc + \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy + \let\tenttsl=\secttsl + \def\curfontsize{sec}% + \def\lsize{subsec}\def\lllsize{reduced}% + \resetmathfonts \setleading{16pt}} +\def\subsecfonts{% + \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl + \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc + \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy + \let\tenttsl=\ssecttsl + \def\curfontsize{ssec}% + \def\lsize{text}\def\lllsize{small}% + \resetmathfonts \setleading{15pt}} +\let\subsubsecfonts = \subsecfonts +\def\reducedfonts{% + \let\tenrm=\reducedrm \let\tenit=\reducedit \let\tensl=\reducedsl + \let\tenbf=\reducedbf \let\tentt=\reducedtt \let\reducedcaps=\reducedsc + \let\tensf=\reducedsf \let\teni=\reducedi \let\tensy=\reducedsy + \let\tenttsl=\reducedttsl + \def\curfontsize{reduced}% + \def\lsize{small}\def\lllsize{smaller}% + \resetmathfonts \setleading{10.5pt}} +\def\smallfonts{% + \let\tenrm=\smallrm \let\tenit=\smallit \let\tensl=\smallsl + \let\tenbf=\smallbf \let\tentt=\smalltt \let\smallcaps=\smallsc + \let\tensf=\smallsf \let\teni=\smalli \let\tensy=\smallsy + \let\tenttsl=\smallttsl + \def\curfontsize{small}% + \def\lsize{smaller}\def\lllsize{smaller}% + \resetmathfonts \setleading{10.5pt}} +\def\smallerfonts{% + \let\tenrm=\smallerrm \let\tenit=\smallerit \let\tensl=\smallersl + \let\tenbf=\smallerbf \let\tentt=\smallertt \let\smallcaps=\smallersc + \let\tensf=\smallersf \let\teni=\smalleri \let\tensy=\smallersy + \let\tenttsl=\smallerttsl + \def\curfontsize{smaller}% + \def\lsize{smaller}\def\lllsize{smaller}% + \resetmathfonts \setleading{9.5pt}} + +% Set the fonts to use with the @small... environments. +\let\smallexamplefonts = \smallfonts + +% About \smallexamplefonts. If we use \smallfonts (9pt), @smallexample +% can fit this many characters: +% 8.5x11=86 smallbook=72 a4=90 a5=69 +% If we use \scriptfonts (8pt), then we can fit this many characters: +% 8.5x11=90+ smallbook=80 a4=90+ a5=77 +% For me, subjectively, the few extra characters that fit aren't worth +% the additional smallness of 8pt. So I'm making the default 9pt. +% +% By the way, for comparison, here's what fits with @example (10pt): +% 8.5x11=71 smallbook=60 a4=75 a5=58 +% +% I wish the USA used A4 paper. +% --karl, 24jan03. + + +% Set up the default fonts, so we can use them for creating boxes. +% +\textfonts \rm + +% Define these so they can be easily changed for other fonts. +\def\angleleft{$\langle$} +\def\angleright{$\rangle$} + +% Count depth in font-changes, for error checks +\newcount\fontdepth \fontdepth=0 + +% Fonts for short table of contents. +\setfont\shortcontrm\rmshape{12}{1000} +\setfont\shortcontbf\bfshape{10}{\magstep1} % no cmb12 +\setfont\shortcontsl\slshape{12}{1000} +\setfont\shortconttt\ttshape{12}{1000} + +%% Add scribe-like font environments, plus @l for inline lisp (usually sans +%% serif) and @ii for TeX italic + +% \smartitalic{ARG} outputs arg in italics, followed by an italic correction +% unless the following character is such as not to need one. +\def\smartitalicx{\ifx\next,\else\ifx\next-\else\ifx\next.\else + \ptexslash\fi\fi\fi} +\def\smartslanted#1{{\ifusingtt\ttsl\sl #1}\futurelet\next\smartitalicx} +\def\smartitalic#1{{\ifusingtt\ttsl\it #1}\futurelet\next\smartitalicx} + +% like \smartslanted except unconditionally uses \ttsl. +% @var is set to this for defun arguments. +\def\ttslanted#1{{\ttsl #1}\futurelet\next\smartitalicx} + +% like \smartslanted except unconditionally use \sl. We never want +% ttsl for book titles, do we? +\def\cite#1{{\sl #1}\futurelet\next\smartitalicx} + +\let\i=\smartitalic +\let\slanted=\smartslanted +\let\var=\smartslanted +\let\dfn=\smartslanted +\let\emph=\smartitalic + +% @b, explicit bold. +\def\b#1{{\bf #1}} +\let\strong=\b + +% @sansserif, explicit sans. +\def\sansserif#1{{\sf #1}} + +% We can't just use \exhyphenpenalty, because that only has effect at +% the end of a paragraph. Restore normal hyphenation at the end of the +% group within which \nohyphenation is presumably called. +% +\def\nohyphenation{\hyphenchar\font = -1 \aftergroup\restorehyphenation} +\def\restorehyphenation{\hyphenchar\font = `- } + +% Set sfcode to normal for the chars that usually have another value. +% Can't use plain's \frenchspacing because it uses the `\x notation, and +% sometimes \x has an active definition that messes things up. +% +\catcode`@=11 + \def\frenchspacing{% + \sfcode\dotChar =\@m \sfcode\questChar=\@m \sfcode\exclamChar=\@m + \sfcode\colonChar=\@m \sfcode\semiChar =\@m \sfcode\commaChar =\@m + } +\catcode`@=\other + +\def\t#1{% + {\tt \rawbackslash \frenchspacing #1}% + \null +} +\def\samp#1{`\tclose{#1}'\null} +\setfont\keyrm\rmshape{8}{1000} +\font\keysy=cmsy9 +\def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{% + \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{% + \vbox{\hrule\kern-0.4pt + \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}% + \kern-0.4pt\hrule}% + \kern-.06em\raise0.4pt\hbox{\angleright}}}} +% The old definition, with no lozenge: +%\def\key #1{{\ttsl \nohyphenation \uppercase{#1}}\null} +\def\ctrl #1{{\tt \rawbackslash \hat}#1} + +% @file, @option are the same as @samp. +\let\file=\samp +\let\option=\samp + +% @code is a modification of @t, +% which makes spaces the same size as normal in the surrounding text. +\def\tclose#1{% + {% + % Change normal interword space to be same as for the current font. + \spaceskip = \fontdimen2\font + % + % Switch to typewriter. + \tt + % + % But `\ ' produces the large typewriter interword space. + \def\ {{\spaceskip = 0pt{} }}% + % + % Turn off hyphenation. + \nohyphenation + % + \rawbackslash + \frenchspacing + #1% + }% + \null +} + +% We *must* turn on hyphenation at `-' and `_' in @code. +% Otherwise, it is too hard to avoid overfull hboxes +% in the Emacs manual, the Library manual, etc. + +% Unfortunately, TeX uses one parameter (\hyphenchar) to control +% both hyphenation at - and hyphenation within words. +% We must therefore turn them both off (\tclose does that) +% and arrange explicitly to hyphenate at a dash. +% -- rms. +{ + \catcode`\-=\active + \catcode`\_=\active + % + \global\def\code{\begingroup + \catcode`\-=\active \let-\codedash + \catcode`\_=\active \let_\codeunder + \codex + } +} + +\def\realdash{-} +\def\codedash{-\discretionary{}{}{}} +\def\codeunder{% + % this is all so @math{@code{var_name}+1} can work. In math mode, _ + % is "active" (mathcode"8000) and \normalunderscore (or \char95, etc.) + % will therefore expand the active definition of _, which is us + % (inside @code that is), therefore an endless loop. + \ifusingtt{\ifmmode + \mathchar"075F % class 0=ordinary, family 7=ttfam, pos 0x5F=_. + \else\normalunderscore \fi + \discretionary{}{}{}}% + {\_}% +} +\def\codex #1{\tclose{#1}\endgroup} + +% @kbd is like @code, except that if the argument is just one @key command, +% then @kbd has no effect. + +% @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always), +% `example' (@kbd uses ttsl only inside of @example and friends), +% or `code' (@kbd uses normal tty font always). +\parseargdef\kbdinputstyle{% + \def\arg{#1}% + \ifx\arg\worddistinct + \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}% + \else\ifx\arg\wordexample + \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}% + \else\ifx\arg\wordcode + \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}% + \else + \errhelp = \EMsimple + \errmessage{Unknown @kbdinputstyle option `\arg'}% + \fi\fi\fi +} +\def\worddistinct{distinct} +\def\wordexample{example} +\def\wordcode{code} + +% Default is `distinct.' +\kbdinputstyle distinct + +\def\xkey{\key} +\def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{#3}\def\threex{??}% +\ifx\one\xkey\ifx\threex\three \key{#2}% +\else{\tclose{\kbdfont\look}}\fi +\else{\tclose{\kbdfont\look}}\fi} + +% For @indicateurl, @env, @command quotes seem unnecessary, so use \code. +\let\indicateurl=\code +\let\env=\code +\let\command=\code + +% @uref (abbreviation for `urlref') takes an optional (comma-separated) +% second argument specifying the text to display and an optional third +% arg as text to display instead of (rather than in addition to) the url +% itself. First (mandatory) arg is the url. Perhaps eventually put in +% a hypertex \special here. +% +\def\uref#1{\douref #1,,,\finish} +\def\douref#1,#2,#3,#4\finish{\begingroup + \unsepspaces + \pdfurl{#1}% + \setbox0 = \hbox{\ignorespaces #3}% + \ifdim\wd0 > 0pt + \unhbox0 % third arg given, show only that + \else + \setbox0 = \hbox{\ignorespaces #2}% + \ifdim\wd0 > 0pt + \ifpdf + \unhbox0 % PDF: 2nd arg given, show only it + \else + \unhbox0\ (\code{#1})% DVI: 2nd arg given, show both it and url + \fi + \else + \code{#1}% only url given, so show it + \fi + \fi + \endlink +\endgroup} + +% @url synonym for @uref, since that's how everyone uses it. +% +\let\url=\uref + +% rms does not like angle brackets --karl, 17may97. +% So now @email is just like @uref, unless we are pdf. +% +%\def\email#1{\angleleft{\tt #1}\angleright} +\ifpdf + \def\email#1{\doemail#1,,\finish} + \def\doemail#1,#2,#3\finish{\begingroup + \unsepspaces + \pdfurl{mailto:#1}% + \setbox0 = \hbox{\ignorespaces #2}% + \ifdim\wd0>0pt\unhbox0\else\code{#1}\fi + \endlink + \endgroup} +\else + \let\email=\uref +\fi + +% Check if we are currently using a typewriter font. Since all the +% Computer Modern typewriter fonts have zero interword stretch (and +% shrink), and it is reasonable to expect all typewriter fonts to have +% this property, we can check that font parameter. +% +\def\ifmonospace{\ifdim\fontdimen3\font=0pt } + +% Typeset a dimension, e.g., `in' or `pt'. The only reason for the +% argument is to make the input look right: @dmn{pt} instead of @dmn{}pt. +% +\def\dmn#1{\thinspace #1} + +\def\kbd#1{\def\look{#1}\expandafter\kbdfoo\look??\par} + +% @l was never documented to mean ``switch to the Lisp font'', +% and it is not used as such in any manual I can find. We need it for +% Polish suppressed-l. --karl, 22sep96. +%\def\l#1{{\li #1}\null} + +% Explicit font changes: @r, @sc, undocumented @ii. +\def\r#1{{\rm #1}} % roman font +\def\sc#1{{\smallcaps#1}} % smallcaps font +\def\ii#1{{\it #1}} % italic font + +% @acronym for "FBI", "NATO", and the like. +% We print this one point size smaller, since it's intended for +% all-uppercase. +% +\def\acronym#1{\doacronym #1,,\finish} +\def\doacronym#1,#2,#3\finish{% + {\selectfonts\lsize #1}% + \def\temp{#2}% + \ifx\temp\empty \else + \space ({\unsepspaces \ignorespaces \temp \unskip})% + \fi +} + +% @abbr for "Comput. J." and the like. +% No font change, but don't do end-of-sentence spacing. +% +\def\abbr#1{\doabbr #1,,\finish} +\def\doabbr#1,#2,#3\finish{% + {\frenchspacing #1}% + \def\temp{#2}% + \ifx\temp\empty \else + \space ({\unsepspaces \ignorespaces \temp \unskip})% + \fi +} + +% @pounds{} is a sterling sign, which Knuth put in the CM italic font. +% +\def\pounds{{\it\$}} + +% @euro{} comes from a separate font, depending on the current style. +% We use the free feym* fonts from the eurosym package by Henrik +% Theiling, which support regular, slanted, bold and bold slanted (and +% "outlined" (blackboard board, sort of) versions, which we don't need). +% It is available from http://www.ctan.org/tex-archive/fonts/eurosym. +% +% Although only regular is the truly official Euro symbol, we ignore +% that. The Euro is designed to be slightly taller than the regular +% font height. +% +% feymr - regular +% feymo - slanted +% feybr - bold +% feybo - bold slanted +% +% There is no good (free) typewriter version, to my knowledge. +% A feymr10 euro is ~7.3pt wide, while a normal cmtt10 char is ~5.25pt wide. +% Hmm. +% +% Also doesn't work in math. Do we need to do math with euro symbols? +% Hope not. +% +% +\def\euro{{\eurofont e}} +\def\eurofont{% + % We set the font at each command, rather than predefining it in + % \textfonts and the other font-switching commands, so that + % installations which never need the symbol don't have to have the + % font installed. + % + % There is only one designed size (nominal 10pt), so we always scale + % that to the current nominal size. + % + % By the way, simply using "at 1em" works for cmr10 and the like, but + % does not work for cmbx10 and other extended/shrunken fonts. + % + \def\eurosize{\csname\curfontsize nominalsize\endcsname}% + % + \ifx\curfontstyle\bfstylename + % bold: + \font\thiseurofont = \ifusingit{feybo10}{feybr10} at \eurosize + \else + % regular: + \font\thiseurofont = \ifusingit{feymo10}{feymr10} at \eurosize + \fi + \thiseurofont +} + +% @registeredsymbol - R in a circle. The font for the R should really +% be smaller yet, but lllsize is the best we can do for now. +% Adapted from the plain.tex definition of \copyright. +% +\def\registeredsymbol{% + $^{{\ooalign{\hfil\raise.07ex\hbox{\selectfonts\lllsize R}% + \hfil\crcr\Orb}}% + }$% +} + +% Laurent Siebenmann reports \Orb undefined with: +% Textures 1.7.7 (preloaded format=plain 93.10.14) (68K) 16 APR 2004 02:38 +% so we'll define it if necessary. +% +\ifx\Orb\undefined +\def\Orb{\mathhexbox20D} +\fi + + +\message{page headings,} + +\newskip\titlepagetopglue \titlepagetopglue = 1.5in +\newskip\titlepagebottomglue \titlepagebottomglue = 2pc + +% First the title page. Must do @settitle before @titlepage. +\newif\ifseenauthor +\newif\iffinishedtitlepage + +% Do an implicit @contents or @shortcontents after @end titlepage if the +% user says @setcontentsaftertitlepage or @setshortcontentsaftertitlepage. +% +\newif\ifsetcontentsaftertitlepage + \let\setcontentsaftertitlepage = \setcontentsaftertitlepagetrue +\newif\ifsetshortcontentsaftertitlepage + \let\setshortcontentsaftertitlepage = \setshortcontentsaftertitlepagetrue + +\parseargdef\shorttitlepage{\begingroup\hbox{}\vskip 1.5in \chaprm \centerline{#1}% + \endgroup\page\hbox{}\page} + +\envdef\titlepage{% + % Open one extra group, as we want to close it in the middle of \Etitlepage. + \begingroup + \parindent=0pt \textfonts + % Leave some space at the very top of the page. + \vglue\titlepagetopglue + % No rule at page bottom unless we print one at the top with @title. + \finishedtitlepagetrue + % + % Most title ``pages'' are actually two pages long, with space + % at the top of the second. We don't want the ragged left on the second. + \let\oldpage = \page + \def\page{% + \iffinishedtitlepage\else + \finishtitlepage + \fi + \let\page = \oldpage + \page + \null + }% +} + +\def\Etitlepage{% + \iffinishedtitlepage\else + \finishtitlepage + \fi + % It is important to do the page break before ending the group, + % because the headline and footline are only empty inside the group. + % If we use the new definition of \page, we always get a blank page + % after the title page, which we certainly don't want. + \oldpage + \endgroup + % + % Need this before the \...aftertitlepage checks so that if they are + % in effect the toc pages will come out with page numbers. + \HEADINGSon + % + % If they want short, they certainly want long too. + \ifsetshortcontentsaftertitlepage + \shortcontents + \contents + \global\let\shortcontents = \relax + \global\let\contents = \relax + \fi + % + \ifsetcontentsaftertitlepage + \contents + \global\let\contents = \relax + \global\let\shortcontents = \relax + \fi +} + +\def\finishtitlepage{% + \vskip4pt \hrule height 2pt width \hsize + \vskip\titlepagebottomglue + \finishedtitlepagetrue +} + +%%% Macros to be used within @titlepage: + +\let\subtitlerm=\tenrm +\def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines} + +\def\authorfont{\authorrm \normalbaselineskip = 16pt \normalbaselines + \let\tt=\authortt} + +\parseargdef\title{% + \checkenv\titlepage + \leftline{\titlefonts\rm #1} + % print a rule at the page bottom also. + \finishedtitlepagefalse + \vskip4pt \hrule height 4pt width \hsize \vskip4pt +} + +\parseargdef\subtitle{% + \checkenv\titlepage + {\subtitlefont \rightline{#1}}% +} + +% @author should come last, but may come many times. +% It can also be used inside @quotation. +% +\parseargdef\author{% + \def\temp{\quotation}% + \ifx\thisenv\temp + \def\quotationauthor{#1}% printed in \Equotation. + \else + \checkenv\titlepage + \ifseenauthor\else \vskip 0pt plus 1filll \seenauthortrue \fi + {\authorfont \leftline{#1}}% + \fi +} + + +%%% Set up page headings and footings. + +\let\thispage=\folio + +\newtoks\evenheadline % headline on even pages +\newtoks\oddheadline % headline on odd pages +\newtoks\evenfootline % footline on even pages +\newtoks\oddfootline % footline on odd pages + +% Now make TeX use those variables +\headline={{\textfonts\rm \ifodd\pageno \the\oddheadline + \else \the\evenheadline \fi}} +\footline={{\textfonts\rm \ifodd\pageno \the\oddfootline + \else \the\evenfootline \fi}\HEADINGShook} +\let\HEADINGShook=\relax + +% Commands to set those variables. +% For example, this is what @headings on does +% @evenheading @thistitle|@thispage|@thischapter +% @oddheading @thischapter|@thispage|@thistitle +% @evenfooting @thisfile|| +% @oddfooting ||@thisfile + + +\def\evenheading{\parsearg\evenheadingxxx} +\def\evenheadingxxx #1{\evenheadingyyy #1\|\|\|\|\finish} +\def\evenheadingyyy #1\|#2\|#3\|#4\finish{% +\global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} + +\def\oddheading{\parsearg\oddheadingxxx} +\def\oddheadingxxx #1{\oddheadingyyy #1\|\|\|\|\finish} +\def\oddheadingyyy #1\|#2\|#3\|#4\finish{% +\global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} + +\parseargdef\everyheading{\oddheadingxxx{#1}\evenheadingxxx{#1}}% + +\def\evenfooting{\parsearg\evenfootingxxx} +\def\evenfootingxxx #1{\evenfootingyyy #1\|\|\|\|\finish} +\def\evenfootingyyy #1\|#2\|#3\|#4\finish{% +\global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} + +\def\oddfooting{\parsearg\oddfootingxxx} +\def\oddfootingxxx #1{\oddfootingyyy #1\|\|\|\|\finish} +\def\oddfootingyyy #1\|#2\|#3\|#4\finish{% + \global\oddfootline = {\rlap{\centerline{#2}}\line{#1\hfil#3}}% + % + % Leave some space for the footline. Hopefully ok to assume + % @evenfooting will not be used by itself. + \global\advance\pageheight by -\baselineskip + \global\advance\vsize by -\baselineskip +} + +\parseargdef\everyfooting{\oddfootingxxx{#1}\evenfootingxxx{#1}} + + +% @headings double turns headings on for double-sided printing. +% @headings single turns headings on for single-sided printing. +% @headings off turns them off. +% @headings on same as @headings double, retained for compatibility. +% @headings after turns on double-sided headings after this page. +% @headings doubleafter turns on double-sided headings after this page. +% @headings singleafter turns on single-sided headings after this page. +% By default, they are off at the start of a document, +% and turned `on' after @end titlepage. + +\def\headings #1 {\csname HEADINGS#1\endcsname} + +\def\HEADINGSoff{% +\global\evenheadline={\hfil} \global\evenfootline={\hfil} +\global\oddheadline={\hfil} \global\oddfootline={\hfil}} +\HEADINGSoff +% When we turn headings on, set the page number to 1. +% For double-sided printing, put current file name in lower left corner, +% chapter name on inside top of right hand pages, document +% title on inside top of left hand pages, and page numbers on outside top +% edge of all pages. +\def\HEADINGSdouble{% +\global\pageno=1 +\global\evenfootline={\hfil} +\global\oddfootline={\hfil} +\global\evenheadline={\line{\folio\hfil\thistitle}} +\global\oddheadline={\line{\thischapter\hfil\folio}} +\global\let\contentsalignmacro = \chapoddpage +} +\let\contentsalignmacro = \chappager + +% For single-sided printing, chapter title goes across top left of page, +% page number on top right. +\def\HEADINGSsingle{% +\global\pageno=1 +\global\evenfootline={\hfil} +\global\oddfootline={\hfil} +\global\evenheadline={\line{\thischapter\hfil\folio}} +\global\oddheadline={\line{\thischapter\hfil\folio}} +\global\let\contentsalignmacro = \chappager +} +\def\HEADINGSon{\HEADINGSdouble} + +\def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdoublex} +\let\HEADINGSdoubleafter=\HEADINGSafter +\def\HEADINGSdoublex{% +\global\evenfootline={\hfil} +\global\oddfootline={\hfil} +\global\evenheadline={\line{\folio\hfil\thistitle}} +\global\oddheadline={\line{\thischapter\hfil\folio}} +\global\let\contentsalignmacro = \chapoddpage +} + +\def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex} +\def\HEADINGSsinglex{% +\global\evenfootline={\hfil} +\global\oddfootline={\hfil} +\global\evenheadline={\line{\thischapter\hfil\folio}} +\global\oddheadline={\line{\thischapter\hfil\folio}} +\global\let\contentsalignmacro = \chappager +} + +% Subroutines used in generating headings +% This produces Day Month Year style of output. +% Only define if not already defined, in case a txi-??.tex file has set +% up a different format (e.g., txi-cs.tex does this). +\ifx\today\undefined +\def\today{% + \number\day\space + \ifcase\month + \or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr + \or\putwordMMay\or\putwordMJun\or\putwordMJul\or\putwordMAug + \or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec + \fi + \space\number\year} +\fi + +% @settitle line... specifies the title of the document, for headings. +% It generates no output of its own. +\def\thistitle{\putwordNoTitle} +\def\settitle{\parsearg{\gdef\thistitle}} + + +\message{tables,} +% Tables -- @table, @ftable, @vtable, @item(x). + +% default indentation of table text +\newdimen\tableindent \tableindent=.8in +% default indentation of @itemize and @enumerate text +\newdimen\itemindent \itemindent=.3in +% margin between end of table item and start of table text. +\newdimen\itemmargin \itemmargin=.1in + +% used internally for \itemindent minus \itemmargin +\newdimen\itemmax + +% Note @table, @ftable, and @vtable define @item, @itemx, etc., with +% these defs. +% They also define \itemindex +% to index the item name in whatever manner is desired (perhaps none). + +\newif\ifitemxneedsnegativevskip + +\def\itemxpar{\par\ifitemxneedsnegativevskip\nobreak\vskip-\parskip\nobreak\fi} + +\def\internalBitem{\smallbreak \parsearg\itemzzz} +\def\internalBitemx{\itemxpar \parsearg\itemzzz} + +\def\itemzzz #1{\begingroup % + \advance\hsize by -\rightskip + \advance\hsize by -\tableindent + \setbox0=\hbox{\itemindicate{#1}}% + \itemindex{#1}% + \nobreak % This prevents a break before @itemx. + % + % If the item text does not fit in the space we have, put it on a line + % by itself, and do not allow a page break either before or after that + % line. We do not start a paragraph here because then if the next + % command is, e.g., @kindex, the whatsit would get put into the + % horizontal list on a line by itself, resulting in extra blank space. + \ifdim \wd0>\itemmax + % + % Make this a paragraph so we get the \parskip glue and wrapping, + % but leave it ragged-right. + \begingroup + \advance\leftskip by-\tableindent + \advance\hsize by\tableindent + \advance\rightskip by0pt plus1fil + \leavevmode\unhbox0\par + \endgroup + % + % We're going to be starting a paragraph, but we don't want the + % \parskip glue -- logically it's part of the @item we just started. + \nobreak \vskip-\parskip + % + % Stop a page break at the \parskip glue coming up. However, if + % what follows is an environment such as @example, there will be no + % \parskip glue; then the negative vskip we just inserted would + % cause the example and the item to crash together. So we use this + % bizarre value of 10001 as a signal to \aboveenvbreak to insert + % \parskip glue after all. Section titles are handled this way also. + % + \penalty 10001 + \endgroup + \itemxneedsnegativevskipfalse + \else + % The item text fits into the space. Start a paragraph, so that the + % following text (if any) will end up on the same line. + \noindent + % Do this with kerns and \unhbox so that if there is a footnote in + % the item text, it can migrate to the main vertical list and + % eventually be printed. + \nobreak\kern-\tableindent + \dimen0 = \itemmax \advance\dimen0 by \itemmargin \advance\dimen0 by -\wd0 + \unhbox0 + \nobreak\kern\dimen0 + \endgroup + \itemxneedsnegativevskiptrue + \fi +} + +\def\item{\errmessage{@item while not in a list environment}} +\def\itemx{\errmessage{@itemx while not in a list environment}} + +% @table, @ftable, @vtable. +\envdef\table{% + \let\itemindex\gobble + \tablecheck{table}% +} +\envdef\ftable{% + \def\itemindex ##1{\doind {fn}{\code{##1}}}% + \tablecheck{ftable}% +} +\envdef\vtable{% + \def\itemindex ##1{\doind {vr}{\code{##1}}}% + \tablecheck{vtable}% +} +\def\tablecheck#1{% + \ifnum \the\catcode`\^^M=\active + \endgroup + \errmessage{This command won't work in this context; perhaps the problem is + that we are \inenvironment\thisenv}% + \def\next{\doignore{#1}}% + \else + \let\next\tablex + \fi + \next +} +\def\tablex#1{% + \def\itemindicate{#1}% + \parsearg\tabley +} +\def\tabley#1{% + {% + \makevalueexpandable + \edef\temp{\noexpand\tablez #1\space\space\space}% + \expandafter + }\temp \endtablez +} +\def\tablez #1 #2 #3 #4\endtablez{% + \aboveenvbreak + \ifnum 0#1>0 \advance \leftskip by #1\mil \fi + \ifnum 0#2>0 \tableindent=#2\mil \fi + \ifnum 0#3>0 \advance \rightskip by #3\mil \fi + \itemmax=\tableindent + \advance \itemmax by -\itemmargin + \advance \leftskip by \tableindent + \exdentamount=\tableindent + \parindent = 0pt + \parskip = \smallskipamount + \ifdim \parskip=0pt \parskip=2pt \fi + \let\item = \internalBitem + \let\itemx = \internalBitemx +} +\def\Etable{\endgraf\afterenvbreak} +\let\Eftable\Etable +\let\Evtable\Etable +\let\Eitemize\Etable +\let\Eenumerate\Etable + +% This is the counter used by @enumerate, which is really @itemize + +\newcount \itemno + +\envdef\itemize{\parsearg\doitemize} + +\def\doitemize#1{% + \aboveenvbreak + \itemmax=\itemindent + \advance\itemmax by -\itemmargin + \advance\leftskip by \itemindent + \exdentamount=\itemindent + \parindent=0pt + \parskip=\smallskipamount + \ifdim\parskip=0pt \parskip=2pt \fi + \def\itemcontents{#1}% + % @itemize with no arg is equivalent to @itemize @bullet. + \ifx\itemcontents\empty\def\itemcontents{\bullet}\fi + \let\item=\itemizeitem +} + +% Definition of @item while inside @itemize and @enumerate. +% +\def\itemizeitem{% + \advance\itemno by 1 % for enumerations + {\let\par=\endgraf \smallbreak}% reasonable place to break + {% + % If the document has an @itemize directly after a section title, a + % \nobreak will be last on the list, and \sectionheading will have + % done a \vskip-\parskip. In that case, we don't want to zero + % parskip, or the item text will crash with the heading. On the + % other hand, when there is normal text preceding the item (as there + % usually is), we do want to zero parskip, or there would be too much + % space. In that case, we won't have a \nobreak before. At least + % that's the theory. + \ifnum\lastpenalty<10000 \parskip=0in \fi + \noindent + \hbox to 0pt{\hss \itemcontents \kern\itemmargin}% + \vadjust{\penalty 1200}}% not good to break after first line of item. + \flushcr +} + +% \splitoff TOKENS\endmark defines \first to be the first token in +% TOKENS, and \rest to be the remainder. +% +\def\splitoff#1#2\endmark{\def\first{#1}\def\rest{#2}}% + +% Allow an optional argument of an uppercase letter, lowercase letter, +% or number, to specify the first label in the enumerated list. No +% argument is the same as `1'. +% +\envparseargdef\enumerate{\enumeratey #1 \endenumeratey} +\def\enumeratey #1 #2\endenumeratey{% + % If we were given no argument, pretend we were given `1'. + \def\thearg{#1}% + \ifx\thearg\empty \def\thearg{1}\fi + % + % Detect if the argument is a single token. If so, it might be a + % letter. Otherwise, the only valid thing it can be is a number. + % (We will always have one token, because of the test we just made. + % This is a good thing, since \splitoff doesn't work given nothing at + % all -- the first parameter is undelimited.) + \expandafter\splitoff\thearg\endmark + \ifx\rest\empty + % Only one token in the argument. It could still be anything. + % A ``lowercase letter'' is one whose \lccode is nonzero. + % An ``uppercase letter'' is one whose \lccode is both nonzero, and + % not equal to itself. + % Otherwise, we assume it's a number. + % + % We need the \relax at the end of the \ifnum lines to stop TeX from + % continuing to look for a . + % + \ifnum\lccode\expandafter`\thearg=0\relax + \numericenumerate % a number (we hope) + \else + % It's a letter. + \ifnum\lccode\expandafter`\thearg=\expandafter`\thearg\relax + \lowercaseenumerate % lowercase letter + \else + \uppercaseenumerate % uppercase letter + \fi + \fi + \else + % Multiple tokens in the argument. We hope it's a number. + \numericenumerate + \fi +} + +% An @enumerate whose labels are integers. The starting integer is +% given in \thearg. +% +\def\numericenumerate{% + \itemno = \thearg + \startenumeration{\the\itemno}% +} + +% The starting (lowercase) letter is in \thearg. +\def\lowercaseenumerate{% + \itemno = \expandafter`\thearg + \startenumeration{% + % Be sure we're not beyond the end of the alphabet. + \ifnum\itemno=0 + \errmessage{No more lowercase letters in @enumerate; get a bigger + alphabet}% + \fi + \char\lccode\itemno + }% +} + +% The starting (uppercase) letter is in \thearg. +\def\uppercaseenumerate{% + \itemno = \expandafter`\thearg + \startenumeration{% + % Be sure we're not beyond the end of the alphabet. + \ifnum\itemno=0 + \errmessage{No more uppercase letters in @enumerate; get a bigger + alphabet} + \fi + \char\uccode\itemno + }% +} + +% Call \doitemize, adding a period to the first argument and supplying the +% common last two arguments. Also subtract one from the initial value in +% \itemno, since @item increments \itemno. +% +\def\startenumeration#1{% + \advance\itemno by -1 + \doitemize{#1.}\flushcr +} + +% @alphaenumerate and @capsenumerate are abbreviations for giving an arg +% to @enumerate. +% +\def\alphaenumerate{\enumerate{a}} +\def\capsenumerate{\enumerate{A}} +\def\Ealphaenumerate{\Eenumerate} +\def\Ecapsenumerate{\Eenumerate} + + +% @multitable macros +% Amy Hendrickson, 8/18/94, 3/6/96 +% +% @multitable ... @end multitable will make as many columns as desired. +% Contents of each column will wrap at width given in preamble. Width +% can be specified either with sample text given in a template line, +% or in percent of \hsize, the current width of text on page. + +% Table can continue over pages but will only break between lines. + +% To make preamble: +% +% Either define widths of columns in terms of percent of \hsize: +% @multitable @columnfractions .25 .3 .45 +% @item ... +% +% Numbers following @columnfractions are the percent of the total +% current hsize to be used for each column. You may use as many +% columns as desired. + + +% Or use a template: +% @multitable {Column 1 template} {Column 2 template} {Column 3 template} +% @item ... +% using the widest term desired in each column. + +% Each new table line starts with @item, each subsequent new column +% starts with @tab. Empty columns may be produced by supplying @tab's +% with nothing between them for as many times as empty columns are needed, +% ie, @tab@tab@tab will produce two empty columns. + +% @item, @tab do not need to be on their own lines, but it will not hurt +% if they are. + +% Sample multitable: + +% @multitable {Column 1 template} {Column 2 template} {Column 3 template} +% @item first col stuff @tab second col stuff @tab third col +% @item +% first col stuff +% @tab +% second col stuff +% @tab +% third col +% @item first col stuff @tab second col stuff +% @tab Many paragraphs of text may be used in any column. +% +% They will wrap at the width determined by the template. +% @item@tab@tab This will be in third column. +% @end multitable + +% Default dimensions may be reset by user. +% @multitableparskip is vertical space between paragraphs in table. +% @multitableparindent is paragraph indent in table. +% @multitablecolmargin is horizontal space to be left between columns. +% @multitablelinespace is space to leave between table items, baseline +% to baseline. +% 0pt means it depends on current normal line spacing. +% +\newskip\multitableparskip +\newskip\multitableparindent +\newdimen\multitablecolspace +\newskip\multitablelinespace +\multitableparskip=0pt +\multitableparindent=6pt +\multitablecolspace=12pt +\multitablelinespace=0pt + +% Macros used to set up halign preamble: +% +\let\endsetuptable\relax +\def\xendsetuptable{\endsetuptable} +\let\columnfractions\relax +\def\xcolumnfractions{\columnfractions} +\newif\ifsetpercent + +% #1 is the @columnfraction, usually a decimal number like .5, but might +% be just 1. We just use it, whatever it is. +% +\def\pickupwholefraction#1 {% + \global\advance\colcount by 1 + \expandafter\xdef\csname col\the\colcount\endcsname{#1\hsize}% + \setuptable +} + +\newcount\colcount +\def\setuptable#1{% + \def\firstarg{#1}% + \ifx\firstarg\xendsetuptable + \let\go = \relax + \else + \ifx\firstarg\xcolumnfractions + \global\setpercenttrue + \else + \ifsetpercent + \let\go\pickupwholefraction + \else + \global\advance\colcount by 1 + \setbox0=\hbox{#1\unskip\space}% Add a normal word space as a + % separator; typically that is always in the input, anyway. + \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}% + \fi + \fi + \ifx\go\pickupwholefraction + % Put the argument back for the \pickupwholefraction call, so + % we'll always have a period there to be parsed. + \def\go{\pickupwholefraction#1}% + \else + \let\go = \setuptable + \fi% + \fi + \go +} + +% multitable-only commands. +% +% @headitem starts a heading row, which we typeset in bold. +% Assignments have to be global since we are inside the implicit group +% of an alignment entry. Note that \everycr resets \everytab. +\def\headitem{\checkenv\multitable \crcr \global\everytab={\bf}\the\everytab}% +% +% A \tab used to include \hskip1sp. But then the space in a template +% line is not enough. That is bad. So let's go back to just `&' until +% we encounter the problem it was intended to solve again. +% --karl, nathan@acm.org, 20apr99. +\def\tab{\checkenv\multitable &\the\everytab}% + +% @multitable ... @end multitable definitions: +% +\newtoks\everytab % insert after every tab. +% +\envdef\multitable{% + \vskip\parskip + \startsavinginserts + % + % @item within a multitable starts a normal row. + % We use \def instead of \let so that if one of the multitable entries + % contains an @itemize, we don't choke on the \item (seen as \crcr aka + % \endtemplate) expanding \doitemize. + \def\item{\crcr}% + % + \tolerance=9500 + \hbadness=9500 + \setmultitablespacing + \parskip=\multitableparskip + \parindent=\multitableparindent + \overfullrule=0pt + \global\colcount=0 + % + \everycr = {% + \noalign{% + \global\everytab={}% + \global\colcount=0 % Reset the column counter. + % Check for saved footnotes, etc. + \checkinserts + % Keeps underfull box messages off when table breaks over pages. + %\filbreak + % Maybe so, but it also creates really weird page breaks when the + % table breaks over pages. Wouldn't \vfil be better? Wait until the + % problem manifests itself, so it can be fixed for real --karl. + }% + }% + % + \parsearg\domultitable +} +\def\domultitable#1{% + % To parse everything between @multitable and @item: + \setuptable#1 \endsetuptable + % + % This preamble sets up a generic column definition, which will + % be used as many times as user calls for columns. + % \vtop will set a single line and will also let text wrap and + % continue for many paragraphs if desired. + \halign\bgroup &% + \global\advance\colcount by 1 + \multistrut + \vtop{% + % Use the current \colcount to find the correct column width: + \hsize=\expandafter\csname col\the\colcount\endcsname + % + % In order to keep entries from bumping into each other + % we will add a \leftskip of \multitablecolspace to all columns after + % the first one. + % + % If a template has been used, we will add \multitablecolspace + % to the width of each template entry. + % + % If the user has set preamble in terms of percent of \hsize we will + % use that dimension as the width of the column, and the \leftskip + % will keep entries from bumping into each other. Table will start at + % left margin and final column will justify at right margin. + % + % Make sure we don't inherit \rightskip from the outer environment. + \rightskip=0pt + \ifnum\colcount=1 + % The first column will be indented with the surrounding text. + \advance\hsize by\leftskip + \else + \ifsetpercent \else + % If user has not set preamble in terms of percent of \hsize + % we will advance \hsize by \multitablecolspace. + \advance\hsize by \multitablecolspace + \fi + % In either case we will make \leftskip=\multitablecolspace: + \leftskip=\multitablecolspace + \fi + % Ignoring space at the beginning and end avoids an occasional spurious + % blank line, when TeX decides to break the line at the space before the + % box from the multistrut, so the strut ends up on a line by itself. + % For example: + % @multitable @columnfractions .11 .89 + % @item @code{#} + % @tab Legal holiday which is valid in major parts of the whole country. + % Is automatically provided with highlighting sequences respectively + % marking characters. + \noindent\ignorespaces##\unskip\multistrut + }\cr +} +\def\Emultitable{% + \crcr + \egroup % end the \halign + \global\setpercentfalse +} + +\def\setmultitablespacing{% + \def\multistrut{\strut}% just use the standard line spacing + % + % Compute \multitablelinespace (if not defined by user) for use in + % \multitableparskip calculation. We used define \multistrut based on + % this, but (ironically) that caused the spacing to be off. + % See bug-texinfo report from Werner Lemberg, 31 Oct 2004 12:52:20 +0100. +\ifdim\multitablelinespace=0pt +\setbox0=\vbox{X}\global\multitablelinespace=\the\baselineskip +\global\advance\multitablelinespace by-\ht0 +\fi +%% Test to see if parskip is larger than space between lines of +%% table. If not, do nothing. +%% If so, set to same dimension as multitablelinespace. +\ifdim\multitableparskip>\multitablelinespace +\global\multitableparskip=\multitablelinespace +\global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller + %% than skip between lines in the table. +\fi% +\ifdim\multitableparskip=0pt +\global\multitableparskip=\multitablelinespace +\global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller + %% than skip between lines in the table. +\fi} + + +\message{conditionals,} + +% @iftex, @ifnotdocbook, @ifnothtml, @ifnotinfo, @ifnotplaintext, +% @ifnotxml always succeed. They currently do nothing; we don't +% attempt to check whether the conditionals are properly nested. But we +% have to remember that they are conditionals, so that @end doesn't +% attempt to close an environment group. +% +\def\makecond#1{% + \expandafter\let\csname #1\endcsname = \relax + \expandafter\let\csname iscond.#1\endcsname = 1 +} +\makecond{iftex} +\makecond{ifnotdocbook} +\makecond{ifnothtml} +\makecond{ifnotinfo} +\makecond{ifnotplaintext} +\makecond{ifnotxml} + +% Ignore @ignore, @ifhtml, @ifinfo, and the like. +% +\def\direntry{\doignore{direntry}} +\def\documentdescription{\doignore{documentdescription}} +\def\docbook{\doignore{docbook}} +\def\html{\doignore{html}} +\def\ifdocbook{\doignore{ifdocbook}} +\def\ifhtml{\doignore{ifhtml}} +\def\ifinfo{\doignore{ifinfo}} +\def\ifnottex{\doignore{ifnottex}} +\def\ifplaintext{\doignore{ifplaintext}} +\def\ifxml{\doignore{ifxml}} +\def\ignore{\doignore{ignore}} +\def\menu{\doignore{menu}} +\def\xml{\doignore{xml}} + +% Ignore text until a line `@end #1', keeping track of nested conditionals. +% +% A count to remember the depth of nesting. +\newcount\doignorecount + +\def\doignore#1{\begingroup + % Scan in ``verbatim'' mode: + \catcode`\@ = \other + \catcode`\{ = \other + \catcode`\} = \other + % + % Make sure that spaces turn into tokens that match what \doignoretext wants. + \spaceisspace + % + % Count number of #1's that we've seen. + \doignorecount = 0 + % + % Swallow text until we reach the matching `@end #1'. + \dodoignore{#1}% +} + +{ \catcode`_=11 % We want to use \_STOP_ which cannot appear in texinfo source. + \obeylines % + % + \gdef\dodoignore#1{% + % #1 contains the command name as a string, e.g., `ifinfo'. + % + % Define a command to find the next `@end #1', which must be on a line + % by itself. + \long\def\doignoretext##1^^M@end #1{\doignoretextyyy##1^^M@#1\_STOP_}% + % And this command to find another #1 command, at the beginning of a + % line. (Otherwise, we would consider a line `@c @ifset', for + % example, to count as an @ifset for nesting.) + \long\def\doignoretextyyy##1^^M@#1##2\_STOP_{\doignoreyyy{##2}\_STOP_}% + % + % And now expand that command. + \obeylines % + \doignoretext ^^M% + }% +} + +\def\doignoreyyy#1{% + \def\temp{#1}% + \ifx\temp\empty % Nothing found. + \let\next\doignoretextzzz + \else % Found a nested condition, ... + \advance\doignorecount by 1 + \let\next\doignoretextyyy % ..., look for another. + % If we're here, #1 ends with ^^M\ifinfo (for example). + \fi + \next #1% the token \_STOP_ is present just after this macro. +} + +% We have to swallow the remaining "\_STOP_". +% +\def\doignoretextzzz#1{% + \ifnum\doignorecount = 0 % We have just found the outermost @end. + \let\next\enddoignore + \else % Still inside a nested condition. + \advance\doignorecount by -1 + \let\next\doignoretext % Look for the next @end. + \fi + \next +} + +% Finish off ignored text. +\def\enddoignore{\endgroup\ignorespaces} + + +% @set VAR sets the variable VAR to an empty value. +% @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE. +% +% Since we want to separate VAR from REST-OF-LINE (which might be +% empty), we can't just use \parsearg; we have to insert a space of our +% own to delimit the rest of the line, and then take it out again if we +% didn't need it. +% We rely on the fact that \parsearg sets \catcode`\ =10. +% +\parseargdef\set{\setyyy#1 \endsetyyy} +\def\setyyy#1 #2\endsetyyy{% + {% + \makevalueexpandable + \def\temp{#2}% + \edef\next{\gdef\makecsname{SET#1}}% + \ifx\temp\empty + \next{}% + \else + \setzzz#2\endsetzzz + \fi + }% +} +% Remove the trailing space \setxxx inserted. +\def\setzzz#1 \endsetzzz{\next{#1}} + +% @clear VAR clears (i.e., unsets) the variable VAR. +% +\parseargdef\clear{% + {% + \makevalueexpandable + \global\expandafter\let\csname SET#1\endcsname=\relax + }% +} + +% @value{foo} gets the text saved in variable foo. +\def\value{\begingroup\makevalueexpandable\valuexxx} +\def\valuexxx#1{\expandablevalue{#1}\endgroup} +{ + \catcode`\- = \active \catcode`\_ = \active + % + \gdef\makevalueexpandable{% + \let\value = \expandablevalue + % We don't want these characters active, ... + \catcode`\-=\other \catcode`\_=\other + % ..., but we might end up with active ones in the argument if + % we're called from @code, as @code{@value{foo-bar_}}, though. + % So \let them to their normal equivalents. + \let-\realdash \let_\normalunderscore + } +} + +% We have this subroutine so that we can handle at least some @value's +% properly in indexes (we call \makevalueexpandable in \indexdummies). +% The command has to be fully expandable (if the variable is set), since +% the result winds up in the index file. This means that if the +% variable's value contains other Texinfo commands, it's almost certain +% it will fail (although perhaps we could fix that with sufficient work +% to do a one-level expansion on the result, instead of complete). +% +\def\expandablevalue#1{% + \expandafter\ifx\csname SET#1\endcsname\relax + {[No value for ``#1'']}% + \message{Variable `#1', used in @value, is not set.}% + \else + \csname SET#1\endcsname + \fi +} + +% @ifset VAR ... @end ifset reads the `...' iff VAR has been defined +% with @set. +% +% To get special treatment of `@end ifset,' call \makeond and the redefine. +% +\makecond{ifset} +\def\ifset{\parsearg{\doifset{\let\next=\ifsetfail}}} +\def\doifset#1#2{% + {% + \makevalueexpandable + \let\next=\empty + \expandafter\ifx\csname SET#2\endcsname\relax + #1% If not set, redefine \next. + \fi + \expandafter + }\next +} +\def\ifsetfail{\doignore{ifset}} + +% @ifclear VAR ... @end ifclear reads the `...' iff VAR has never been +% defined with @set, or has been undefined with @clear. +% +% The `\else' inside the `\doifset' parameter is a trick to reuse the +% above code: if the variable is not set, do nothing, if it is set, +% then redefine \next to \ifclearfail. +% +\makecond{ifclear} +\def\ifclear{\parsearg{\doifset{\else \let\next=\ifclearfail}}} +\def\ifclearfail{\doignore{ifclear}} + +% @dircategory CATEGORY -- specify a category of the dir file +% which this file should belong to. Ignore this in TeX. +\let\dircategory=\comment + +% @defininfoenclose. +\let\definfoenclose=\comment + + +\message{indexing,} +% Index generation facilities + +% Define \newwrite to be identical to plain tex's \newwrite +% except not \outer, so it can be used within macros and \if's. +\edef\newwrite{\makecsname{ptexnewwrite}} + +% \newindex {foo} defines an index named foo. +% It automatically defines \fooindex such that +% \fooindex ...rest of line... puts an entry in the index foo. +% It also defines \fooindfile to be the number of the output channel for +% the file that accumulates this index. The file's extension is foo. +% The name of an index should be no more than 2 characters long +% for the sake of vms. +% +\def\newindex#1{% + \iflinks + \expandafter\newwrite \csname#1indfile\endcsname + \openout \csname#1indfile\endcsname \jobname.#1 % Open the file + \fi + \expandafter\xdef\csname#1index\endcsname{% % Define @#1index + \noexpand\doindex{#1}} +} + +% @defindex foo == \newindex{foo} +% +\def\defindex{\parsearg\newindex} + +% Define @defcodeindex, like @defindex except put all entries in @code. +% +\def\defcodeindex{\parsearg\newcodeindex} +% +\def\newcodeindex#1{% + \iflinks + \expandafter\newwrite \csname#1indfile\endcsname + \openout \csname#1indfile\endcsname \jobname.#1 + \fi + \expandafter\xdef\csname#1index\endcsname{% + \noexpand\docodeindex{#1}}% +} + + +% @synindex foo bar makes index foo feed into index bar. +% Do this instead of @defindex foo if you don't want it as a separate index. +% +% @syncodeindex foo bar similar, but put all entries made for index foo +% inside @code. +% +\def\synindex#1 #2 {\dosynindex\doindex{#1}{#2}} +\def\syncodeindex#1 #2 {\dosynindex\docodeindex{#1}{#2}} + +% #1 is \doindex or \docodeindex, #2 the index getting redefined (foo), +% #3 the target index (bar). +\def\dosynindex#1#2#3{% + % Only do \closeout if we haven't already done it, else we'll end up + % closing the target index. + \expandafter \ifx\csname donesynindex#2\endcsname \undefined + % The \closeout helps reduce unnecessary open files; the limit on the + % Acorn RISC OS is a mere 16 files. + \expandafter\closeout\csname#2indfile\endcsname + \expandafter\let\csname\donesynindex#2\endcsname = 1 + \fi + % redefine \fooindfile: + \expandafter\let\expandafter\temp\expandafter=\csname#3indfile\endcsname + \expandafter\let\csname#2indfile\endcsname=\temp + % redefine \fooindex: + \expandafter\xdef\csname#2index\endcsname{\noexpand#1{#3}}% +} + +% Define \doindex, the driver for all \fooindex macros. +% Argument #1 is generated by the calling \fooindex macro, +% and it is "foo", the name of the index. + +% \doindex just uses \parsearg; it calls \doind for the actual work. +% This is because \doind is more useful to call from other macros. + +% There is also \dosubind {index}{topic}{subtopic} +% which makes an entry in a two-level index such as the operation index. + +\def\doindex#1{\edef\indexname{#1}\parsearg\singleindexer} +\def\singleindexer #1{\doind{\indexname}{#1}} + +% like the previous two, but they put @code around the argument. +\def\docodeindex#1{\edef\indexname{#1}\parsearg\singlecodeindexer} +\def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}} + +% Take care of Texinfo commands that can appear in an index entry. +% Since there are some commands we want to expand, and others we don't, +% we have to laboriously prevent expansion for those that we don't. +% +\def\indexdummies{% + \def\@{@}% change to @@ when we switch to @ as escape char in index files. + \def\ {\realbackslash\space }% + % Need these in case \tex is in effect and \{ is a \delimiter again. + % But can't use \lbracecmd and \rbracecmd because texindex assumes + % braces and backslashes are used only as delimiters. + \let\{ = \mylbrace + \let\} = \myrbrace + % + % \definedummyword defines \#1 as \realbackslash #1\space, thus + % effectively preventing its expansion. This is used only for control + % words, not control letters, because the \space would be incorrect + % for control characters, but is needed to separate the control word + % from whatever follows. + % + % For control letters, we have \definedummyletter, which omits the + % space. + % + % These can be used both for control words that take an argument and + % those that do not. If it is followed by {arg} in the input, then + % that will dutifully get written to the index (or wherever). + % + \def\definedummyword##1{% + \expandafter\def\csname ##1\endcsname{\realbackslash ##1\space}% + }% + \def\definedummyletter##1{% + \expandafter\def\csname ##1\endcsname{\realbackslash ##1}% + }% + \let\definedummyaccent\definedummyletter + % + % Do the redefinitions. + \commondummies +} + +% For the aux file, @ is the escape character. So we want to redefine +% everything using @ instead of \realbackslash. When everything uses +% @, this will be simpler. +% +\def\atdummies{% + \def\@{@@}% + \def\ {@ }% + \let\{ = \lbraceatcmd + \let\} = \rbraceatcmd + % + % (See comments in \indexdummies.) + \def\definedummyword##1{% + \expandafter\def\csname ##1\endcsname{@##1\space}% + }% + \def\definedummyletter##1{% + \expandafter\def\csname ##1\endcsname{@##1}% + }% + \let\definedummyaccent\definedummyletter + % + % Do the redefinitions. + \commondummies +} + +% Called from \indexdummies and \atdummies. \definedummyword and +% \definedummyletter must be defined first. +% +\def\commondummies{% + % + \normalturnoffactive + % + \commondummiesnofonts + % + \definedummyletter{_}% + % + % Non-English letters. + \definedummyword{AA}% + \definedummyword{AE}% + \definedummyword{L}% + \definedummyword{OE}% + \definedummyword{O}% + \definedummyword{aa}% + \definedummyword{ae}% + \definedummyword{l}% + \definedummyword{oe}% + \definedummyword{o}% + \definedummyword{ss}% + \definedummyword{exclamdown}% + \definedummyword{questiondown}% + \definedummyword{ordf}% + \definedummyword{ordm}% + % + % Although these internal commands shouldn't show up, sometimes they do. + \definedummyword{bf}% + \definedummyword{gtr}% + \definedummyword{hat}% + \definedummyword{less}% + \definedummyword{sf}% + \definedummyword{sl}% + \definedummyword{tclose}% + \definedummyword{tt}% + % + \definedummyword{LaTeX}% + \definedummyword{TeX}% + % + % Assorted special characters. + \definedummyword{bullet}% + \definedummyword{comma}% + \definedummyword{copyright}% + \definedummyword{registeredsymbol}% + \definedummyword{dots}% + \definedummyword{enddots}% + \definedummyword{equiv}% + \definedummyword{error}% + \definedummyword{euro}% + \definedummyword{expansion}% + \definedummyword{minus}% + \definedummyword{pounds}% + \definedummyword{point}% + \definedummyword{print}% + \definedummyword{result}% + % + % Handle some cases of @value -- where it does not contain any + % (non-fully-expandable) commands. + \makevalueexpandable + % + % Normal spaces, not active ones. + \unsepspaces + % + % No macro expansion. + \turnoffmacros +} + +% \commondummiesnofonts: common to \commondummies and \indexnofonts. +% +% Better have this without active chars. +{ + \catcode`\~=\other + \gdef\commondummiesnofonts{% + % Control letters and accents. + \definedummyletter{!}% + \definedummyaccent{"}% + \definedummyaccent{'}% + \definedummyletter{*}% + \definedummyaccent{,}% + \definedummyletter{.}% + \definedummyletter{/}% + \definedummyletter{:}% + \definedummyaccent{=}% + \definedummyletter{?}% + \definedummyaccent{^}% + \definedummyaccent{`}% + \definedummyaccent{~}% + \definedummyword{u}% + \definedummyword{v}% + \definedummyword{H}% + \definedummyword{dotaccent}% + \definedummyword{ringaccent}% + \definedummyword{tieaccent}% + \definedummyword{ubaraccent}% + \definedummyword{udotaccent}% + \definedummyword{dotless}% + % + % Texinfo font commands. + \definedummyword{b}% + \definedummyword{i}% + \definedummyword{r}% + \definedummyword{sc}% + \definedummyword{t}% + % + % Commands that take arguments. + \definedummyword{acronym}% + \definedummyword{cite}% + \definedummyword{code}% + \definedummyword{command}% + \definedummyword{dfn}% + \definedummyword{emph}% + \definedummyword{env}% + \definedummyword{file}% + \definedummyword{kbd}% + \definedummyword{key}% + \definedummyword{math}% + \definedummyword{option}% + \definedummyword{samp}% + \definedummyword{strong}% + \definedummyword{tie}% + \definedummyword{uref}% + \definedummyword{url}% + \definedummyword{var}% + \definedummyword{verb}% + \definedummyword{w}% + } +} + +% \indexnofonts is used when outputting the strings to sort the index +% by, and when constructing control sequence names. It eliminates all +% control sequences and just writes whatever the best ASCII sort string +% would be for a given command (usually its argument). +% +\def\indexnofonts{% + % Accent commands should become @asis. + \def\definedummyaccent##1{% + \expandafter\let\csname ##1\endcsname\asis + }% + % We can just ignore other control letters. + \def\definedummyletter##1{% + \expandafter\def\csname ##1\endcsname{}% + }% + % Hopefully, all control words can become @asis. + \let\definedummyword\definedummyaccent + % + \commondummiesnofonts + % + % Don't no-op \tt, since it isn't a user-level command + % and is used in the definitions of the active chars like <, >, |, etc. + % Likewise with the other plain tex font commands. + %\let\tt=\asis + % + \def\ { }% + \def\@{@}% + % how to handle braces? + \def\_{\normalunderscore}% + % + % Non-English letters. + \def\AA{AA}% + \def\AE{AE}% + \def\L{L}% + \def\OE{OE}% + \def\O{O}% + \def\aa{aa}% + \def\ae{ae}% + \def\l{l}% + \def\oe{oe}% + \def\o{o}% + \def\ss{ss}% + \def\exclamdown{!}% + \def\questiondown{?}% + \def\ordf{a}% + \def\ordm{o}% + % + \def\LaTeX{LaTeX}% + \def\TeX{TeX}% + % + % Assorted special characters. + % (The following {} will end up in the sort string, but that's ok.) + \def\bullet{bullet}% + \def\comma{,}% + \def\copyright{copyright}% + \def\registeredsymbol{R}% + \def\dots{...}% + \def\enddots{...}% + \def\equiv{==}% + \def\error{error}% + \def\euro{euro}% + \def\expansion{==>}% + \def\minus{-}% + \def\pounds{pounds}% + \def\point{.}% + \def\print{-|}% + \def\result{=>}% + % + % Don't write macro names. + \emptyusermacros +} + +\let\indexbackslash=0 %overridden during \printindex. +\let\SETmarginindex=\relax % put index entries in margin (undocumented)? + +% Most index entries go through here, but \dosubind is the general case. +% #1 is the index name, #2 is the entry text. +\def\doind#1#2{\dosubind{#1}{#2}{}} + +% Workhorse for all \fooindexes. +% #1 is name of index, #2 is stuff to put there, #3 is subentry -- +% empty if called from \doind, as we usually are (the main exception +% is with most defuns, which call us directly). +% +\def\dosubind#1#2#3{% + \iflinks + {% + % Store the main index entry text (including the third arg). + \toks0 = {#2}% + % If third arg is present, precede it with a space. + \def\thirdarg{#3}% + \ifx\thirdarg\empty \else + \toks0 = \expandafter{\the\toks0 \space #3}% + \fi + % + \edef\writeto{\csname#1indfile\endcsname}% + % + \ifvmode + \dosubindsanitize + \else + \dosubindwrite + \fi + }% + \fi +} + +% Write the entry in \toks0 to the index file: +% +\def\dosubindwrite{% + % Put the index entry in the margin if desired. + \ifx\SETmarginindex\relax\else + \insert\margin{\hbox{\vrule height8pt depth3pt width0pt \the\toks0}}% + \fi + % + % Remember, we are within a group. + \indexdummies % Must do this here, since \bf, etc expand at this stage + \escapechar=`\\ + \def\backslashcurfont{\indexbackslash}% \indexbackslash isn't defined now + % so it will be output as is; and it will print as backslash. + % + % Process the index entry with all font commands turned off, to + % get the string to sort by. + {\indexnofonts + \edef\temp{\the\toks0}% need full expansion + \xdef\indexsorttmp{\temp}% + }% + % + % Set up the complete index entry, with both the sort key and + % the original text, including any font commands. We write + % three arguments to \entry to the .?? file (four in the + % subentry case), texindex reduces to two when writing the .??s + % sorted result. + \edef\temp{% + \write\writeto{% + \string\entry{\indexsorttmp}{\noexpand\folio}{\the\toks0}}% + }% + \temp +} + +% Take care of unwanted page breaks: +% +% If a skip is the last thing on the list now, preserve it +% by backing up by \lastskip, doing the \write, then inserting +% the skip again. Otherwise, the whatsit generated by the +% \write will make \lastskip zero. The result is that sequences +% like this: +% @end defun +% @tindex whatever +% @defun ... +% will have extra space inserted, because the \medbreak in the +% start of the @defun won't see the skip inserted by the @end of +% the previous defun. +% +% But don't do any of this if we're not in vertical mode. We +% don't want to do a \vskip and prematurely end a paragraph. +% +% Avoid page breaks due to these extra skips, too. +% +% But wait, there is a catch there: +% We'll have to check whether \lastskip is zero skip. \ifdim is not +% sufficient for this purpose, as it ignores stretch and shrink parts +% of the skip. The only way seems to be to check the textual +% representation of the skip. +% +% The following is almost like \def\zeroskipmacro{0.0pt} except that +% the ``p'' and ``t'' characters have catcode \other, not 11 (letter). +% +\edef\zeroskipmacro{\expandafter\the\csname z@skip\endcsname} +% +% ..., ready, GO: +% +\def\dosubindsanitize{% + % \lastskip and \lastpenalty cannot both be nonzero simultaneously. + \skip0 = \lastskip + \edef\lastskipmacro{\the\lastskip}% + \count255 = \lastpenalty + % + % If \lastskip is nonzero, that means the last item was a + % skip. And since a skip is discardable, that means this + % -\skip0 glue we're inserting is preceded by a + % non-discardable item, therefore it is not a potential + % breakpoint, therefore no \nobreak needed. + \ifx\lastskipmacro\zeroskipmacro + \else + \vskip-\skip0 + \fi + % + \dosubindwrite + % + \ifx\lastskipmacro\zeroskipmacro + % If \lastskip was zero, perhaps the last item was a penalty, and + % perhaps it was >=10000, e.g., a \nobreak. In that case, we want + % to re-insert the same penalty (values >10000 are used for various + % signals); since we just inserted a non-discardable item, any + % following glue (such as a \parskip) would be a breakpoint. For example: + % + % @deffn deffn-whatever + % @vindex index-whatever + % Description. + % would allow a break between the index-whatever whatsit + % and the "Description." paragraph. + \ifnum\count255>9999 \penalty\count255 \fi + \else + % On the other hand, if we had a nonzero \lastskip, + % this make-up glue would be preceded by a non-discardable item + % (the whatsit from the \write), so we must insert a \nobreak. + \nobreak\vskip\skip0 + \fi +} + +% The index entry written in the file actually looks like +% \entry {sortstring}{page}{topic} +% or +% \entry {sortstring}{page}{topic}{subtopic} +% The texindex program reads in these files and writes files +% containing these kinds of lines: +% \initial {c} +% before the first topic whose initial is c +% \entry {topic}{pagelist} +% for a topic that is used without subtopics +% \primary {topic} +% for the beginning of a topic that is used with subtopics +% \secondary {subtopic}{pagelist} +% for each subtopic. + +% Define the user-accessible indexing commands +% @findex, @vindex, @kindex, @cindex. + +\def\findex {\fnindex} +\def\kindex {\kyindex} +\def\cindex {\cpindex} +\def\vindex {\vrindex} +\def\tindex {\tpindex} +\def\pindex {\pgindex} + +\def\cindexsub {\begingroup\obeylines\cindexsub} +{\obeylines % +\gdef\cindexsub "#1" #2^^M{\endgroup % +\dosubind{cp}{#2}{#1}}} + +% Define the macros used in formatting output of the sorted index material. + +% @printindex causes a particular index (the ??s file) to get printed. +% It does not print any chapter heading (usually an @unnumbered). +% +\parseargdef\printindex{\begingroup + \dobreak \chapheadingskip{10000}% + % + \smallfonts \rm + \tolerance = 9500 + \everypar = {}% don't want the \kern\-parindent from indentation suppression. + % + % See if the index file exists and is nonempty. + % Change catcode of @ here so that if the index file contains + % \initial {@} + % as its first line, TeX doesn't complain about mismatched braces + % (because it thinks @} is a control sequence). + \catcode`\@ = 11 + \openin 1 \jobname.#1s + \ifeof 1 + % \enddoublecolumns gets confused if there is no text in the index, + % and it loses the chapter title and the aux file entries for the + % index. The easiest way to prevent this problem is to make sure + % there is some text. + \putwordIndexNonexistent + \else + % + % If the index file exists but is empty, then \openin leaves \ifeof + % false. We have to make TeX try to read something from the file, so + % it can discover if there is anything in it. + \read 1 to \temp + \ifeof 1 + \putwordIndexIsEmpty + \else + % Index files are almost Texinfo source, but we use \ as the escape + % character. It would be better to use @, but that's too big a change + % to make right now. + \def\indexbackslash{\backslashcurfont}% + \catcode`\\ = 0 + \escapechar = `\\ + \begindoublecolumns + \input \jobname.#1s + \enddoublecolumns + \fi + \fi + \closein 1 +\endgroup} + +% These macros are used by the sorted index file itself. +% Change them to control the appearance of the index. + +\def\initial#1{{% + % Some minor font changes for the special characters. + \let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt + % + % Remove any glue we may have, we'll be inserting our own. + \removelastskip + % + % We like breaks before the index initials, so insert a bonus. + \nobreak + \vskip 0pt plus 3\baselineskip + \penalty 0 + \vskip 0pt plus -3\baselineskip + % + % Typeset the initial. Making this add up to a whole number of + % baselineskips increases the chance of the dots lining up from column + % to column. It still won't often be perfect, because of the stretch + % we need before each entry, but it's better. + % + % No shrink because it confuses \balancecolumns. + \vskip 1.67\baselineskip plus .5\baselineskip + \leftline{\secbf #1}% + % Do our best not to break after the initial. + \nobreak + \vskip .33\baselineskip plus .1\baselineskip +}} + +% \entry typesets a paragraph consisting of the text (#1), dot leaders, and +% then page number (#2) flushed to the right margin. It is used for index +% and table of contents entries. The paragraph is indented by \leftskip. +% +% A straightforward implementation would start like this: +% \def\entry#1#2{... +% But this frozes the catcodes in the argument, and can cause problems to +% @code, which sets - active. This problem was fixed by a kludge--- +% ``-'' was active throughout whole index, but this isn't really right. +% +% The right solution is to prevent \entry from swallowing the whole text. +% --kasal, 21nov03 +\def\entry{% + \begingroup + % + % Start a new paragraph if necessary, so our assignments below can't + % affect previous text. + \par + % + % Do not fill out the last line with white space. + \parfillskip = 0in + % + % No extra space above this paragraph. + \parskip = 0in + % + % Do not prefer a separate line ending with a hyphen to fewer lines. + \finalhyphendemerits = 0 + % + % \hangindent is only relevant when the entry text and page number + % don't both fit on one line. In that case, bob suggests starting the + % dots pretty far over on the line. Unfortunately, a large + % indentation looks wrong when the entry text itself is broken across + % lines. So we use a small indentation and put up with long leaders. + % + % \hangafter is reset to 1 (which is the value we want) at the start + % of each paragraph, so we need not do anything with that. + \hangindent = 2em + % + % When the entry text needs to be broken, just fill out the first line + % with blank space. + \rightskip = 0pt plus1fil + % + % A bit of stretch before each entry for the benefit of balancing + % columns. + \vskip 0pt plus1pt + % + % Swallow the left brace of the text (first parameter): + \afterassignment\doentry + \let\temp = +} +\def\doentry{% + \bgroup % Instead of the swallowed brace. + \noindent + \aftergroup\finishentry + % And now comes the text of the entry. +} +\def\finishentry#1{% + % #1 is the page number. + % + % The following is kludged to not output a line of dots in the index if + % there are no page numbers. The next person who breaks this will be + % cursed by a Unix daemon. + \def\tempa{{\rm }}% + \def\tempb{#1}% + \edef\tempc{\tempa}% + \edef\tempd{\tempb}% + \ifx\tempc\tempd + \ % + \else + % + % If we must, put the page number on a line of its own, and fill out + % this line with blank space. (The \hfil is overwhelmed with the + % fill leaders glue in \indexdotfill if the page number does fit.) + \hfil\penalty50 + \null\nobreak\indexdotfill % Have leaders before the page number. + % + % The `\ ' here is removed by the implicit \unskip that TeX does as + % part of (the primitive) \par. Without it, a spurious underfull + % \hbox ensues. + \ifpdf + \pdfgettoks#1.% + \ \the\toksA + \else + \ #1% + \fi + \fi + \par + \endgroup +} + +% Like \dotfill except takes at least 1 em. +\def\indexdotfill{\cleaders + \hbox{$\mathsurround=0pt \mkern1.5mu ${\it .}$ \mkern1.5mu$}\hskip 1em plus 1fill} + +\def\primary #1{\line{#1\hfil}} + +\newskip\secondaryindent \secondaryindent=0.5cm +\def\secondary#1#2{{% + \parfillskip=0in + \parskip=0in + \hangindent=1in + \hangafter=1 + \noindent\hskip\secondaryindent\hbox{#1}\indexdotfill + \ifpdf + \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph. + \else + #2 + \fi + \par +}} + +% Define two-column mode, which we use to typeset indexes. +% Adapted from the TeXbook, page 416, which is to say, +% the manmac.tex format used to print the TeXbook itself. +\catcode`\@=11 + +\newbox\partialpage +\newdimen\doublecolumnhsize + +\def\begindoublecolumns{\begingroup % ended by \enddoublecolumns + % Grab any single-column material above us. + \output = {% + % + % Here is a possibility not foreseen in manmac: if we accumulate a + % whole lot of material, we might end up calling this \output + % routine twice in a row (see the doublecol-lose test, which is + % essentially a couple of indexes with @setchapternewpage off). In + % that case we just ship out what is in \partialpage with the normal + % output routine. Generally, \partialpage will be empty when this + % runs and this will be a no-op. See the indexspread.tex test case. + \ifvoid\partialpage \else + \onepageout{\pagecontents\partialpage}% + \fi + % + \global\setbox\partialpage = \vbox{% + % Unvbox the main output page. + \unvbox\PAGE + \kern-\topskip \kern\baselineskip + }% + }% + \eject % run that output routine to set \partialpage + % + % Use the double-column output routine for subsequent pages. + \output = {\doublecolumnout}% + % + % Change the page size parameters. We could do this once outside this + % routine, in each of @smallbook, @afourpaper, and the default 8.5x11 + % format, but then we repeat the same computation. Repeating a couple + % of assignments once per index is clearly meaningless for the + % execution time, so we may as well do it in one place. + % + % First we halve the line length, less a little for the gutter between + % the columns. We compute the gutter based on the line length, so it + % changes automatically with the paper format. The magic constant + % below is chosen so that the gutter has the same value (well, +-<1pt) + % as it did when we hard-coded it. + % + % We put the result in a separate register, \doublecolumhsize, so we + % can restore it in \pagesofar, after \hsize itself has (potentially) + % been clobbered. + % + \doublecolumnhsize = \hsize + \advance\doublecolumnhsize by -.04154\hsize + \divide\doublecolumnhsize by 2 + \hsize = \doublecolumnhsize + % + % Double the \vsize as well. (We don't need a separate register here, + % since nobody clobbers \vsize.) + \vsize = 2\vsize +} + +% The double-column output routine for all double-column pages except +% the last. +% +\def\doublecolumnout{% + \splittopskip=\topskip \splitmaxdepth=\maxdepth + % Get the available space for the double columns -- the normal + % (undoubled) page height minus any material left over from the + % previous page. + \dimen@ = \vsize + \divide\dimen@ by 2 + \advance\dimen@ by -\ht\partialpage + % + % box0 will be the left-hand column, box2 the right. + \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@ + \onepageout\pagesofar + \unvbox255 + \penalty\outputpenalty +} +% +% Re-output the contents of the output page -- any previous material, +% followed by the two boxes we just split, in box0 and box2. +\def\pagesofar{% + \unvbox\partialpage + % + \hsize = \doublecolumnhsize + \wd0=\hsize \wd2=\hsize + \hbox to\pagewidth{\box0\hfil\box2}% +} +% +% All done with double columns. +\def\enddoublecolumns{% + \output = {% + % Split the last of the double-column material. Leave it on the + % current page, no automatic page break. + \balancecolumns + % + % If we end up splitting too much material for the current page, + % though, there will be another page break right after this \output + % invocation ends. Having called \balancecolumns once, we do not + % want to call it again. Therefore, reset \output to its normal + % definition right away. (We hope \balancecolumns will never be + % called on to balance too much material, but if it is, this makes + % the output somewhat more palatable.) + \global\output = {\onepageout{\pagecontents\PAGE}}% + }% + \eject + \endgroup % started in \begindoublecolumns + % + % \pagegoal was set to the doubled \vsize above, since we restarted + % the current page. We're now back to normal single-column + % typesetting, so reset \pagegoal to the normal \vsize (after the + % \endgroup where \vsize got restored). + \pagegoal = \vsize +} +% +% Called at the end of the double column material. +\def\balancecolumns{% + \setbox0 = \vbox{\unvbox255}% like \box255 but more efficient, see p.120. + \dimen@ = \ht0 + \advance\dimen@ by \topskip + \advance\dimen@ by-\baselineskip + \divide\dimen@ by 2 % target to split to + %debug\message{final 2-column material height=\the\ht0, target=\the\dimen@.}% + \splittopskip = \topskip + % Loop until we get a decent breakpoint. + {% + \vbadness = 10000 + \loop + \global\setbox3 = \copy0 + \global\setbox1 = \vsplit3 to \dimen@ + \ifdim\ht3>\dimen@ + \global\advance\dimen@ by 1pt + \repeat + }% + %debug\message{split to \the\dimen@, column heights: \the\ht1, \the\ht3.}% + \setbox0=\vbox to\dimen@{\unvbox1}% + \setbox2=\vbox to\dimen@{\unvbox3}% + % + \pagesofar +} +\catcode`\@ = \other + + +\message{sectioning,} +% Chapters, sections, etc. + +% \unnumberedno is an oxymoron, of course. But we count the unnumbered +% sections so that we can refer to them unambiguously in the pdf +% outlines by their "section number". We avoid collisions with chapter +% numbers by starting them at 10000. (If a document ever has 10000 +% chapters, we're in trouble anyway, I'm sure.) +\newcount\unnumberedno \unnumberedno = 10000 +\newcount\chapno +\newcount\secno \secno=0 +\newcount\subsecno \subsecno=0 +\newcount\subsubsecno \subsubsecno=0 + +% This counter is funny since it counts through charcodes of letters A, B, ... +\newcount\appendixno \appendixno = `\@ +% +% \def\appendixletter{\char\the\appendixno} +% We do the following ugly conditional instead of the above simple +% construct for the sake of pdftex, which needs the actual +% letter in the expansion, not just typeset. +% +\def\appendixletter{% + \ifnum\appendixno=`A A% + \else\ifnum\appendixno=`B B% + \else\ifnum\appendixno=`C C% + \else\ifnum\appendixno=`D D% + \else\ifnum\appendixno=`E E% + \else\ifnum\appendixno=`F F% + \else\ifnum\appendixno=`G G% + \else\ifnum\appendixno=`H H% + \else\ifnum\appendixno=`I I% + \else\ifnum\appendixno=`J J% + \else\ifnum\appendixno=`K K% + \else\ifnum\appendixno=`L L% + \else\ifnum\appendixno=`M M% + \else\ifnum\appendixno=`N N% + \else\ifnum\appendixno=`O O% + \else\ifnum\appendixno=`P P% + \else\ifnum\appendixno=`Q Q% + \else\ifnum\appendixno=`R R% + \else\ifnum\appendixno=`S S% + \else\ifnum\appendixno=`T T% + \else\ifnum\appendixno=`U U% + \else\ifnum\appendixno=`V V% + \else\ifnum\appendixno=`W W% + \else\ifnum\appendixno=`X X% + \else\ifnum\appendixno=`Y Y% + \else\ifnum\appendixno=`Z Z% + % The \the is necessary, despite appearances, because \appendixletter is + % expanded while writing the .toc file. \char\appendixno is not + % expandable, thus it is written literally, thus all appendixes come out + % with the same letter (or @) in the toc without it. + \else\char\the\appendixno + \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi + \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi} + +% Each @chapter defines this as the name of the chapter. +% page headings and footings can use it. @section does likewise. +% However, they are not reliable, because we don't use marks. +\def\thischapter{} +\def\thissection{} + +\newcount\absseclevel % used to calculate proper heading level +\newcount\secbase\secbase=0 % @raisesections/@lowersections modify this count + +% @raisesections: treat @section as chapter, @subsection as section, etc. +\def\raisesections{\global\advance\secbase by -1} +\let\up=\raisesections % original BFox name + +% @lowersections: treat @chapter as section, @section as subsection, etc. +\def\lowersections{\global\advance\secbase by 1} +\let\down=\lowersections % original BFox name + +% we only have subsub. +\chardef\maxseclevel = 3 +% +% A numbered section within an unnumbered changes to unnumbered too. +% To achive this, remember the "biggest" unnum. sec. we are currently in: +\chardef\unmlevel = \maxseclevel +% +% Trace whether the current chapter is an appendix or not: +% \chapheadtype is "N" or "A", unnumbered chapters are ignored. +\def\chapheadtype{N} + +% Choose a heading macro +% #1 is heading type +% #2 is heading level +% #3 is text for heading +\def\genhead#1#2#3{% + % Compute the abs. sec. level: + \absseclevel=#2 + \advance\absseclevel by \secbase + % Make sure \absseclevel doesn't fall outside the range: + \ifnum \absseclevel < 0 + \absseclevel = 0 + \else + \ifnum \absseclevel > 3 + \absseclevel = 3 + \fi + \fi + % The heading type: + \def\headtype{#1}% + \if \headtype U% + \ifnum \absseclevel < \unmlevel + \chardef\unmlevel = \absseclevel + \fi + \else + % Check for appendix sections: + \ifnum \absseclevel = 0 + \edef\chapheadtype{\headtype}% + \else + \if \headtype A\if \chapheadtype N% + \errmessage{@appendix... within a non-appendix chapter}% + \fi\fi + \fi + % Check for numbered within unnumbered: + \ifnum \absseclevel > \unmlevel + \def\headtype{U}% + \else + \chardef\unmlevel = 3 + \fi + \fi + % Now print the heading: + \if \headtype U% + \ifcase\absseclevel + \unnumberedzzz{#3}% + \or \unnumberedseczzz{#3}% + \or \unnumberedsubseczzz{#3}% + \or \unnumberedsubsubseczzz{#3}% + \fi + \else + \if \headtype A% + \ifcase\absseclevel + \appendixzzz{#3}% + \or \appendixsectionzzz{#3}% + \or \appendixsubseczzz{#3}% + \or \appendixsubsubseczzz{#3}% + \fi + \else + \ifcase\absseclevel + \chapterzzz{#3}% + \or \seczzz{#3}% + \or \numberedsubseczzz{#3}% + \or \numberedsubsubseczzz{#3}% + \fi + \fi + \fi + \suppressfirstparagraphindent +} + +% an interface: +\def\numhead{\genhead N} +\def\apphead{\genhead A} +\def\unnmhead{\genhead U} + +% @chapter, @appendix, @unnumbered. Increment top-level counter, reset +% all lower-level sectioning counters to zero. +% +% Also set \chaplevelprefix, which we prepend to @float sequence numbers +% (e.g., figures), q.v. By default (before any chapter), that is empty. +\let\chaplevelprefix = \empty +% +\outer\parseargdef\chapter{\numhead0{#1}} % normally numhead0 calls chapterzzz +\def\chapterzzz#1{% + % section resetting is \global in case the chapter is in a group, such + % as an @include file. + \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 + \global\advance\chapno by 1 + % + % Used for \float. + \gdef\chaplevelprefix{\the\chapno.}% + \resetallfloatnos + % + \message{\putwordChapter\space \the\chapno}% + % + % Write the actual heading. + \chapmacro{#1}{Ynumbered}{\the\chapno}% + % + % So @section and the like are numbered underneath this chapter. + \global\let\section = \numberedsec + \global\let\subsection = \numberedsubsec + \global\let\subsubsection = \numberedsubsubsec +} + +\outer\parseargdef\appendix{\apphead0{#1}} % normally apphead0 calls appendixzzz +\def\appendixzzz#1{% + \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 + \global\advance\appendixno by 1 + \gdef\chaplevelprefix{\appendixletter.}% + \resetallfloatnos + % + \def\appendixnum{\putwordAppendix\space \appendixletter}% + \message{\appendixnum}% + % + \chapmacro{#1}{Yappendix}{\appendixletter}% + % + \global\let\section = \appendixsec + \global\let\subsection = \appendixsubsec + \global\let\subsubsection = \appendixsubsubsec +} + +\outer\parseargdef\unnumbered{\unnmhead0{#1}} % normally unnmhead0 calls unnumberedzzz +\def\unnumberedzzz#1{% + \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 + \global\advance\unnumberedno by 1 + % + % Since an unnumbered has no number, no prefix for figures. + \global\let\chaplevelprefix = \empty + \resetallfloatnos + % + % This used to be simply \message{#1}, but TeX fully expands the + % argument to \message. Therefore, if #1 contained @-commands, TeX + % expanded them. For example, in `@unnumbered The @cite{Book}', TeX + % expanded @cite (which turns out to cause errors because \cite is meant + % to be executed, not expanded). + % + % Anyway, we don't want the fully-expanded definition of @cite to appear + % as a result of the \message, we just want `@cite' itself. We use + % \the to achieve this: TeX expands \the only once, + % simply yielding the contents of . (We also do this for + % the toc entries.) + \toks0 = {#1}% + \message{(\the\toks0)}% + % + \chapmacro{#1}{Ynothing}{\the\unnumberedno}% + % + \global\let\section = \unnumberedsec + \global\let\subsection = \unnumberedsubsec + \global\let\subsubsection = \unnumberedsubsubsec +} + +% @centerchap is like @unnumbered, but the heading is centered. +\outer\parseargdef\centerchap{% + % Well, we could do the following in a group, but that would break + % an assumption that \chapmacro is called at the outermost level. + % Thus we are safer this way: --kasal, 24feb04 + \let\centerparametersmaybe = \centerparameters + \unnmhead0{#1}% + \let\centerparametersmaybe = \relax +} + +% @top is like @unnumbered. +\let\top\unnumbered + +% Sections. +\outer\parseargdef\numberedsec{\numhead1{#1}} % normally calls seczzz +\def\seczzz#1{% + \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 + \sectionheading{#1}{sec}{Ynumbered}{\the\chapno.\the\secno}% +} + +\outer\parseargdef\appendixsection{\apphead1{#1}} % normally calls appendixsectionzzz +\def\appendixsectionzzz#1{% + \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 + \sectionheading{#1}{sec}{Yappendix}{\appendixletter.\the\secno}% +} +\let\appendixsec\appendixsection + +\outer\parseargdef\unnumberedsec{\unnmhead1{#1}} % normally calls unnumberedseczzz +\def\unnumberedseczzz#1{% + \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 + \sectionheading{#1}{sec}{Ynothing}{\the\unnumberedno.\the\secno}% +} + +% Subsections. +\outer\parseargdef\numberedsubsec{\numhead2{#1}} % normally calls numberedsubseczzz +\def\numberedsubseczzz#1{% + \global\subsubsecno=0 \global\advance\subsecno by 1 + \sectionheading{#1}{subsec}{Ynumbered}{\the\chapno.\the\secno.\the\subsecno}% +} + +\outer\parseargdef\appendixsubsec{\apphead2{#1}} % normally calls appendixsubseczzz +\def\appendixsubseczzz#1{% + \global\subsubsecno=0 \global\advance\subsecno by 1 + \sectionheading{#1}{subsec}{Yappendix}% + {\appendixletter.\the\secno.\the\subsecno}% +} + +\outer\parseargdef\unnumberedsubsec{\unnmhead2{#1}} %normally calls unnumberedsubseczzz +\def\unnumberedsubseczzz#1{% + \global\subsubsecno=0 \global\advance\subsecno by 1 + \sectionheading{#1}{subsec}{Ynothing}% + {\the\unnumberedno.\the\secno.\the\subsecno}% +} + +% Subsubsections. +\outer\parseargdef\numberedsubsubsec{\numhead3{#1}} % normally numberedsubsubseczzz +\def\numberedsubsubseczzz#1{% + \global\advance\subsubsecno by 1 + \sectionheading{#1}{subsubsec}{Ynumbered}% + {\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno}% +} + +\outer\parseargdef\appendixsubsubsec{\apphead3{#1}} % normally appendixsubsubseczzz +\def\appendixsubsubseczzz#1{% + \global\advance\subsubsecno by 1 + \sectionheading{#1}{subsubsec}{Yappendix}% + {\appendixletter.\the\secno.\the\subsecno.\the\subsubsecno}% +} + +\outer\parseargdef\unnumberedsubsubsec{\unnmhead3{#1}} %normally unnumberedsubsubseczzz +\def\unnumberedsubsubseczzz#1{% + \global\advance\subsubsecno by 1 + \sectionheading{#1}{subsubsec}{Ynothing}% + {\the\unnumberedno.\the\secno.\the\subsecno.\the\subsubsecno}% +} + +% These macros control what the section commands do, according +% to what kind of chapter we are in (ordinary, appendix, or unnumbered). +% Define them by default for a numbered chapter. +\let\section = \numberedsec +\let\subsection = \numberedsubsec +\let\subsubsection = \numberedsubsubsec + +% Define @majorheading, @heading and @subheading + +% NOTE on use of \vbox for chapter headings, section headings, and such: +% 1) We use \vbox rather than the earlier \line to permit +% overlong headings to fold. +% 2) \hyphenpenalty is set to 10000 because hyphenation in a +% heading is obnoxious; this forbids it. +% 3) Likewise, headings look best if no \parindent is used, and +% if justification is not attempted. Hence \raggedright. + + +\def\majorheading{% + {\advance\chapheadingskip by 10pt \chapbreak }% + \parsearg\chapheadingzzz +} + +\def\chapheading{\chapbreak \parsearg\chapheadingzzz} +\def\chapheadingzzz#1{% + {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 + \parindent=0pt\raggedright + \rm #1\hfill}}% + \bigskip \par\penalty 200\relax + \suppressfirstparagraphindent +} + +% @heading, @subheading, @subsubheading. +\parseargdef\heading{\sectionheading{#1}{sec}{Yomitfromtoc}{} + \suppressfirstparagraphindent} +\parseargdef\subheading{\sectionheading{#1}{subsec}{Yomitfromtoc}{} + \suppressfirstparagraphindent} +\parseargdef\subsubheading{\sectionheading{#1}{subsubsec}{Yomitfromtoc}{} + \suppressfirstparagraphindent} + +% These macros generate a chapter, section, etc. heading only +% (including whitespace, linebreaking, etc. around it), +% given all the information in convenient, parsed form. + +%%% Args are the skip and penalty (usually negative) +\def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi} + +%%% Define plain chapter starts, and page on/off switching for it +% Parameter controlling skip before chapter headings (if needed) + +\newskip\chapheadingskip + +\def\chapbreak{\dobreak \chapheadingskip {-4000}} +\def\chappager{\par\vfill\supereject} +\def\chapoddpage{\chappager \ifodd\pageno \else \hbox to 0pt{} \chappager\fi} + +\def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname} + +\def\CHAPPAGoff{% +\global\let\contentsalignmacro = \chappager +\global\let\pchapsepmacro=\chapbreak +\global\let\pagealignmacro=\chappager} + +\def\CHAPPAGon{% +\global\let\contentsalignmacro = \chappager +\global\let\pchapsepmacro=\chappager +\global\let\pagealignmacro=\chappager +\global\def\HEADINGSon{\HEADINGSsingle}} + +\def\CHAPPAGodd{% +\global\let\contentsalignmacro = \chapoddpage +\global\let\pchapsepmacro=\chapoddpage +\global\let\pagealignmacro=\chapoddpage +\global\def\HEADINGSon{\HEADINGSdouble}} + +\CHAPPAGon + +% Chapter opening. +% +% #1 is the text, #2 is the section type (Ynumbered, Ynothing, +% Yappendix, Yomitfromtoc), #3 the chapter number. +% +% To test against our argument. +\def\Ynothingkeyword{Ynothing} +\def\Yomitfromtockeyword{Yomitfromtoc} +\def\Yappendixkeyword{Yappendix} +% +\def\chapmacro#1#2#3{% + \pchapsepmacro + {% + \chapfonts \rm + % + % Have to define \thissection before calling \donoderef, because the + % xref code eventually uses it. On the other hand, it has to be called + % after \pchapsepmacro, or the headline will change too soon. + \gdef\thissection{#1}% + \gdef\thischaptername{#1}% + % + % Only insert the separating space if we have a chapter/appendix + % number, and don't print the unnumbered ``number''. + \def\temptype{#2}% + \ifx\temptype\Ynothingkeyword + \setbox0 = \hbox{}% + \def\toctype{unnchap}% + \gdef\thischapter{#1}% + \else\ifx\temptype\Yomitfromtockeyword + \setbox0 = \hbox{}% contents like unnumbered, but no toc entry + \def\toctype{omit}% + \gdef\thischapter{}% + \else\ifx\temptype\Yappendixkeyword + \setbox0 = \hbox{\putwordAppendix{} #3\enspace}% + \def\toctype{app}% + % We don't substitute the actual chapter name into \thischapter + % because we don't want its macros evaluated now. And we don't + % use \thissection because that changes with each section. + % + \xdef\thischapter{\putwordAppendix{} \appendixletter: + \noexpand\thischaptername}% + \else + \setbox0 = \hbox{#3\enspace}% + \def\toctype{numchap}% + \xdef\thischapter{\putwordChapter{} \the\chapno: + \noexpand\thischaptername}% + \fi\fi\fi + % + % Write the toc entry for this chapter. Must come before the + % \donoderef, because we include the current node name in the toc + % entry, and \donoderef resets it to empty. + \writetocentry{\toctype}{#1}{#3}% + % + % For pdftex, we have to write out the node definition (aka, make + % the pdfdest) after any page break, but before the actual text has + % been typeset. If the destination for the pdf outline is after the + % text, then jumping from the outline may wind up with the text not + % being visible, for instance under high magnification. + \donoderef{#2}% + % + % Typeset the actual heading. + \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright + \hangindent=\wd0 \centerparametersmaybe + \unhbox0 #1\par}% + }% + \nobreak\bigskip % no page break after a chapter title + \nobreak +} + +% @centerchap -- centered and unnumbered. +\let\centerparametersmaybe = \relax +\def\centerparameters{% + \advance\rightskip by 3\rightskip + \leftskip = \rightskip + \parfillskip = 0pt +} + + +% I don't think this chapter style is supported any more, so I'm not +% updating it with the new noderef stuff. We'll see. --karl, 11aug03. +% +\def\setchapterstyle #1 {\csname CHAPF#1\endcsname} +% +\def\unnchfopen #1{% +\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 + \parindent=0pt\raggedright + \rm #1\hfill}}\bigskip \par\nobreak +} +\def\chfopen #1#2{\chapoddpage {\chapfonts +\vbox to 3in{\vfil \hbox to\hsize{\hfil #2} \hbox to\hsize{\hfil #1} \vfil}}% +\par\penalty 5000 % +} +\def\centerchfopen #1{% +\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 + \parindent=0pt + \hfill {\rm #1}\hfill}}\bigskip \par\nobreak +} +\def\CHAPFopen{% + \global\let\chapmacro=\chfopen + \global\let\centerchapmacro=\centerchfopen} + + +% Section titles. These macros combine the section number parts and +% call the generic \sectionheading to do the printing. +% +\newskip\secheadingskip +\def\secheadingbreak{\dobreak \secheadingskip{-1000}} + +% Subsection titles. +\newskip\subsecheadingskip +\def\subsecheadingbreak{\dobreak \subsecheadingskip{-500}} + +% Subsubsection titles. +\def\subsubsecheadingskip{\subsecheadingskip} +\def\subsubsecheadingbreak{\subsecheadingbreak} + + +% Print any size, any type, section title. +% +% #1 is the text, #2 is the section level (sec/subsec/subsubsec), #3 is +% the section type for xrefs (Ynumbered, Ynothing, Yappendix), #4 is the +% section number. +% +\def\sectionheading#1#2#3#4{% + {% + % Switch to the right set of fonts. + \csname #2fonts\endcsname \rm + % + % Insert space above the heading. + \csname #2headingbreak\endcsname + % + % Only insert the space after the number if we have a section number. + \def\sectionlevel{#2}% + \def\temptype{#3}% + % + \ifx\temptype\Ynothingkeyword + \setbox0 = \hbox{}% + \def\toctype{unn}% + \gdef\thissection{#1}% + \else\ifx\temptype\Yomitfromtockeyword + % for @headings -- no section number, don't include in toc, + % and don't redefine \thissection. + \setbox0 = \hbox{}% + \def\toctype{omit}% + \let\sectionlevel=\empty + \else\ifx\temptype\Yappendixkeyword + \setbox0 = \hbox{#4\enspace}% + \def\toctype{app}% + \gdef\thissection{#1}% + \else + \setbox0 = \hbox{#4\enspace}% + \def\toctype{num}% + \gdef\thissection{#1}% + \fi\fi\fi + % + % Write the toc entry (before \donoderef). See comments in \chfplain. + \writetocentry{\toctype\sectionlevel}{#1}{#4}% + % + % Write the node reference (= pdf destination for pdftex). + % Again, see comments in \chfplain. + \donoderef{#3}% + % + % Output the actual section heading. + \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright + \hangindent=\wd0 % zero if no section number + \unhbox0 #1}% + }% + % Add extra space after the heading -- half of whatever came above it. + % Don't allow stretch, though. + \kern .5 \csname #2headingskip\endcsname + % + % Do not let the kern be a potential breakpoint, as it would be if it + % was followed by glue. + \nobreak + % + % We'll almost certainly start a paragraph next, so don't let that + % glue accumulate. (Not a breakpoint because it's preceded by a + % discardable item.) + \vskip-\parskip + % + % This is purely so the last item on the list is a known \penalty > + % 10000. This is so \startdefun can avoid allowing breakpoints after + % section headings. Otherwise, it would insert a valid breakpoint between: + % + % @section sec-whatever + % @deffn def-whatever + \penalty 10001 +} + + +\message{toc,} +% Table of contents. +\newwrite\tocfile + +% Write an entry to the toc file, opening it if necessary. +% Called from @chapter, etc. +% +% Example usage: \writetocentry{sec}{Section Name}{\the\chapno.\the\secno} +% We append the current node name (if any) and page number as additional +% arguments for the \{chap,sec,...}entry macros which will eventually +% read this. The node name is used in the pdf outlines as the +% destination to jump to. +% +% We open the .toc file for writing here instead of at @setfilename (or +% any other fixed time) so that @contents can be anywhere in the document. +% But if #1 is `omit', then we don't do anything. This is used for the +% table of contents chapter openings themselves. +% +\newif\iftocfileopened +\def\omitkeyword{omit}% +% +\def\writetocentry#1#2#3{% + \edef\writetoctype{#1}% + \ifx\writetoctype\omitkeyword \else + \iftocfileopened\else + \immediate\openout\tocfile = \jobname.toc + \global\tocfileopenedtrue + \fi + % + \iflinks + \toks0 = {#2}% + \toks2 = \expandafter{\lastnode}% + \edef\temp{\write\tocfile{\realbackslash #1entry{\the\toks0}{#3}% + {\the\toks2}{\noexpand\folio}}}% + \temp + \fi + \fi + % + % Tell \shipout to create a pdf destination on each page, if we're + % writing pdf. These are used in the table of contents. We can't + % just write one on every page because the title pages are numbered + % 1 and 2 (the page numbers aren't printed), and so are the first + % two pages of the document. Thus, we'd have two destinations named + % `1', and two named `2'. + \ifpdf \global\pdfmakepagedesttrue \fi +} + +\newskip\contentsrightmargin \contentsrightmargin=1in +\newcount\savepageno +\newcount\lastnegativepageno \lastnegativepageno = -1 + +% Prepare to read what we've written to \tocfile. +% +\def\startcontents#1{% + % If @setchapternewpage on, and @headings double, the contents should + % start on an odd page, unlike chapters. Thus, we maintain + % \contentsalignmacro in parallel with \pagealignmacro. + % From: Torbjorn Granlund + \contentsalignmacro + \immediate\closeout\tocfile + % + % Don't need to put `Contents' or `Short Contents' in the headline. + % It is abundantly clear what they are. + \def\thischapter{}% + \chapmacro{#1}{Yomitfromtoc}{}% + % + \savepageno = \pageno + \begingroup % Set up to handle contents files properly. + \catcode`\\=0 \catcode`\{=1 \catcode`\}=2 \catcode`\@=11 + % We can't do this, because then an actual ^ in a section + % title fails, e.g., @chapter ^ -- exponentiation. --karl, 9jul97. + %\catcode`\^=7 % to see ^^e4 as \"a etc. juha@piuha.ydi.vtt.fi + \raggedbottom % Worry more about breakpoints than the bottom. + \advance\hsize by -\contentsrightmargin % Don't use the full line length. + % + % Roman numerals for page numbers. + \ifnum \pageno>0 \global\pageno = \lastnegativepageno \fi +} + + +% Normal (long) toc. +\def\contents{% + \startcontents{\putwordTOC}% + \openin 1 \jobname.toc + \ifeof 1 \else + \input \jobname.toc + \fi + \vfill \eject + \contentsalignmacro % in case @setchapternewpage odd is in effect + \ifeof 1 \else + \pdfmakeoutlines + \fi + \closein 1 + \endgroup + \lastnegativepageno = \pageno + \global\pageno = \savepageno +} + +% And just the chapters. +\def\summarycontents{% + \startcontents{\putwordShortTOC}% + % + \let\numchapentry = \shortchapentry + \let\appentry = \shortchapentry + \let\unnchapentry = \shortunnchapentry + % We want a true roman here for the page numbers. + \secfonts + \let\rm=\shortcontrm \let\bf=\shortcontbf + \let\sl=\shortcontsl \let\tt=\shortconttt + \rm + \hyphenpenalty = 10000 + \advance\baselineskip by 1pt % Open it up a little. + \def\numsecentry##1##2##3##4{} + \let\appsecentry = \numsecentry + \let\unnsecentry = \numsecentry + \let\numsubsecentry = \numsecentry + \let\appsubsecentry = \numsecentry + \let\unnsubsecentry = \numsecentry + \let\numsubsubsecentry = \numsecentry + \let\appsubsubsecentry = \numsecentry + \let\unnsubsubsecentry = \numsecentry + \openin 1 \jobname.toc + \ifeof 1 \else + \input \jobname.toc + \fi + \closein 1 + \vfill \eject + \contentsalignmacro % in case @setchapternewpage odd is in effect + \endgroup + \lastnegativepageno = \pageno + \global\pageno = \savepageno +} +\let\shortcontents = \summarycontents + +% Typeset the label for a chapter or appendix for the short contents. +% The arg is, e.g., `A' for an appendix, or `3' for a chapter. +% +\def\shortchaplabel#1{% + % This space should be enough, since a single number is .5em, and the + % widest letter (M) is 1em, at least in the Computer Modern fonts. + % But use \hss just in case. + % (This space doesn't include the extra space that gets added after + % the label; that gets put in by \shortchapentry above.) + % + % We'd like to right-justify chapter numbers, but that looks strange + % with appendix letters. And right-justifying numbers and + % left-justifying letters looks strange when there is less than 10 + % chapters. Have to read the whole toc once to know how many chapters + % there are before deciding ... + \hbox to 1em{#1\hss}% +} + +% These macros generate individual entries in the table of contents. +% The first argument is the chapter or section name. +% The last argument is the page number. +% The arguments in between are the chapter number, section number, ... + +% Chapters, in the main contents. +\def\numchapentry#1#2#3#4{\dochapentry{#2\labelspace#1}{#4}} +% +% Chapters, in the short toc. +% See comments in \dochapentry re vbox and related settings. +\def\shortchapentry#1#2#3#4{% + \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#4\egroup}% +} + +% Appendices, in the main contents. +% Need the word Appendix, and a fixed-size box. +% +\def\appendixbox#1{% + % We use M since it's probably the widest letter. + \setbox0 = \hbox{\putwordAppendix{} M}% + \hbox to \wd0{\putwordAppendix{} #1\hss}} +% +\def\appentry#1#2#3#4{\dochapentry{\appendixbox{#2}\labelspace#1}{#4}} + +% Unnumbered chapters. +\def\unnchapentry#1#2#3#4{\dochapentry{#1}{#4}} +\def\shortunnchapentry#1#2#3#4{\tocentry{#1}{\doshortpageno\bgroup#4\egroup}} + +% Sections. +\def\numsecentry#1#2#3#4{\dosecentry{#2\labelspace#1}{#4}} +\let\appsecentry=\numsecentry +\def\unnsecentry#1#2#3#4{\dosecentry{#1}{#4}} + +% Subsections. +\def\numsubsecentry#1#2#3#4{\dosubsecentry{#2\labelspace#1}{#4}} +\let\appsubsecentry=\numsubsecentry +\def\unnsubsecentry#1#2#3#4{\dosubsecentry{#1}{#4}} + +% And subsubsections. +\def\numsubsubsecentry#1#2#3#4{\dosubsubsecentry{#2\labelspace#1}{#4}} +\let\appsubsubsecentry=\numsubsubsecentry +\def\unnsubsubsecentry#1#2#3#4{\dosubsubsecentry{#1}{#4}} + +% This parameter controls the indentation of the various levels. +% Same as \defaultparindent. +\newdimen\tocindent \tocindent = 15pt + +% Now for the actual typesetting. In all these, #1 is the text and #2 is the +% page number. +% +% If the toc has to be broken over pages, we want it to be at chapters +% if at all possible; hence the \penalty. +\def\dochapentry#1#2{% + \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip + \begingroup + \chapentryfonts + \tocentry{#1}{\dopageno\bgroup#2\egroup}% + \endgroup + \nobreak\vskip .25\baselineskip plus.1\baselineskip +} + +\def\dosecentry#1#2{\begingroup + \secentryfonts \leftskip=\tocindent + \tocentry{#1}{\dopageno\bgroup#2\egroup}% +\endgroup} + +\def\dosubsecentry#1#2{\begingroup + \subsecentryfonts \leftskip=2\tocindent + \tocentry{#1}{\dopageno\bgroup#2\egroup}% +\endgroup} + +\def\dosubsubsecentry#1#2{\begingroup + \subsubsecentryfonts \leftskip=3\tocindent + \tocentry{#1}{\dopageno\bgroup#2\egroup}% +\endgroup} + +% We use the same \entry macro as for the index entries. +\let\tocentry = \entry + +% Space between chapter (or whatever) number and the title. +\def\labelspace{\hskip1em \relax} + +\def\dopageno#1{{\rm #1}} +\def\doshortpageno#1{{\rm #1}} + +\def\chapentryfonts{\secfonts \rm} +\def\secentryfonts{\textfonts} +\def\subsecentryfonts{\textfonts} +\def\subsubsecentryfonts{\textfonts} + + +\message{environments,} +% @foo ... @end foo. + +% @point{}, @result{}, @expansion{}, @print{}, @equiv{}. +% +% Since these characters are used in examples, it should be an even number of +% \tt widths. Each \tt character is 1en, so two makes it 1em. +% +\def\point{$\star$} +\def\result{\leavevmode\raise.15ex\hbox to 1em{\hfil$\Rightarrow$\hfil}} +\def\expansion{\leavevmode\raise.1ex\hbox to 1em{\hfil$\mapsto$\hfil}} +\def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}} +\def\equiv{\leavevmode\lower.1ex\hbox to 1em{\hfil$\ptexequiv$\hfil}} + +% The @error{} command. +% Adapted from the TeXbook's \boxit. +% +\newbox\errorbox +% +{\tentt \global\dimen0 = 3em}% Width of the box. +\dimen2 = .55pt % Thickness of rules +% The text. (`r' is open on the right, `e' somewhat less so on the left.) +\setbox0 = \hbox{\kern-.75pt \tensf error\kern-1.5pt} +% +\setbox\errorbox=\hbox to \dimen0{\hfil + \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right. + \advance\hsize by -2\dimen2 % Rules. + \vbox{% + \hrule height\dimen2 + \hbox{\vrule width\dimen2 \kern3pt % Space to left of text. + \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below. + \kern3pt\vrule width\dimen2}% Space to right. + \hrule height\dimen2} + \hfil} +% +\def\error{\leavevmode\lower.7ex\copy\errorbox} + +% @tex ... @end tex escapes into raw Tex temporarily. +% One exception: @ is still an escape character, so that @end tex works. +% But \@ or @@ will get a plain tex @ character. + +\envdef\tex{% + \catcode `\\=0 \catcode `\{=1 \catcode `\}=2 + \catcode `\$=3 \catcode `\&=4 \catcode `\#=6 + \catcode `\^=7 \catcode `\_=8 \catcode `\~=\active \let~=\tie + \catcode `\%=14 + \catcode `\+=\other + \catcode `\"=\other + \catcode `\|=\other + \catcode `\<=\other + \catcode `\>=\other + \escapechar=`\\ + % + \let\b=\ptexb + \let\bullet=\ptexbullet + \let\c=\ptexc + \let\,=\ptexcomma + \let\.=\ptexdot + \let\dots=\ptexdots + \let\equiv=\ptexequiv + \let\!=\ptexexclam + \let\i=\ptexi + \let\indent=\ptexindent + \let\noindent=\ptexnoindent + \let\{=\ptexlbrace + \let\+=\tabalign + \let\}=\ptexrbrace + \let\/=\ptexslash + \let\*=\ptexstar + \let\t=\ptext + % + \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}% + \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}% + \def\@{@}% +} +% There is no need to define \Etex. + +% Define @lisp ... @end lisp. +% @lisp environment forms a group so it can rebind things, +% including the definition of @end lisp (which normally is erroneous). + +% Amount to narrow the margins by for @lisp. +\newskip\lispnarrowing \lispnarrowing=0.4in + +% This is the definition that ^^M gets inside @lisp, @example, and other +% such environments. \null is better than a space, since it doesn't +% have any width. +\def\lisppar{\null\endgraf} + +% This space is always present above and below environments. +\newskip\envskipamount \envskipamount = 0pt + +% Make spacing and below environment symmetrical. We use \parskip here +% to help in doing that, since in @example-like environments \parskip +% is reset to zero; thus the \afterenvbreak inserts no space -- but the +% start of the next paragraph will insert \parskip. +% +\def\aboveenvbreak{{% + % =10000 instead of <10000 because of a special case in \itemzzz and + % \sectionheading, q.v. + \ifnum \lastpenalty=10000 \else + \advance\envskipamount by \parskip + \endgraf + \ifdim\lastskip<\envskipamount + \removelastskip + % it's not a good place to break if the last penalty was \nobreak + % or better ... + \ifnum\lastpenalty<10000 \penalty-50 \fi + \vskip\envskipamount + \fi + \fi +}} + +\let\afterenvbreak = \aboveenvbreak + +% \nonarrowing is a flag. If "set", @lisp etc don't narrow margins. +\let\nonarrowing=\relax + +% @cartouche ... @end cartouche: draw rectangle w/rounded corners around +% environment contents. +\font\circle=lcircle10 +\newdimen\circthick +\newdimen\cartouter\newdimen\cartinner +\newskip\normbskip\newskip\normpskip\newskip\normlskip +\circthick=\fontdimen8\circle +% +\def\ctl{{\circle\char'013\hskip -6pt}}% 6pt from pl file: 1/2charwidth +\def\ctr{{\hskip 6pt\circle\char'010}} +\def\cbl{{\circle\char'012\hskip -6pt}} +\def\cbr{{\hskip 6pt\circle\char'011}} +\def\carttop{\hbox to \cartouter{\hskip\lskip + \ctl\leaders\hrule height\circthick\hfil\ctr + \hskip\rskip}} +\def\cartbot{\hbox to \cartouter{\hskip\lskip + \cbl\leaders\hrule height\circthick\hfil\cbr + \hskip\rskip}} +% +\newskip\lskip\newskip\rskip + +\envdef\cartouche{% + \ifhmode\par\fi % can't be in the midst of a paragraph. + \startsavinginserts + \lskip=\leftskip \rskip=\rightskip + \leftskip=0pt\rightskip=0pt % we want these *outside*. + \cartinner=\hsize \advance\cartinner by-\lskip + \advance\cartinner by-\rskip + \cartouter=\hsize + \advance\cartouter by 18.4pt % allow for 3pt kerns on either + % side, and for 6pt waste from + % each corner char, and rule thickness + \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip + % Flag to tell @lisp, etc., not to narrow margin. + \let\nonarrowing=\comment + \vbox\bgroup + \baselineskip=0pt\parskip=0pt\lineskip=0pt + \carttop + \hbox\bgroup + \hskip\lskip + \vrule\kern3pt + \vbox\bgroup + \kern3pt + \hsize=\cartinner + \baselineskip=\normbskip + \lineskip=\normlskip + \parskip=\normpskip + \vskip -\parskip + \comment % For explanation, see the end of \def\group. +} +\def\Ecartouche{% + \ifhmode\par\fi + \kern3pt + \egroup + \kern3pt\vrule + \hskip\rskip + \egroup + \cartbot + \egroup + \checkinserts +} + + +% This macro is called at the beginning of all the @example variants, +% inside a group. +\def\nonfillstart{% + \aboveenvbreak + \hfuzz = 12pt % Don't be fussy + \sepspaces % Make spaces be word-separators rather than space tokens. + \let\par = \lisppar % don't ignore blank lines + \obeylines % each line of input is a line of output + \parskip = 0pt + \parindent = 0pt + \emergencystretch = 0pt % don't try to avoid overfull boxes + % @cartouche defines \nonarrowing to inhibit narrowing + % at next level down. + \ifx\nonarrowing\relax + \advance \leftskip by \lispnarrowing + \exdentamount=\lispnarrowing + \fi + \let\exdent=\nofillexdent +} + +% If you want all examples etc. small: @set dispenvsize small. +% If you want even small examples the full size: @set dispenvsize nosmall. +% This affects the following displayed environments: +% @example, @display, @format, @lisp +% +\def\smallword{small} +\def\nosmallword{nosmall} +\let\SETdispenvsize\relax +\def\setnormaldispenv{% + \ifx\SETdispenvsize\smallword + \smallexamplefonts \rm + \fi +} +\def\setsmalldispenv{% + \ifx\SETdispenvsize\nosmallword + \else + \smallexamplefonts \rm + \fi +} + +% We often define two environments, @foo and @smallfoo. +% Let's do it by one command: +\def\makedispenv #1#2{ + \expandafter\envdef\csname#1\endcsname {\setnormaldispenv #2} + \expandafter\envdef\csname small#1\endcsname {\setsmalldispenv #2} + \expandafter\let\csname E#1\endcsname \afterenvbreak + \expandafter\let\csname Esmall#1\endcsname \afterenvbreak +} + +% Define two synonyms: +\def\maketwodispenvs #1#2#3{ + \makedispenv{#1}{#3} + \makedispenv{#2}{#3} +} + +% @lisp: indented, narrowed, typewriter font; @example: same as @lisp. +% +% @smallexample and @smalllisp: use smaller fonts. +% Originally contributed by Pavel@xerox. +% +\maketwodispenvs {lisp}{example}{% + \nonfillstart + \tt + \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special. + \gobble % eat return +} + +% @display/@smalldisplay: same as @lisp except keep current font. +% +\makedispenv {display}{% + \nonfillstart + \gobble +} + +% @format/@smallformat: same as @display except don't narrow margins. +% +\makedispenv{format}{% + \let\nonarrowing = t% + \nonfillstart + \gobble +} + +% @flushleft: same as @format, but doesn't obey \SETdispenvsize. +\envdef\flushleft{% + \let\nonarrowing = t% + \nonfillstart + \gobble +} +\let\Eflushleft = \afterenvbreak + +% @flushright. +% +\envdef\flushright{% + \let\nonarrowing = t% + \nonfillstart + \advance\leftskip by 0pt plus 1fill + \gobble +} +\let\Eflushright = \afterenvbreak + + +% @quotation does normal linebreaking (hence we can't use \nonfillstart) +% and narrows the margins. We keep \parskip nonzero in general, since +% we're doing normal filling. So, when using \aboveenvbreak and +% \afterenvbreak, temporarily make \parskip 0. +% +\envdef\quotation{% + {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip + \parindent=0pt + % + % @cartouche defines \nonarrowing to inhibit narrowing at next level down. + \ifx\nonarrowing\relax + \advance\leftskip by \lispnarrowing + \advance\rightskip by \lispnarrowing + \exdentamount = \lispnarrowing + \let\nonarrowing = \relax + \fi + \parsearg\quotationlabel +} + +% We have retained a nonzero parskip for the environment, since we're +% doing normal filling. +% +\def\Equotation{% + \par + \ifx\quotationauthor\undefined\else + % indent a bit. + \leftline{\kern 2\leftskip \sl ---\quotationauthor}% + \fi + {\parskip=0pt \afterenvbreak}% +} + +% If we're given an argument, typeset it in bold with a colon after. +\def\quotationlabel#1{% + \def\temp{#1}% + \ifx\temp\empty \else + {\bf #1: }% + \fi +} + + +% LaTeX-like @verbatim...@end verbatim and @verb{...} +% If we want to allow any as delimiter, +% we need the curly braces so that makeinfo sees the @verb command, eg: +% `@verbx...x' would look like the '@verbx' command. --janneke@gnu.org +% +% [Knuth]: Donald Ervin Knuth, 1996. The TeXbook. +% +% [Knuth] p.344; only we need to do the other characters Texinfo sets +% active too. Otherwise, they get lost as the first character on a +% verbatim line. +\def\dospecials{% + \do\ \do\\\do\{\do\}\do\$\do\&% + \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~% + \do\<\do\>\do\|\do\@\do+\do\"% +} +% +% [Knuth] p. 380 +\def\uncatcodespecials{% + \def\do##1{\catcode`##1=\other}\dospecials} +% +% [Knuth] pp. 380,381,391 +% Disable Spanish ligatures ?` and !` of \tt font +\begingroup + \catcode`\`=\active\gdef`{\relax\lq} +\endgroup +% +% Setup for the @verb command. +% +% Eight spaces for a tab +\begingroup + \catcode`\^^I=\active + \gdef\tabeightspaces{\catcode`\^^I=\active\def^^I{\ \ \ \ \ \ \ \ }} +\endgroup +% +\def\setupverb{% + \tt % easiest (and conventionally used) font for verbatim + \def\par{\leavevmode\endgraf}% + \catcode`\`=\active + \tabeightspaces + % Respect line breaks, + % print special symbols as themselves, and + % make each space count + % must do in this order: + \obeylines \uncatcodespecials \sepspaces +} + +% Setup for the @verbatim environment +% +% Real tab expansion +\newdimen\tabw \setbox0=\hbox{\tt\space} \tabw=8\wd0 % tab amount +% +\def\starttabbox{\setbox0=\hbox\bgroup} +\begingroup + \catcode`\^^I=\active + \gdef\tabexpand{% + \catcode`\^^I=\active + \def^^I{\leavevmode\egroup + \dimen0=\wd0 % the width so far, or since the previous tab + \divide\dimen0 by\tabw + \multiply\dimen0 by\tabw % compute previous multiple of \tabw + \advance\dimen0 by\tabw % advance to next multiple of \tabw + \wd0=\dimen0 \box0 \starttabbox + }% + } +\endgroup +\def\setupverbatim{% + \nonfillstart + \advance\leftskip by -\defbodyindent + % Easiest (and conventionally used) font for verbatim + \tt + \def\par{\leavevmode\egroup\box0\endgraf}% + \catcode`\`=\active + \tabexpand + % Respect line breaks, + % print special symbols as themselves, and + % make each space count + % must do in this order: + \obeylines \uncatcodespecials \sepspaces + \everypar{\starttabbox}% +} + +% Do the @verb magic: verbatim text is quoted by unique +% delimiter characters. Before first delimiter expect a +% right brace, after last delimiter expect closing brace: +% +% \def\doverb'{'#1'}'{#1} +% +% [Knuth] p. 382; only eat outer {} +\begingroup + \catcode`[=1\catcode`]=2\catcode`\{=\other\catcode`\}=\other + \gdef\doverb{#1[\def\next##1#1}[##1\endgroup]\next] +\endgroup +% +\def\verb{\begingroup\setupverb\doverb} +% +% +% Do the @verbatim magic: define the macro \doverbatim so that +% the (first) argument ends when '@end verbatim' is reached, ie: +% +% \def\doverbatim#1@end verbatim{#1} +% +% For Texinfo it's a lot easier than for LaTeX, +% because texinfo's \verbatim doesn't stop at '\end{verbatim}': +% we need not redefine '\', '{' and '}'. +% +% Inspired by LaTeX's verbatim command set [latex.ltx] +% +\begingroup + \catcode`\ =\active + \obeylines % + % ignore everything up to the first ^^M, that's the newline at the end + % of the @verbatim input line itself. Otherwise we get an extra blank + % line in the output. + \xdef\doverbatim#1^^M#2@end verbatim{#2\noexpand\end\gobble verbatim}% + % We really want {...\end verbatim} in the body of the macro, but + % without the active space; thus we have to use \xdef and \gobble. +\endgroup +% +\envdef\verbatim{% + \setupverbatim\doverbatim +} +\let\Everbatim = \afterenvbreak + + +% @verbatiminclude FILE - insert text of file in verbatim environment. +% +\def\verbatiminclude{\parseargusing\filenamecatcodes\doverbatiminclude} +% +\def\doverbatiminclude#1{% + {% + \makevalueexpandable + \setupverbatim + \input #1 + \afterenvbreak + }% +} + +% @copying ... @end copying. +% Save the text away for @insertcopying later. +% +% We save the uninterpreted tokens, rather than creating a box. +% Saving the text in a box would be much easier, but then all the +% typesetting commands (@smallbook, font changes, etc.) have to be done +% beforehand -- and a) we want @copying to be done first in the source +% file; b) letting users define the frontmatter in as flexible order as +% possible is very desirable. +% +\def\copying{\checkenv{}\begingroup\scanargctxt\docopying} +\def\docopying#1@end copying{\endgroup\def\copyingtext{#1}} +% +\def\insertcopying{% + \begingroup + \parindent = 0pt % paragraph indentation looks wrong on title page + \scanexp\copyingtext + \endgroup +} + +\message{defuns,} +% @defun etc. + +\newskip\defbodyindent \defbodyindent=.4in +\newskip\defargsindent \defargsindent=50pt +\newskip\deflastargmargin \deflastargmargin=18pt + +% Start the processing of @deffn: +\def\startdefun{% + \ifnum\lastpenalty<10000 + \medbreak + \else + % If there are two @def commands in a row, we'll have a \nobreak, + % which is there to keep the function description together with its + % header. But if there's nothing but headers, we need to allow a + % break somewhere. Check specifically for penalty 10002, inserted + % by \defargscommonending, instead of 10000, since the sectioning + % commands also insert a nobreak penalty, and we don't want to allow + % a break between a section heading and a defun. + % + \ifnum\lastpenalty=10002 \penalty2000 \fi + % + % Similarly, after a section heading, do not allow a break. + % But do insert the glue. + \medskip % preceded by discardable penalty, so not a breakpoint + \fi + % + \parindent=0in + \advance\leftskip by \defbodyindent + \exdentamount=\defbodyindent +} + +\def\dodefunx#1{% + % First, check whether we are in the right environment: + \checkenv#1% + % + % As above, allow line break if we have multiple x headers in a row. + % It's not a great place, though. + \ifnum\lastpenalty=10002 \penalty3000 \fi + % + % And now, it's time to reuse the body of the original defun: + \expandafter\gobbledefun#1% +} +\def\gobbledefun#1\startdefun{} + +% \printdefunline \deffnheader{text} +% +\def\printdefunline#1#2{% + \begingroup + % call \deffnheader: + #1#2 \endheader + % common ending: + \interlinepenalty = 10000 + \advance\rightskip by 0pt plus 1fil + \endgraf + \nobreak\vskip -\parskip + \penalty 10002 % signal to \startdefun and \dodefunx + % Some of the @defun-type tags do not enable magic parentheses, + % rendering the following check redundant. But we don't optimize. + \checkparencounts + \endgroup +} + +\def\Edefun{\endgraf\medbreak} + +% \makedefun{deffn} creates \deffn, \deffnx and \Edeffn; +% the only thing remainnig is to define \deffnheader. +% +\def\makedefun#1{% + \expandafter\let\csname E#1\endcsname = \Edefun + \edef\temp{\noexpand\domakedefun + \makecsname{#1}\makecsname{#1x}\makecsname{#1header}}% + \temp +} + +% \domakedefun \deffn \deffnx \deffnheader +% +% Define \deffn and \deffnx, without parameters. +% \deffnheader has to be defined explicitly. +% +\def\domakedefun#1#2#3{% + \envdef#1{% + \startdefun + \parseargusing\activeparens{\printdefunline#3}% + }% + \def#2{\dodefunx#1}% + \def#3% +} + +%%% Untyped functions: + +% @deffn category name args +\makedefun{deffn}{\deffngeneral{}} + +% @deffn category class name args +\makedefun{defop}#1 {\defopon{#1\ \putwordon}} + +% \defopon {category on}class name args +\def\defopon#1#2 {\deffngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} } + +% \deffngeneral {subind}category name args +% +\def\deffngeneral#1#2 #3 #4\endheader{% + % Remember that \dosubind{fn}{foo}{} is equivalent to \doind{fn}{foo}. + \dosubind{fn}{\code{#3}}{#1}% + \defname{#2}{}{#3}\magicamp\defunargs{#4\unskip}% +} + +%%% Typed functions: + +% @deftypefn category type name args +\makedefun{deftypefn}{\deftypefngeneral{}} + +% @deftypeop category class type name args +\makedefun{deftypeop}#1 {\deftypeopon{#1\ \putwordon}} + +% \deftypeopon {category on}class type name args +\def\deftypeopon#1#2 {\deftypefngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} } + +% \deftypefngeneral {subind}category type name args +% +\def\deftypefngeneral#1#2 #3 #4 #5\endheader{% + \dosubind{fn}{\code{#4}}{#1}% + \defname{#2}{#3}{#4}\defunargs{#5\unskip}% +} + +%%% Typed variables: + +% @deftypevr category type var args +\makedefun{deftypevr}{\deftypecvgeneral{}} + +% @deftypecv category class type var args +\makedefun{deftypecv}#1 {\deftypecvof{#1\ \putwordof}} + +% \deftypecvof {category of}class type var args +\def\deftypecvof#1#2 {\deftypecvgeneral{\putwordof\ \code{#2}}{#1\ \code{#2}} } + +% \deftypecvgeneral {subind}category type var args +% +\def\deftypecvgeneral#1#2 #3 #4 #5\endheader{% + \dosubind{vr}{\code{#4}}{#1}% + \defname{#2}{#3}{#4}\defunargs{#5\unskip}% +} + +%%% Untyped variables: + +% @defvr category var args +\makedefun{defvr}#1 {\deftypevrheader{#1} {} } + +% @defcv category class var args +\makedefun{defcv}#1 {\defcvof{#1\ \putwordof}} + +% \defcvof {category of}class var args +\def\defcvof#1#2 {\deftypecvof{#1}#2 {} } + +%%% Type: +% @deftp category name args +\makedefun{deftp}#1 #2 #3\endheader{% + \doind{tp}{\code{#2}}% + \defname{#1}{}{#2}\defunargs{#3\unskip}% +} + +% Remaining @defun-like shortcuts: +\makedefun{defun}{\deffnheader{\putwordDeffunc} } +\makedefun{defmac}{\deffnheader{\putwordDefmac} } +\makedefun{defspec}{\deffnheader{\putwordDefspec} } +\makedefun{deftypefun}{\deftypefnheader{\putwordDeffunc} } +\makedefun{defvar}{\defvrheader{\putwordDefvar} } +\makedefun{defopt}{\defvrheader{\putwordDefopt} } +\makedefun{deftypevar}{\deftypevrheader{\putwordDefvar} } +\makedefun{defmethod}{\defopon\putwordMethodon} +\makedefun{deftypemethod}{\deftypeopon\putwordMethodon} +\makedefun{defivar}{\defcvof\putwordInstanceVariableof} +\makedefun{deftypeivar}{\deftypecvof\putwordInstanceVariableof} + +% \defname, which formats the name of the @def (not the args). +% #1 is the category, such as "Function". +% #2 is the return type, if any. +% #3 is the function name. +% +% We are followed by (but not passed) the arguments, if any. +% +\def\defname#1#2#3{% + % Get the values of \leftskip and \rightskip as they were outside the @def... + \advance\leftskip by -\defbodyindent + % + % How we'll format the type name. Putting it in brackets helps + % distinguish it from the body text that may end up on the next line + % just below it. + \def\temp{#1}% + \setbox0=\hbox{\kern\deflastargmargin \ifx\temp\empty\else [\rm\temp]\fi} + % + % Figure out line sizes for the paragraph shape. + % The first line needs space for \box0; but if \rightskip is nonzero, + % we need only space for the part of \box0 which exceeds it: + \dimen0=\hsize \advance\dimen0 by -\wd0 \advance\dimen0 by \rightskip + % The continuations: + \dimen2=\hsize \advance\dimen2 by -\defargsindent + % (plain.tex says that \dimen1 should be used only as global.) + \parshape 2 0in \dimen0 \defargsindent \dimen2 + % + % Put the type name to the right margin. + \noindent + \hbox to 0pt{% + \hfil\box0 \kern-\hsize + % \hsize has to be shortened this way: + \kern\leftskip + % Intentionally do not respect \rightskip, since we need the space. + }% + % + % Allow all lines to be underfull without complaint: + \tolerance=10000 \hbadness=10000 + \exdentamount=\defbodyindent + {% + % defun fonts. We use typewriter by default (used to be bold) because: + % . we're printing identifiers, they should be in tt in principle. + % . in languages with many accents, such as Czech or French, it's + % common to leave accents off identifiers. The result looks ok in + % tt, but exceedingly strange in rm. + % . we don't want -- and --- to be treated as ligatures. + % . this still does not fix the ?` and !` ligatures, but so far no + % one has made identifiers using them :). + \df \tt + \def\temp{#2}% return value type + \ifx\temp\empty\else \tclose{\temp} \fi + #3% output function name + }% + {\rm\enskip}% hskip 0.5 em of \tenrm + % + \boldbrax + % arguments will be output next, if any. +} + +% Print arguments in slanted roman (not ttsl), inconsistently with using +% tt for the name. This is because literal text is sometimes needed in +% the argument list (groff manual), and ttsl and tt are not very +% distinguishable. Prevent hyphenation at `-' chars. +% +\def\defunargs#1{% + % use sl by default (not ttsl), + % tt for the names. + \df \sl \hyphenchar\font=0 + % + % On the other hand, if an argument has two dashes (for instance), we + % want a way to get ttsl. Let's try @var for that. + \let\var=\ttslanted + #1% + \sl\hyphenchar\font=45 +} + +% We want ()&[] to print specially on the defun line. +% +\def\activeparens{% + \catcode`\(=\active \catcode`\)=\active + \catcode`\[=\active \catcode`\]=\active + \catcode`\&=\active +} + +% Make control sequences which act like normal parenthesis chars. +\let\lparen = ( \let\rparen = ) + +% Be sure that we always have a definition for `(', etc. For example, +% if the fn name has parens in it, \boldbrax will not be in effect yet, +% so TeX would otherwise complain about undefined control sequence. +{ + \activeparens + \global\let(=\lparen \global\let)=\rparen + \global\let[=\lbrack \global\let]=\rbrack + \global\let& = \& + + \gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb} + \gdef\magicamp{\let&=\amprm} +} + +\newcount\parencount + +% If we encounter &foo, then turn on ()-hacking afterwards +\newif\ifampseen +\def\amprm#1 {\ampseentrue{\bf\ }} + +\def\parenfont{% + \ifampseen + % At the first level, print parens in roman, + % otherwise use the default font. + \ifnum \parencount=1 \rm \fi + \else + % The \sf parens (in \boldbrax) actually are a little bolder than + % the contained text. This is especially needed for [ and ] . + \sf + \fi +} +\def\infirstlevel#1{% + \ifampseen + \ifnum\parencount=1 + #1% + \fi + \fi +} +\def\bfafterword#1 {#1 \bf} + +\def\opnr{% + \global\advance\parencount by 1 + {\parenfont(}% + \infirstlevel \bfafterword +} +\def\clnr{% + {\parenfont)}% + \infirstlevel \sl + \global\advance\parencount by -1 +} + +\newcount\brackcount +\def\lbrb{% + \global\advance\brackcount by 1 + {\bf[}% +} +\def\rbrb{% + {\bf]}% + \global\advance\brackcount by -1 +} + +\def\checkparencounts{% + \ifnum\parencount=0 \else \badparencount \fi + \ifnum\brackcount=0 \else \badbrackcount \fi +} +\def\badparencount{% + \errmessage{Unbalanced parentheses in @def}% + \global\parencount=0 +} +\def\badbrackcount{% + \errmessage{Unbalanced square braces in @def}% + \global\brackcount=0 +} + + +\message{macros,} +% @macro. + +% To do this right we need a feature of e-TeX, \scantokens, +% which we arrange to emulate with a temporary file in ordinary TeX. +\ifx\eTeXversion\undefined + \newwrite\macscribble + \def\scantokens#1{% + \toks0={#1}% + \immediate\openout\macscribble=\jobname.tmp + \immediate\write\macscribble{\the\toks0}% + \immediate\closeout\macscribble + \input \jobname.tmp + } +\fi + +\def\scanmacro#1{% + \begingroup + \newlinechar`\^^M + \let\xeatspaces\eatspaces + % Undo catcode changes of \startcontents and \doprintindex + % When called from @insertcopying or (short)caption, we need active + % backslash to get it printed correctly. Previously, we had + % \catcode`\\=\other instead. We'll see whether a problem appears + % with macro expansion. --kasal, 19aug04 + \catcode`\@=0 \catcode`\\=\active \escapechar=`\@ + % ... and \example + \spaceisspace + % + % Append \endinput to make sure that TeX does not see the ending newline. + % + % I've verified that it is necessary both for e-TeX and for ordinary TeX + % --kasal, 29nov03 + \scantokens{#1\endinput}% + \endgroup +} + +\def\scanexp#1{% + \edef\temp{\noexpand\scanmacro{#1}}% + \temp +} + +\newcount\paramno % Count of parameters +\newtoks\macname % Macro name +\newif\ifrecursive % Is it recursive? +\def\macrolist{} % List of all defined macros in the form + % \do\macro1\do\macro2... + +% Utility routines. +% This does \let #1 = #2, with \csnames; that is, +% \let \csname#1\endcsname = \csname#2\endcsname +% (except of course we have to play expansion games). +% +\def\cslet#1#2{% + \expandafter\let + \csname#1\expandafter\endcsname + \csname#2\endcsname +} + +% Trim leading and trailing spaces off a string. +% Concepts from aro-bend problem 15 (see CTAN). +{\catcode`\@=11 +\gdef\eatspaces #1{\expandafter\trim@\expandafter{#1 }} +\gdef\trim@ #1{\trim@@ @#1 @ #1 @ @@} +\gdef\trim@@ #1@ #2@ #3@@{\trim@@@\empty #2 @} +\def\unbrace#1{#1} +\unbrace{\gdef\trim@@@ #1 } #2@{#1} +} + +% Trim a single trailing ^^M off a string. +{\catcode`\^^M=\other \catcode`\Q=3% +\gdef\eatcr #1{\eatcra #1Q^^MQ}% +\gdef\eatcra#1^^MQ{\eatcrb#1Q}% +\gdef\eatcrb#1Q#2Q{#1}% +} + +% Macro bodies are absorbed as an argument in a context where +% all characters are catcode 10, 11 or 12, except \ which is active +% (as in normal texinfo). It is necessary to change the definition of \. + +% It's necessary to have hard CRs when the macro is executed. This is +% done by making ^^M (\endlinechar) catcode 12 when reading the macro +% body, and then making it the \newlinechar in \scanmacro. + +\def\scanctxt{% + \catcode`\"=\other + \catcode`\+=\other + \catcode`\<=\other + \catcode`\>=\other + \catcode`\@=\other + \catcode`\^=\other + \catcode`\_=\other + \catcode`\|=\other + \catcode`\~=\other +} + +\def\scanargctxt{% + \scanctxt + \catcode`\\=\other + \catcode`\^^M=\other +} + +\def\macrobodyctxt{% + \scanctxt + \catcode`\{=\other + \catcode`\}=\other + \catcode`\^^M=\other + \usembodybackslash +} + +\def\macroargctxt{% + \scanctxt + \catcode`\\=\other +} + +% \mbodybackslash is the definition of \ in @macro bodies. +% It maps \foo\ => \csname macarg.foo\endcsname => #N +% where N is the macro parameter number. +% We define \csname macarg.\endcsname to be \realbackslash, so +% \\ in macro replacement text gets you a backslash. + +{\catcode`@=0 @catcode`@\=@active + @gdef@usembodybackslash{@let\=@mbodybackslash} + @gdef@mbodybackslash#1\{@csname macarg.#1@endcsname} +} +\expandafter\def\csname macarg.\endcsname{\realbackslash} + +\def\macro{\recursivefalse\parsearg\macroxxx} +\def\rmacro{\recursivetrue\parsearg\macroxxx} + +\def\macroxxx#1{% + \getargs{#1}% now \macname is the macname and \argl the arglist + \ifx\argl\empty % no arguments + \paramno=0% + \else + \expandafter\parsemargdef \argl;% + \fi + \if1\csname ismacro.\the\macname\endcsname + \message{Warning: redefining \the\macname}% + \else + \expandafter\ifx\csname \the\macname\endcsname \relax + \else \errmessage{Macro name \the\macname\space already defined}\fi + \global\cslet{macsave.\the\macname}{\the\macname}% + \global\expandafter\let\csname ismacro.\the\macname\endcsname=1% + % Add the macroname to \macrolist + \toks0 = \expandafter{\macrolist\do}% + \xdef\macrolist{\the\toks0 + \expandafter\noexpand\csname\the\macname\endcsname}% + \fi + \begingroup \macrobodyctxt + \ifrecursive \expandafter\parsermacbody + \else \expandafter\parsemacbody + \fi} + +\parseargdef\unmacro{% + \if1\csname ismacro.#1\endcsname + \global\cslet{#1}{macsave.#1}% + \global\expandafter\let \csname ismacro.#1\endcsname=0% + % Remove the macro name from \macrolist: + \begingroup + \expandafter\let\csname#1\endcsname \relax + \let\do\unmacrodo + \xdef\macrolist{\macrolist}% + \endgroup + \else + \errmessage{Macro #1 not defined}% + \fi +} + +% Called by \do from \dounmacro on each macro. The idea is to omit any +% macro definitions that have been changed to \relax. +% +\def\unmacrodo#1{% + \ifx#1\relax + % remove this + \else + \noexpand\do \noexpand #1% + \fi +} + +% This makes use of the obscure feature that if the last token of a +% is #, then the preceding argument is delimited by +% an opening brace, and that opening brace is not consumed. +\def\getargs#1{\getargsxxx#1{}} +\def\getargsxxx#1#{\getmacname #1 \relax\getmacargs} +\def\getmacname #1 #2\relax{\macname={#1}} +\def\getmacargs#1{\def\argl{#1}} + +% Parse the optional {params} list. Set up \paramno and \paramlist +% so \defmacro knows what to do. Define \macarg.blah for each blah +% in the params list, to be ##N where N is the position in that list. +% That gets used by \mbodybackslash (above). + +% We need to get `macro parameter char #' into several definitions. +% The technique used is stolen from LaTeX: let \hash be something +% unexpandable, insert that wherever you need a #, and then redefine +% it to # just before using the token list produced. +% +% The same technique is used to protect \eatspaces till just before +% the macro is used. + +\def\parsemargdef#1;{\paramno=0\def\paramlist{}% + \let\hash\relax\let\xeatspaces\relax\parsemargdefxxx#1,;,} +\def\parsemargdefxxx#1,{% + \if#1;\let\next=\relax + \else \let\next=\parsemargdefxxx + \advance\paramno by 1% + \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname + {\xeatspaces{\hash\the\paramno}}% + \edef\paramlist{\paramlist\hash\the\paramno,}% + \fi\next} + +% These two commands read recursive and nonrecursive macro bodies. +% (They're different since rec and nonrec macros end differently.) + +\long\def\parsemacbody#1@end macro% +{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% +\long\def\parsermacbody#1@end rmacro% +{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% + +% This defines the macro itself. There are six cases: recursive and +% nonrecursive macros of zero, one, and many arguments. +% Much magic with \expandafter here. +% \xdef is used so that macro definitions will survive the file +% they're defined in; @include reads the file inside a group. +\def\defmacro{% + \let\hash=##% convert placeholders to macro parameter chars + \ifrecursive + \ifcase\paramno + % 0 + \expandafter\xdef\csname\the\macname\endcsname{% + \noexpand\scanmacro{\temp}}% + \or % 1 + \expandafter\xdef\csname\the\macname\endcsname{% + \bgroup\noexpand\macroargctxt + \noexpand\braceorline + \expandafter\noexpand\csname\the\macname xxx\endcsname}% + \expandafter\xdef\csname\the\macname xxx\endcsname##1{% + \egroup\noexpand\scanmacro{\temp}}% + \else % many + \expandafter\xdef\csname\the\macname\endcsname{% + \bgroup\noexpand\macroargctxt + \noexpand\csname\the\macname xx\endcsname}% + \expandafter\xdef\csname\the\macname xx\endcsname##1{% + \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}% + \expandafter\expandafter + \expandafter\xdef + \expandafter\expandafter + \csname\the\macname xxx\endcsname + \paramlist{\egroup\noexpand\scanmacro{\temp}}% + \fi + \else + \ifcase\paramno + % 0 + \expandafter\xdef\csname\the\macname\endcsname{% + \noexpand\norecurse{\the\macname}% + \noexpand\scanmacro{\temp}\egroup}% + \or % 1 + \expandafter\xdef\csname\the\macname\endcsname{% + \bgroup\noexpand\macroargctxt + \noexpand\braceorline + \expandafter\noexpand\csname\the\macname xxx\endcsname}% + \expandafter\xdef\csname\the\macname xxx\endcsname##1{% + \egroup + \noexpand\norecurse{\the\macname}% + \noexpand\scanmacro{\temp}\egroup}% + \else % many + \expandafter\xdef\csname\the\macname\endcsname{% + \bgroup\noexpand\macroargctxt + \expandafter\noexpand\csname\the\macname xx\endcsname}% + \expandafter\xdef\csname\the\macname xx\endcsname##1{% + \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}% + \expandafter\expandafter + \expandafter\xdef + \expandafter\expandafter + \csname\the\macname xxx\endcsname + \paramlist{% + \egroup + \noexpand\norecurse{\the\macname}% + \noexpand\scanmacro{\temp}\egroup}% + \fi + \fi} + +\def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}} + +% \braceorline decides whether the next nonwhitespace character is a +% {. If so it reads up to the closing }, if not, it reads the whole +% line. Whatever was read is then fed to the next control sequence +% as an argument (by \parsebrace or \parsearg) +\def\braceorline#1{\let\next=#1\futurelet\nchar\braceorlinexxx} +\def\braceorlinexxx{% + \ifx\nchar\bgroup\else + \expandafter\parsearg + \fi \next} + +% We want to disable all macros during \shipout so that they are not +% expanded by \write. +\def\turnoffmacros{\begingroup \def\do##1{\let\noexpand##1=\relax}% + \edef\next{\macrolist}\expandafter\endgroup\next} + +% For \indexnofonts, we need to get rid of all macros, leaving only the +% arguments (if present). Of course this is not nearly correct, but it +% is the best we can do for now. makeinfo does not expand macros in the +% argument to @deffn, which ends up writing an index entry, and texindex +% isn't prepared for an index sort entry that starts with \. +% +% Since macro invocations are followed by braces, we can just redefine them +% to take a single TeX argument. The case of a macro invocation that +% goes to end-of-line is not handled. +% +\def\emptyusermacros{\begingroup + \def\do##1{\let\noexpand##1=\noexpand\asis}% + \edef\next{\macrolist}\expandafter\endgroup\next} + + +% @alias. +% We need some trickery to remove the optional spaces around the equal +% sign. Just make them active and then expand them all to nothing. +\def\alias{\parseargusing\obeyspaces\aliasxxx} +\def\aliasxxx #1{\aliasyyy#1\relax} +\def\aliasyyy #1=#2\relax{% + {% + \expandafter\let\obeyedspace=\empty + \xdef\next{\global\let\makecsname{#1}=\makecsname{#2}}% + }% + \next +} + + +\message{cross references,} + +\newwrite\auxfile + +\newif\ifhavexrefs % True if xref values are known. +\newif\ifwarnedxrefs % True if we warned once that they aren't known. + +% @inforef is relatively simple. +\def\inforef #1{\inforefzzz #1,,,,**} +\def\inforefzzz #1,#2,#3,#4**{\putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}}, + node \samp{\ignorespaces#1{}}} + +% @node's only job in TeX is to define \lastnode, which is used in +% cross-references. The @node line might or might not have commas, and +% might or might not have spaces before the first comma, like: +% @node foo , bar , ... +% We don't want such trailing spaces in the node name. +% +\parseargdef\node{\checkenv{}\donode #1 ,\finishnodeparse} +% +% also remove a trailing comma, in case of something like this: +% @node Help-Cross, , , Cross-refs +\def\donode#1 ,#2\finishnodeparse{\dodonode #1,\finishnodeparse} +\def\dodonode#1,#2\finishnodeparse{\gdef\lastnode{#1}} + +\let\nwnode=\node +\let\lastnode=\empty + +% Write a cross-reference definition for the current node. #1 is the +% type (Ynumbered, Yappendix, Ynothing). +% +\def\donoderef#1{% + \ifx\lastnode\empty\else + \setref{\lastnode}{#1}% + \global\let\lastnode=\empty + \fi +} + +% @anchor{NAME} -- define xref target at arbitrary point. +% +\newcount\savesfregister +% +\def\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi} +\def\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi} +\def\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces} + +% \setref{NAME}{SNT} defines a cross-reference point NAME (a node or an +% anchor), which consists of three parts: +% 1) NAME-title - the current sectioning name taken from \thissection, +% or the anchor name. +% 2) NAME-snt - section number and type, passed as the SNT arg, or +% empty for anchors. +% 3) NAME-pg - the page number. +% +% This is called from \donoderef, \anchor, and \dofloat. In the case of +% floats, there is an additional part, which is not written here: +% 4) NAME-lof - the text as it should appear in a @listoffloats. +% +\def\setref#1#2{% + \pdfmkdest{#1}% + \iflinks + {% + \atdummies % preserve commands, but don't expand them + \turnoffactive + \otherbackslash + \edef\writexrdef##1##2{% + \write\auxfile{@xrdef{#1-% #1 of \setref, expanded by the \edef + ##1}{##2}}% these are parameters of \writexrdef + }% + \toks0 = \expandafter{\thissection}% + \immediate \writexrdef{title}{\the\toks0 }% + \immediate \writexrdef{snt}{\csname #2\endcsname}% \Ynumbered etc. + \writexrdef{pg}{\folio}% will be written later, during \shipout + }% + \fi +} + +% @xref, @pxref, and @ref generate cross-references. For \xrefX, #1 is +% the node name, #2 the name of the Info cross-reference, #3 the printed +% node name, #4 the name of the Info file, #5 the name of the printed +% manual. All but the node name can be omitted. +% +\def\pxref#1{\putwordsee{} \xrefX[#1,,,,,,,]} +\def\xref#1{\putwordSee{} \xrefX[#1,,,,,,,]} +\def\ref#1{\xrefX[#1,,,,,,,]} +\def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup + \unsepspaces + \def\printedmanual{\ignorespaces #5}% + \def\printedrefname{\ignorespaces #3}% + \setbox1=\hbox{\printedmanual\unskip}% + \setbox0=\hbox{\printedrefname\unskip}% + \ifdim \wd0 = 0pt + % No printed node name was explicitly given. + \expandafter\ifx\csname SETxref-automatic-section-title\endcsname\relax + % Use the node name inside the square brackets. + \def\printedrefname{\ignorespaces #1}% + \else + % Use the actual chapter/section title appear inside + % the square brackets. Use the real section title if we have it. + \ifdim \wd1 > 0pt + % It is in another manual, so we don't have it. + \def\printedrefname{\ignorespaces #1}% + \else + \ifhavexrefs + % We know the real title if we have the xref values. + \def\printedrefname{\refx{#1-title}{}}% + \else + % Otherwise just copy the Info node name. + \def\printedrefname{\ignorespaces #1}% + \fi% + \fi + \fi + \fi + % + % Make link in pdf output. + \ifpdf + \leavevmode + \getfilename{#4}% + {\turnoffactive \otherbackslash + \ifnum\filenamelength>0 + \startlink attr{/Border [0 0 0]}% + goto file{\the\filename.pdf} name{#1}% + \else + \startlink attr{/Border [0 0 0]}% + goto name{\pdfmkpgn{#1}}% + \fi + }% + \linkcolor + \fi + % + % Float references are printed completely differently: "Figure 1.2" + % instead of "[somenode], p.3". We distinguish them by the + % LABEL-title being set to a magic string. + {% + % Have to otherify everything special to allow the \csname to + % include an _ in the xref name, etc. + \indexnofonts + \turnoffactive + \otherbackslash + \expandafter\global\expandafter\let\expandafter\Xthisreftitle + \csname XR#1-title\endcsname + }% + \iffloat\Xthisreftitle + % If the user specified the print name (third arg) to the ref, + % print it instead of our usual "Figure 1.2". + \ifdim\wd0 = 0pt + \refx{#1-snt}% + \else + \printedrefname + \fi + % + % if the user also gave the printed manual name (fifth arg), append + % "in MANUALNAME". + \ifdim \wd1 > 0pt + \space \putwordin{} \cite{\printedmanual}% + \fi + \else + % node/anchor (non-float) references. + % + % If we use \unhbox0 and \unhbox1 to print the node names, TeX does not + % insert empty discretionaries after hyphens, which means that it will + % not find a line break at a hyphen in a node names. Since some manuals + % are best written with fairly long node names, containing hyphens, this + % is a loss. Therefore, we give the text of the node name again, so it + % is as if TeX is seeing it for the first time. + \ifdim \wd1 > 0pt + \putwordsection{} ``\printedrefname'' \putwordin{} \cite{\printedmanual}% + \else + % _ (for example) has to be the character _ for the purposes of the + % control sequence corresponding to the node, but it has to expand + % into the usual \leavevmode...\vrule stuff for purposes of + % printing. So we \turnoffactive for the \refx-snt, back on for the + % printing, back off for the \refx-pg. + {\turnoffactive \otherbackslash + % Only output a following space if the -snt ref is nonempty; for + % @unnumbered and @anchor, it won't be. + \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}% + \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi + }% + % output the `[mynode]' via a macro so it can be overridden. + \xrefprintnodename\printedrefname + % + % But we always want a comma and a space: + ,\space + % + % output the `page 3'. + \turnoffactive \otherbackslash \putwordpage\tie\refx{#1-pg}{}% + \fi + \fi + \endlink +\endgroup} + +% This macro is called from \xrefX for the `[nodename]' part of xref +% output. It's a separate macro only so it can be changed more easily, +% since square brackets don't work well in some documents. Particularly +% one that Bob is working on :). +% +\def\xrefprintnodename#1{[#1]} + +% Things referred to by \setref. +% +\def\Ynothing{} +\def\Yomitfromtoc{} +\def\Ynumbered{% + \ifnum\secno=0 + \putwordChapter@tie \the\chapno + \else \ifnum\subsecno=0 + \putwordSection@tie \the\chapno.\the\secno + \else \ifnum\subsubsecno=0 + \putwordSection@tie \the\chapno.\the\secno.\the\subsecno + \else + \putwordSection@tie \the\chapno.\the\secno.\the\subsecno.\the\subsubsecno + \fi\fi\fi +} +\def\Yappendix{% + \ifnum\secno=0 + \putwordAppendix@tie @char\the\appendixno{}% + \else \ifnum\subsecno=0 + \putwordSection@tie @char\the\appendixno.\the\secno + \else \ifnum\subsubsecno=0 + \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno + \else + \putwordSection@tie + @char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno + \fi\fi\fi +} + +% Define \refx{NAME}{SUFFIX} to reference a cross-reference string named NAME. +% If its value is nonempty, SUFFIX is output afterward. +% +\def\refx#1#2{% + {% + \indexnofonts + \otherbackslash + \expandafter\global\expandafter\let\expandafter\thisrefX + \csname XR#1\endcsname + }% + \ifx\thisrefX\relax + % If not defined, say something at least. + \angleleft un\-de\-fined\angleright + \iflinks + \ifhavexrefs + \message{\linenumber Undefined cross reference `#1'.}% + \else + \ifwarnedxrefs\else + \global\warnedxrefstrue + \message{Cross reference values unknown; you must run TeX again.}% + \fi + \fi + \fi + \else + % It's defined, so just use it. + \thisrefX + \fi + #2% Output the suffix in any case. +} + +% This is the macro invoked by entries in the aux file. Usually it's +% just a \def (we prepend XR to the control sequence name to avoid +% collisions). But if this is a float type, we have more work to do. +% +\def\xrdef#1#2{% + \expandafter\gdef\csname XR#1\endcsname{#2}% remember this xref value. + % + % Was that xref control sequence that we just defined for a float? + \expandafter\iffloat\csname XR#1\endcsname + % it was a float, and we have the (safe) float type in \iffloattype. + \expandafter\let\expandafter\floatlist + \csname floatlist\iffloattype\endcsname + % + % Is this the first time we've seen this float type? + \expandafter\ifx\floatlist\relax + \toks0 = {\do}% yes, so just \do + \else + % had it before, so preserve previous elements in list. + \toks0 = \expandafter{\floatlist\do}% + \fi + % + % Remember this xref in the control sequence \floatlistFLOATTYPE, + % for later use in \listoffloats. + \expandafter\xdef\csname floatlist\iffloattype\endcsname{\the\toks0{#1}}% + \fi +} + +% Read the last existing aux file, if any. No error if none exists. +% +\def\tryauxfile{% + \openin 1 \jobname.aux + \ifeof 1 \else + \readauxfile + \global\havexrefstrue + \fi + \closein 1 +} + +\def\readauxfile{\begingroup + \catcode`\^^@=\other + \catcode`\^^A=\other + \catcode`\^^B=\other + \catcode`\^^C=\other + \catcode`\^^D=\other + \catcode`\^^E=\other + \catcode`\^^F=\other + \catcode`\^^G=\other + \catcode`\^^H=\other + \catcode`\^^K=\other + \catcode`\^^L=\other + \catcode`\^^N=\other + \catcode`\^^P=\other + \catcode`\^^Q=\other + \catcode`\^^R=\other + \catcode`\^^S=\other + \catcode`\^^T=\other + \catcode`\^^U=\other + \catcode`\^^V=\other + \catcode`\^^W=\other + \catcode`\^^X=\other + \catcode`\^^Z=\other + \catcode`\^^[=\other + \catcode`\^^\=\other + \catcode`\^^]=\other + \catcode`\^^^=\other + \catcode`\^^_=\other + % It was suggested to set the catcode of ^ to 7, which would allow ^^e4 etc. + % in xref tags, i.e., node names. But since ^^e4 notation isn't + % supported in the main text, it doesn't seem desirable. Furthermore, + % that is not enough: for node names that actually contain a ^ + % character, we would end up writing a line like this: 'xrdef {'hat + % b-title}{'hat b} and \xrdef does a \csname...\endcsname on the first + % argument, and \hat is not an expandable control sequence. It could + % all be worked out, but why? Either we support ^^ or we don't. + % + % The other change necessary for this was to define \auxhat: + % \def\auxhat{\def^{'hat }}% extra space so ok if followed by letter + % and then to call \auxhat in \setq. + % + \catcode`\^=\other + % + % Special characters. Should be turned off anyway, but... + \catcode`\~=\other + \catcode`\[=\other + \catcode`\]=\other + \catcode`\"=\other + \catcode`\_=\other + \catcode`\|=\other + \catcode`\<=\other + \catcode`\>=\other + \catcode`\$=\other + \catcode`\#=\other + \catcode`\&=\other + \catcode`\%=\other + \catcode`+=\other % avoid \+ for paranoia even though we've turned it off + % + % This is to support \ in node names and titles, since the \ + % characters end up in a \csname. It's easier than + % leaving it active and making its active definition an actual \ + % character. What I don't understand is why it works in the *value* + % of the xrdef. Seems like it should be a catcode12 \, and that + % should not typeset properly. But it works, so I'm moving on for + % now. --karl, 15jan04. + \catcode`\\=\other + % + % Make the characters 128-255 be printing characters. + {% + \count 1=128 + \def\loop{% + \catcode\count 1=\other + \advance\count 1 by 1 + \ifnum \count 1<256 \loop \fi + }% + }% + % + % @ is our escape character in .aux files, and we need braces. + \catcode`\{=1 + \catcode`\}=2 + \catcode`\@=0 + % + \input \jobname.aux +\endgroup} + + +\message{insertions,} +% including footnotes. + +\newcount \footnoteno + +% The trailing space in the following definition for supereject is +% vital for proper filling; pages come out unaligned when you do a +% pagealignmacro call if that space before the closing brace is +% removed. (Generally, numeric constants should always be followed by a +% space to prevent strange expansion errors.) +\def\supereject{\par\penalty -20000\footnoteno =0 } + +% @footnotestyle is meaningful for info output only. +\let\footnotestyle=\comment + +{\catcode `\@=11 +% +% Auto-number footnotes. Otherwise like plain. +\gdef\footnote{% + \let\indent=\ptexindent + \let\noindent=\ptexnoindent + \global\advance\footnoteno by \@ne + \edef\thisfootno{$^{\the\footnoteno}$}% + % + % In case the footnote comes at the end of a sentence, preserve the + % extra spacing after we do the footnote number. + \let\@sf\empty + \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\ptexslash\fi + % + % Remove inadvertent blank space before typesetting the footnote number. + \unskip + \thisfootno\@sf + \dofootnote +}% + +% Don't bother with the trickery in plain.tex to not require the +% footnote text as a parameter. Our footnotes don't need to be so general. +% +% Oh yes, they do; otherwise, @ifset (and anything else that uses +% \parseargline) fails inside footnotes because the tokens are fixed when +% the footnote is read. --karl, 16nov96. +% +\gdef\dofootnote{% + \insert\footins\bgroup + % We want to typeset this text as a normal paragraph, even if the + % footnote reference occurs in (for example) a display environment. + % So reset some parameters. + \hsize=\pagewidth + \interlinepenalty\interfootnotelinepenalty + \splittopskip\ht\strutbox % top baseline for broken footnotes + \splitmaxdepth\dp\strutbox + \floatingpenalty\@MM + \leftskip\z@skip + \rightskip\z@skip + \spaceskip\z@skip + \xspaceskip\z@skip + \parindent\defaultparindent + % + \smallfonts \rm + % + % Because we use hanging indentation in footnotes, a @noindent appears + % to exdent this text, so make it be a no-op. makeinfo does not use + % hanging indentation so @noindent can still be needed within footnote + % text after an @example or the like (not that this is good style). + \let\noindent = \relax + % + % Hang the footnote text off the number. Use \everypar in case the + % footnote extends for more than one paragraph. + \everypar = {\hang}% + \textindent{\thisfootno}% + % + % Don't crash into the line above the footnote text. Since this + % expands into a box, it must come within the paragraph, lest it + % provide a place where TeX can split the footnote. + \footstrut + \futurelet\next\fo@t +} +}%end \catcode `\@=11 + +% In case a @footnote appears in a vbox, save the footnote text and create +% the real \insert just after the vbox finished. Otherwise, the insertion +% would be lost. +% Similarily, if a @footnote appears inside an alignment, save the footnote +% text to a box and make the \insert when a row of the table is finished. +% And the same can be done for other insert classes. --kasal, 16nov03. + +% Replace the \insert primitive by a cheating macro. +% Deeper inside, just make sure that the saved insertions are not spilled +% out prematurely. +% +\def\startsavinginserts{% + \ifx \insert\ptexinsert + \let\insert\saveinsert + \else + \let\checkinserts\relax + \fi +} + +% This \insert replacement works for both \insert\footins{foo} and +% \insert\footins\bgroup foo\egroup, but it doesn't work for \insert27{foo}. +% +\def\saveinsert#1{% + \edef\next{\noexpand\savetobox \makeSAVEname#1}% + \afterassignment\next + % swallow the left brace + \let\temp = +} +\def\makeSAVEname#1{\makecsname{SAVE\expandafter\gobble\string#1}} +\def\savetobox#1{\global\setbox#1 = \vbox\bgroup \unvbox#1} + +\def\checksaveins#1{\ifvoid#1\else \placesaveins#1\fi} + +\def\placesaveins#1{% + \ptexinsert \csname\expandafter\gobblesave\string#1\endcsname + {\box#1}% +} + +% eat @SAVE -- beware, all of them have catcode \other: +{ + \def\dospecials{\do S\do A\do V\do E} \uncatcodespecials % ;-) + \gdef\gobblesave @SAVE{} +} + +% initialization: +\def\newsaveins #1{% + \edef\next{\noexpand\newsaveinsX \makeSAVEname#1}% + \next +} +\def\newsaveinsX #1{% + \csname newbox\endcsname #1% + \expandafter\def\expandafter\checkinserts\expandafter{\checkinserts + \checksaveins #1}% +} + +% initialize: +\let\checkinserts\empty +\newsaveins\footins +\newsaveins\margin + + +% @image. We use the macros from epsf.tex to support this. +% If epsf.tex is not installed and @image is used, we complain. +% +% Check for and read epsf.tex up front. If we read it only at @image +% time, we might be inside a group, and then its definitions would get +% undone and the next image would fail. +\openin 1 = epsf.tex +\ifeof 1 \else + % Do not bother showing banner with epsf.tex v2.7k (available in + % doc/epsf.tex and on ctan). + \def\epsfannounce{\toks0 = }% + \input epsf.tex +\fi +\closein 1 +% +% We will only complain once about lack of epsf.tex. +\newif\ifwarnednoepsf +\newhelp\noepsfhelp{epsf.tex must be installed for images to + work. It is also included in the Texinfo distribution, or you can get + it from ftp://tug.org/tex/epsf.tex.} +% +\def\image#1{% + \ifx\epsfbox\undefined + \ifwarnednoepsf \else + \errhelp = \noepsfhelp + \errmessage{epsf.tex not found, images will be ignored}% + \global\warnednoepsftrue + \fi + \else + \imagexxx #1,,,,,\finish + \fi +} +% +% Arguments to @image: +% #1 is (mandatory) image filename; we tack on .eps extension. +% #2 is (optional) width, #3 is (optional) height. +% #4 is (ignored optional) html alt text. +% #5 is (ignored optional) extension. +% #6 is just the usual extra ignored arg for parsing this stuff. +\newif\ifimagevmode +\def\imagexxx#1,#2,#3,#4,#5,#6\finish{\begingroup + \catcode`\^^M = 5 % in case we're inside an example + \normalturnoffactive % allow _ et al. in names + % If the image is by itself, center it. + \ifvmode + \imagevmodetrue + \nobreak\bigskip + % Usually we'll have text after the image which will insert + % \parskip glue, so insert it here too to equalize the space + % above and below. + \nobreak\vskip\parskip + \nobreak + \line\bgroup\hss + \fi + % + % Output the image. + \ifpdf + \dopdfimage{#1}{#2}{#3}% + \else + % \epsfbox itself resets \epsf?size at each figure. + \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi + \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi + \epsfbox{#1.eps}% + \fi + % + \ifimagevmode \hss \egroup \bigbreak \fi % space after the image +\endgroup} + + +% @float FLOATTYPE,LABEL,LOC ... @end float for displayed figures, tables, +% etc. We don't actually implement floating yet, we always include the +% float "here". But it seemed the best name for the future. +% +\envparseargdef\float{\eatcommaspace\eatcommaspace\dofloat#1, , ,\finish} + +% There may be a space before second and/or third parameter; delete it. +\def\eatcommaspace#1, {#1,} + +% #1 is the optional FLOATTYPE, the text label for this float, typically +% "Figure", "Table", "Example", etc. Can't contain commas. If omitted, +% this float will not be numbered and cannot be referred to. +% +% #2 is the optional xref label. Also must be present for the float to +% be referable. +% +% #3 is the optional positioning argument; for now, it is ignored. It +% will somehow specify the positions allowed to float to (here, top, bottom). +% +% We keep a separate counter for each FLOATTYPE, which we reset at each +% chapter-level command. +\let\resetallfloatnos=\empty +% +\def\dofloat#1,#2,#3,#4\finish{% + \let\thiscaption=\empty + \let\thisshortcaption=\empty + % + % don't lose footnotes inside @float. + % + % BEWARE: when the floats start float, we have to issue warning whenever an + % insert appears inside a float which could possibly float. --kasal, 26may04 + % + \startsavinginserts + % + % We can't be used inside a paragraph. + \par + % + \vtop\bgroup + \def\floattype{#1}% + \def\floatlabel{#2}% + \def\floatloc{#3}% we do nothing with this yet. + % + \ifx\floattype\empty + \let\safefloattype=\empty + \else + {% + % the floattype might have accents or other special characters, + % but we need to use it in a control sequence name. + \indexnofonts + \turnoffactive + \xdef\safefloattype{\floattype}% + }% + \fi + % + % If label is given but no type, we handle that as the empty type. + \ifx\floatlabel\empty \else + % We want each FLOATTYPE to be numbered separately (Figure 1, + % Table 1, Figure 2, ...). (And if no label, no number.) + % + \expandafter\getfloatno\csname\safefloattype floatno\endcsname + \global\advance\floatno by 1 + % + {% + % This magic value for \thissection is output by \setref as the + % XREFLABEL-title value. \xrefX uses it to distinguish float + % labels (which have a completely different output format) from + % node and anchor labels. And \xrdef uses it to construct the + % lists of floats. + % + \edef\thissection{\floatmagic=\safefloattype}% + \setref{\floatlabel}{Yfloat}% + }% + \fi + % + % start with \parskip glue, I guess. + \vskip\parskip + % + % Don't suppress indentation if a float happens to start a section. + \restorefirstparagraphindent +} + +% we have these possibilities: +% @float Foo,lbl & @caption{Cap}: Foo 1.1: Cap +% @float Foo,lbl & no caption: Foo 1.1 +% @float Foo & @caption{Cap}: Foo: Cap +% @float Foo & no caption: Foo +% @float ,lbl & Caption{Cap}: 1.1: Cap +% @float ,lbl & no caption: 1.1 +% @float & @caption{Cap}: Cap +% @float & no caption: +% +\def\Efloat{% + \let\floatident = \empty + % + % In all cases, if we have a float type, it comes first. + \ifx\floattype\empty \else \def\floatident{\floattype}\fi + % + % If we have an xref label, the number comes next. + \ifx\floatlabel\empty \else + \ifx\floattype\empty \else % if also had float type, need tie first. + \appendtomacro\floatident{\tie}% + \fi + % the number. + \appendtomacro\floatident{\chaplevelprefix\the\floatno}% + \fi + % + % Start the printed caption with what we've constructed in + % \floatident, but keep it separate; we need \floatident again. + \let\captionline = \floatident + % + \ifx\thiscaption\empty \else + \ifx\floatident\empty \else + \appendtomacro\captionline{: }% had ident, so need a colon between + \fi + % + % caption text. + \appendtomacro\captionline{\scanexp\thiscaption}% + \fi + % + % If we have anything to print, print it, with space before. + % Eventually this needs to become an \insert. + \ifx\captionline\empty \else + \vskip.5\parskip + \captionline + % + % Space below caption. + \vskip\parskip + \fi + % + % If have an xref label, write the list of floats info. Do this + % after the caption, to avoid chance of it being a breakpoint. + \ifx\floatlabel\empty \else + % Write the text that goes in the lof to the aux file as + % \floatlabel-lof. Besides \floatident, we include the short + % caption if specified, else the full caption if specified, else nothing. + {% + \atdummies \turnoffactive \otherbackslash + % since we read the caption text in the macro world, where ^^M + % is turned into a normal character, we have to scan it back, so + % we don't write the literal three characters "^^M" into the aux file. + \scanexp{% + \xdef\noexpand\gtemp{% + \ifx\thisshortcaption\empty + \thiscaption + \else + \thisshortcaption + \fi + }% + }% + \immediate\write\auxfile{@xrdef{\floatlabel-lof}{\floatident + \ifx\gtemp\empty \else : \gtemp \fi}}% + }% + \fi + \egroup % end of \vtop + % + % place the captured inserts + % + % BEWARE: when the floats start float, we have to issue warning whenever an + % insert appears inside a float which could possibly float. --kasal, 26may04 + % + \checkinserts +} + +% Append the tokens #2 to the definition of macro #1, not expanding either. +% +\def\appendtomacro#1#2{% + \expandafter\def\expandafter#1\expandafter{#1#2}% +} + +% @caption, @shortcaption +% +\def\caption{\docaption\thiscaption} +\def\shortcaption{\docaption\thisshortcaption} +\def\docaption{\checkenv\float \bgroup\scanargctxt\defcaption} +\def\defcaption#1#2{\egroup \def#1{#2}} + +% The parameter is the control sequence identifying the counter we are +% going to use. Create it if it doesn't exist and assign it to \floatno. +\def\getfloatno#1{% + \ifx#1\relax + % Haven't seen this figure type before. + \csname newcount\endcsname #1% + % + % Remember to reset this floatno at the next chap. + \expandafter\gdef\expandafter\resetallfloatnos + \expandafter{\resetallfloatnos #1=0 }% + \fi + \let\floatno#1% +} + +% \setref calls this to get the XREFLABEL-snt value. We want an @xref +% to the FLOATLABEL to expand to "Figure 3.1". We call \setref when we +% first read the @float command. +% +\def\Yfloat{\floattype@tie \chaplevelprefix\the\floatno}% + +% Magic string used for the XREFLABEL-title value, so \xrefX can +% distinguish floats from other xref types. +\def\floatmagic{!!float!!} + +% #1 is the control sequence we are passed; we expand into a conditional +% which is true if #1 represents a float ref. That is, the magic +% \thissection value which we \setref above. +% +\def\iffloat#1{\expandafter\doiffloat#1==\finish} +% +% #1 is (maybe) the \floatmagic string. If so, #2 will be the +% (safe) float type for this float. We set \iffloattype to #2. +% +\def\doiffloat#1=#2=#3\finish{% + \def\temp{#1}% + \def\iffloattype{#2}% + \ifx\temp\floatmagic +} + +% @listoffloats FLOATTYPE - print a list of floats like a table of contents. +% +\parseargdef\listoffloats{% + \def\floattype{#1}% floattype + {% + % the floattype might have accents or other special characters, + % but we need to use it in a control sequence name. + \indexnofonts + \turnoffactive + \xdef\safefloattype{\floattype}% + }% + % + % \xrdef saves the floats as a \do-list in \floatlistSAFEFLOATTYPE. + \expandafter\ifx\csname floatlist\safefloattype\endcsname \relax + \ifhavexrefs + % if the user said @listoffloats foo but never @float foo. + \message{\linenumber No `\safefloattype' floats to list.}% + \fi + \else + \begingroup + \leftskip=\tocindent % indent these entries like a toc + \let\do=\listoffloatsdo + \csname floatlist\safefloattype\endcsname + \endgroup + \fi +} + +% This is called on each entry in a list of floats. We're passed the +% xref label, in the form LABEL-title, which is how we save it in the +% aux file. We strip off the -title and look up \XRLABEL-lof, which +% has the text we're supposed to typeset here. +% +% Figures without xref labels will not be included in the list (since +% they won't appear in the aux file). +% +\def\listoffloatsdo#1{\listoffloatsdoentry#1\finish} +\def\listoffloatsdoentry#1-title\finish{{% + % Can't fully expand XR#1-lof because it can contain anything. Just + % pass the control sequence. On the other hand, XR#1-pg is just the + % page number, and we want to fully expand that so we can get a link + % in pdf output. + \toksA = \expandafter{\csname XR#1-lof\endcsname}% + % + % use the same \entry macro we use to generate the TOC and index. + \edef\writeentry{\noexpand\entry{\the\toksA}{\csname XR#1-pg\endcsname}}% + \writeentry +}} + +\message{localization,} +% and i18n. + +% @documentlanguage is usually given very early, just after +% @setfilename. If done too late, it may not override everything +% properly. Single argument is the language abbreviation. +% It would be nice if we could set up a hyphenation file here. +% +\parseargdef\documentlanguage{% + \tex % read txi-??.tex file in plain TeX. + % Read the file if it exists. + \openin 1 txi-#1.tex + \ifeof 1 + \errhelp = \nolanghelp + \errmessage{Cannot read language file txi-#1.tex}% + \else + \input txi-#1.tex + \fi + \closein 1 + \endgroup +} +\newhelp\nolanghelp{The given language definition file cannot be found or +is empty. Maybe you need to install it? In the current directory +should work if nowhere else does.} + + +% @documentencoding should change something in TeX eventually, most +% likely, but for now just recognize it. +\let\documentencoding = \comment + + +% Page size parameters. +% +\newdimen\defaultparindent \defaultparindent = 15pt + +\chapheadingskip = 15pt plus 4pt minus 2pt +\secheadingskip = 12pt plus 3pt minus 2pt +\subsecheadingskip = 9pt plus 2pt minus 2pt + +% Prevent underfull vbox error messages. +\vbadness = 10000 + +% Don't be so finicky about underfull hboxes, either. +\hbadness = 2000 + +% Following George Bush, just get rid of widows and orphans. +\widowpenalty=10000 +\clubpenalty=10000 + +% Use TeX 3.0's \emergencystretch to help line breaking, but if we're +% using an old version of TeX, don't do anything. We want the amount of +% stretch added to depend on the line length, hence the dependence on +% \hsize. We call this whenever the paper size is set. +% +\def\setemergencystretch{% + \ifx\emergencystretch\thisisundefined + % Allow us to assign to \emergencystretch anyway. + \def\emergencystretch{\dimen0}% + \else + \emergencystretch = .15\hsize + \fi +} + +% Parameters in order: 1) textheight; 2) textwidth; 3) voffset; +% 4) hoffset; 5) binding offset; 6) topskip; 7) physical page height; 8) +% physical page width. +% +% We also call \setleading{\textleading}, so the caller should define +% \textleading. The caller should also set \parskip. +% +\def\internalpagesizes#1#2#3#4#5#6#7#8{% + \voffset = #3\relax + \topskip = #6\relax + \splittopskip = \topskip + % + \vsize = #1\relax + \advance\vsize by \topskip + \outervsize = \vsize + \advance\outervsize by 2\topandbottommargin + \pageheight = \vsize + % + \hsize = #2\relax + \outerhsize = \hsize + \advance\outerhsize by 0.5in + \pagewidth = \hsize + % + \normaloffset = #4\relax + \bindingoffset = #5\relax + % + \ifpdf + \pdfpageheight #7\relax + \pdfpagewidth #8\relax + \fi + % + \setleading{\textleading} + % + \parindent = \defaultparindent + \setemergencystretch +} + +% @letterpaper (the default). +\def\letterpaper{{\globaldefs = 1 + \parskip = 3pt plus 2pt minus 1pt + \textleading = 13.2pt + % + % If page is nothing but text, make it come out even. + \internalpagesizes{46\baselineskip}{6in}% + {\voffset}{.25in}% + {\bindingoffset}{36pt}% + {11in}{8.5in}% +}} + +% Use @smallbook to reset parameters for 7x9.5 (or so) format. +\def\smallbook{{\globaldefs = 1 + \parskip = 2pt plus 1pt + \textleading = 12pt + % + \internalpagesizes{7.5in}{5in}% + {\voffset}{.25in}% + {\bindingoffset}{16pt}% + {9.25in}{7in}% + % + \lispnarrowing = 0.3in + \tolerance = 700 + \hfuzz = 1pt + \contentsrightmargin = 0pt + \defbodyindent = .5cm +}} + +% Use @afourpaper to print on European A4 paper. +\def\afourpaper{{\globaldefs = 1 + \parskip = 3pt plus 2pt minus 1pt + \textleading = 13.2pt + % + % Double-side printing via postscript on Laserjet 4050 + % prints double-sided nicely when \bindingoffset=10mm and \hoffset=-6mm. + % To change the settings for a different printer or situation, adjust + % \normaloffset until the front-side and back-side texts align. Then + % do the same for \bindingoffset. You can set these for testing in + % your texinfo source file like this: + % @tex + % \global\normaloffset = -6mm + % \global\bindingoffset = 10mm + % @end tex + \internalpagesizes{51\baselineskip}{160mm} + {\voffset}{\hoffset}% + {\bindingoffset}{44pt}% + {297mm}{210mm}% + % + \tolerance = 700 + \hfuzz = 1pt + \contentsrightmargin = 0pt + \defbodyindent = 5mm +}} + +% Use @afivepaper to print on European A5 paper. +% From romildo@urano.iceb.ufop.br, 2 July 2000. +% He also recommends making @example and @lisp be small. +\def\afivepaper{{\globaldefs = 1 + \parskip = 2pt plus 1pt minus 0.1pt + \textleading = 12.5pt + % + \internalpagesizes{160mm}{120mm}% + {\voffset}{\hoffset}% + {\bindingoffset}{8pt}% + {210mm}{148mm}% + % + \lispnarrowing = 0.2in + \tolerance = 800 + \hfuzz = 1.2pt + \contentsrightmargin = 0pt + \defbodyindent = 2mm + \tableindent = 12mm +}} + +% A specific text layout, 24x15cm overall, intended for A4 paper. +\def\afourlatex{{\globaldefs = 1 + \afourpaper + \internalpagesizes{237mm}{150mm}% + {\voffset}{4.6mm}% + {\bindingoffset}{7mm}% + {297mm}{210mm}% + % + % Must explicitly reset to 0 because we call \afourpaper. + \globaldefs = 0 +}} + +% Use @afourwide to print on A4 paper in landscape format. +\def\afourwide{{\globaldefs = 1 + \afourpaper + \internalpagesizes{241mm}{165mm}% + {\voffset}{-2.95mm}% + {\bindingoffset}{7mm}% + {297mm}{210mm}% + \globaldefs = 0 +}} + +% @pagesizes TEXTHEIGHT[,TEXTWIDTH] +% Perhaps we should allow setting the margins, \topskip, \parskip, +% and/or leading, also. Or perhaps we should compute them somehow. +% +\parseargdef\pagesizes{\pagesizesyyy #1,,\finish} +\def\pagesizesyyy#1,#2,#3\finish{{% + \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \hsize=#2\relax \fi + \globaldefs = 1 + % + \parskip = 3pt plus 2pt minus 1pt + \setleading{\textleading}% + % + \dimen0 = #1 + \advance\dimen0 by \voffset + % + \dimen2 = \hsize + \advance\dimen2 by \normaloffset + % + \internalpagesizes{#1}{\hsize}% + {\voffset}{\normaloffset}% + {\bindingoffset}{44pt}% + {\dimen0}{\dimen2}% +}} + +% Set default to letter. +% +\letterpaper + + +\message{and turning on texinfo input format.} + +% Define macros to output various characters with catcode for normal text. +\catcode`\"=\other +\catcode`\~=\other +\catcode`\^=\other +\catcode`\_=\other +\catcode`\|=\other +\catcode`\<=\other +\catcode`\>=\other +\catcode`\+=\other +\catcode`\$=\other +\def\normaldoublequote{"} +\def\normaltilde{~} +\def\normalcaret{^} +\def\normalunderscore{_} +\def\normalverticalbar{|} +\def\normalless{<} +\def\normalgreater{>} +\def\normalplus{+} +\def\normaldollar{$}%$ font-lock fix + +% This macro is used to make a character print one way in \tt +% (where it can probably be output as-is), and another way in other fonts, +% where something hairier probably needs to be done. +% +% #1 is what to print if we are indeed using \tt; #2 is what to print +% otherwise. Since all the Computer Modern typewriter fonts have zero +% interword stretch (and shrink), and it is reasonable to expect all +% typewriter fonts to have this, we can check that font parameter. +% +\def\ifusingtt#1#2{\ifdim \fontdimen3\font=0pt #1\else #2\fi} + +% Same as above, but check for italic font. Actually this also catches +% non-italic slanted fonts since it is impossible to distinguish them from +% italic fonts. But since this is only used by $ and it uses \sl anyway +% this is not a problem. +\def\ifusingit#1#2{\ifdim \fontdimen1\font>0pt #1\else #2\fi} + +% Turn off all special characters except @ +% (and those which the user can use as if they were ordinary). +% Most of these we simply print from the \tt font, but for some, we can +% use math or other variants that look better in normal text. + +\catcode`\"=\active +\def\activedoublequote{{\tt\char34}} +\let"=\activedoublequote +\catcode`\~=\active +\def~{{\tt\char126}} +\chardef\hat=`\^ +\catcode`\^=\active +\def^{{\tt \hat}} + +\catcode`\_=\active +\def_{\ifusingtt\normalunderscore\_} +% Subroutine for the previous macro. +\def\_{\leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em } + +\catcode`\|=\active +\def|{{\tt\char124}} +\chardef \less=`\< +\catcode`\<=\active +\def<{{\tt \less}} +\chardef \gtr=`\> +\catcode`\>=\active +\def>{{\tt \gtr}} +\catcode`\+=\active +\def+{{\tt \char 43}} +\catcode`\$=\active +\def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix + +% If a .fmt file is being used, characters that might appear in a file +% name cannot be active until we have parsed the command line. +% So turn them off again, and have \everyjob (or @setfilename) turn them on. +% \otherifyactive is called near the end of this file. +\def\otherifyactive{\catcode`+=\other \catcode`\_=\other} + +\catcode`\@=0 + +% \backslashcurfont outputs one backslash character in current font, +% as in \char`\\. +\global\chardef\backslashcurfont=`\\ +\global\let\rawbackslashxx=\backslashcurfont % let existing .??s files work + +% \rawbackslash defines an active \ to do \backslashcurfont. +% \otherbackslash defines an active \ to be a literal `\' character with +% catcode other. +{\catcode`\\=\active + @gdef@rawbackslash{@let\=@backslashcurfont} + @gdef@otherbackslash{@let\=@realbackslash} +} + +% \realbackslash is an actual character `\' with catcode other. +{\catcode`\\=\other @gdef@realbackslash{\}} + +% \normalbackslash outputs one backslash in fixed width font. +\def\normalbackslash{{\tt\backslashcurfont}} + +\catcode`\\=\active + +% Used sometimes to turn off (effectively) the active characters +% even after parsing them. +@def@turnoffactive{% + @let"=@normaldoublequote + @let\=@realbackslash + @let~=@normaltilde + @let^=@normalcaret + @let_=@normalunderscore + @let|=@normalverticalbar + @let<=@normalless + @let>=@normalgreater + @let+=@normalplus + @let$=@normaldollar %$ font-lock fix + @unsepspaces +} + +% Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of +% the literal character `\'. (Thus, \ is not expandable when this is in +% effect.) +% +@def@normalturnoffactive{@turnoffactive @let\=@normalbackslash} + +% Make _ and + \other characters, temporarily. +% This is canceled by @fixbackslash. +@otherifyactive + +% If a .fmt file is being used, we don't want the `\input texinfo' to show up. +% That is what \eatinput is for; after that, the `\' should revert to printing +% a backslash. +% +@gdef@eatinput input texinfo{@fixbackslash} +@global@let\ = @eatinput + +% On the other hand, perhaps the file did not have a `\input texinfo'. Then +% the first `\{ in the file would cause an error. This macro tries to fix +% that, assuming it is called before the first `\' could plausibly occur. +% Also back turn on active characters that might appear in the input +% file name, in case not using a pre-dumped format. +% +@gdef@fixbackslash{% + @ifx\@eatinput @let\ = @normalbackslash @fi + @catcode`+=@active + @catcode`@_=@active +} + +% Say @foo, not \foo, in error messages. +@escapechar = `@@ + +% These look ok in all fonts, so just make them not special. +@catcode`@& = @other +@catcode`@# = @other +@catcode`@% = @other + + +@c Local variables: +@c eval: (add-hook 'write-file-hooks 'time-stamp) +@c page-delimiter: "^\\\\message" +@c time-stamp-start: "def\\\\texinfoversion{" +@c time-stamp-format: "%:y-%02m-%02d.%02H" +@c time-stamp-end: "}" +@c End: + +@c vim:sw=2: + +@ignore + arch-tag: e1b36e32-c96e-4135-a41a-0b2efa2ea115 +@end ignore Index: trunk/doc-orig/thermal.pcb =================================================================== --- trunk/doc-orig/thermal.pcb (nonexistent) +++ trunk/doc-orig/thermal.pcb (revision 1037) @@ -0,0 +1,844 @@ +# release: pcb-bin 1.99q + +PCB["thermal" 300000 300000] + +Grid[5000.00000000 0 0 1] +Cursor[88600 72400 2.000000] +Thermal[0.500000] +DRC[699 400 800 800 1000 750] +Flags(0x0000000000000840) +Groups("1,s:2,c:3:4:5:6:7:8") +Styles["Signal,2500,30000,10000,0:Power,2500,6000,3500,1000:Fat,4000,6000,3500,1000:Skinny,200,2402,1181,600"] + +Symbol[' ' 1800] +( +) +Symbol['!' 1200] +( + SymbolLine[0 4500 0 5000 800] + SymbolLine[0 1000 0 3500 800] +) +Symbol['"' 1200] +( + SymbolLine[0 1000 0 2000 800] + SymbolLine[1000 1000 1000 2000 800] +) +Symbol['#' 1200] +( + SymbolLine[0 3500 2000 3500 800] + SymbolLine[0 2500 2000 2500 800] + SymbolLine[1500 2000 1500 4000 800] + SymbolLine[500 2000 500 4000 800] +) +Symbol['$' 1200] +( + SymbolLine[1500 1500 2000 2000 800] + SymbolLine[500 1500 1500 1500 800] + SymbolLine[0 2000 500 1500 800] + SymbolLine[0 2000 0 2500 800] + SymbolLine[0 2500 500 3000 800] + SymbolLine[500 3000 1500 3000 800] + SymbolLine[1500 3000 2000 3500 800] + SymbolLine[2000 3500 2000 4000 800] + SymbolLine[1500 4500 2000 4000 800] + SymbolLine[500 4500 1500 4500 800] + SymbolLine[0 4000 500 4500 800] + SymbolLine[1000 1000 1000 5000 800] +) +Symbol['%' 1200] +( + SymbolLine[0 1500 0 2000 800] + SymbolLine[0 1500 500 1000 800] + SymbolLine[500 1000 1000 1000 800] + SymbolLine[1000 1000 1500 1500 800] + SymbolLine[1500 1500 1500 2000 800] + SymbolLine[1000 2500 1500 2000 800] + SymbolLine[500 2500 1000 2500 800] + SymbolLine[0 2000 500 2500 800] + SymbolLine[0 5000 4000 1000 800] + SymbolLine[3500 5000 4000 4500 800] + SymbolLine[4000 4000 4000 4500 800] + SymbolLine[3500 3500 4000 4000 800] + SymbolLine[3000 3500 3500 3500 800] + SymbolLine[2500 4000 3000 3500 800] + SymbolLine[2500 4000 2500 4500 800] + SymbolLine[2500 4500 3000 5000 800] + SymbolLine[3000 5000 3500 5000 800] +) +Symbol['&' 1200] +( + SymbolLine[0 4500 500 5000 800] + SymbolLine[0 1500 0 2500 800] + SymbolLine[0 1500 500 1000 800] + SymbolLine[0 3500 1500 2000 800] + SymbolLine[500 5000 1000 5000 800] + SymbolLine[1000 5000 2000 4000 800] + SymbolLine[0 2500 2500 5000 800] + SymbolLine[500 1000 1000 1000 800] + SymbolLine[1000 1000 1500 1500 800] + SymbolLine[1500 1500 1500 2000 800] + SymbolLine[0 3500 0 4500 800] +) +Symbol[''' 1200] +( + SymbolLine[0 2000 1000 1000 800] +) +Symbol['(' 1200] +( + SymbolLine[0 4500 500 5000 800] + SymbolLine[0 1500 500 1000 800] + SymbolLine[0 1500 0 4500 800] +) +Symbol[')' 1200] +( + SymbolLine[0 1000 500 1500 800] + SymbolLine[500 1500 500 4500 800] + SymbolLine[0 5000 500 4500 800] +) +Symbol['*' 1200] +( + SymbolLine[0 2000 2000 4000 800] + SymbolLine[0 4000 2000 2000 800] + SymbolLine[0 3000 2000 3000 800] + SymbolLine[1000 2000 1000 4000 800] +) +Symbol['+' 1200] +( + SymbolLine[0 3000 2000 3000 800] + SymbolLine[1000 2000 1000 4000 800] +) +Symbol[',' 1200] +( + SymbolLine[0 6000 1000 5000 800] +) +Symbol['-' 1200] +( + SymbolLine[0 3000 2000 3000 800] +) +Symbol['.' 1200] +( + SymbolLine[0 5000 500 5000 800] +) +Symbol['/' 1200] +( + SymbolLine[0 4500 3000 1500 800] +) +Symbol['0' 1200] +( + SymbolLine[0 4500 500 5000 800] + SymbolLine[0 1500 0 4500 800] + SymbolLine[0 1500 500 1000 800] + SymbolLine[500 1000 1500 1000 800] + SymbolLine[1500 1000 2000 1500 800] + SymbolLine[2000 1500 2000 4500 800] + SymbolLine[1500 5000 2000 4500 800] + SymbolLine[500 5000 1500 5000 800] + SymbolLine[0 4000 2000 2000 800] +) +Symbol['1' 1200] +( + SymbolLine[500 5000 1500 5000 800] + SymbolLine[1000 1000 1000 5000 800] + SymbolLine[0 2000 1000 1000 800] +) +Symbol['2' 1200] +( + SymbolLine[0 1500 500 1000 800] + SymbolLine[500 1000 2000 1000 800] + SymbolLine[2000 1000 2500 1500 800] + SymbolLine[2500 1500 2500 2500 800] + SymbolLine[0 5000 2500 2500 800] + SymbolLine[0 5000 2500 5000 800] +) +Symbol['3' 1200] +( + SymbolLine[0 1500 500 1000 800] + SymbolLine[500 1000 1500 1000 800] + SymbolLine[1500 1000 2000 1500 800] + SymbolLine[2000 1500 2000 4500 800] + SymbolLine[1500 5000 2000 4500 800] + SymbolLine[500 5000 1500 5000 800] + SymbolLine[0 4500 500 5000 800] + SymbolLine[500 3000 2000 3000 800] +) +Symbol['4' 1200] +( + SymbolLine[0 3000 2000 1000 800] + SymbolLine[0 3000 2500 3000 800] + SymbolLine[2000 1000 2000 5000 800] +) +Symbol['5' 1200] +( + SymbolLine[0 1000 2000 1000 800] + SymbolLine[0 1000 0 3000 800] + SymbolLine[0 3000 500 2500 800] + SymbolLine[500 2500 1500 2500 800] + SymbolLine[1500 2500 2000 3000 800] + SymbolLine[2000 3000 2000 4500 800] + SymbolLine[1500 5000 2000 4500 800] + SymbolLine[500 5000 1500 5000 800] + SymbolLine[0 4500 500 5000 800] +) +Symbol['6' 1200] +( + SymbolLine[1500 1000 2000 1500 800] + SymbolLine[500 1000 1500 1000 800] + SymbolLine[0 1500 500 1000 800] + SymbolLine[0 1500 0 4500 800] + SymbolLine[0 4500 500 5000 800] + SymbolLine[1500 3000 2000 3500 800] + SymbolLine[0 3000 1500 3000 800] + SymbolLine[500 5000 1500 5000 800] + SymbolLine[1500 5000 2000 4500 800] + SymbolLine[2000 3500 2000 4500 800] +) +Symbol['7' 1200] +( + SymbolLine[0 5000 2500 2500 800] + SymbolLine[2500 1000 2500 2500 800] + SymbolLine[0 1000 2500 1000 800] +) +Symbol['8' 1200] +( + SymbolLine[0 4500 500 5000 800] + SymbolLine[0 3500 0 4500 800] + SymbolLine[0 3500 500 3000 800] + SymbolLine[500 3000 1500 3000 800] + SymbolLine[1500 3000 2000 3500 800] + SymbolLine[2000 3500 2000 4500 800] + SymbolLine[1500 5000 2000 4500 800] + SymbolLine[500 5000 1500 5000 800] + SymbolLine[0 2500 500 3000 800] + SymbolLine[0 1500 0 2500 800] + SymbolLine[0 1500 500 1000 800] + SymbolLine[500 1000 1500 1000 800] + SymbolLine[1500 1000 2000 1500 800] + SymbolLine[2000 1500 2000 2500 800] + SymbolLine[1500 3000 2000 2500 800] +) +Symbol['9' 1200] +( + SymbolLine[0 5000 2000 3000 800] + SymbolLine[2000 1500 2000 3000 800] + SymbolLine[1500 1000 2000 1500 800] + SymbolLine[500 1000 1500 1000 800] + SymbolLine[0 1500 500 1000 800] + SymbolLine[0 1500 0 2500 800] + SymbolLine[0 2500 500 3000 800] + SymbolLine[500 3000 2000 3000 800] +) +Symbol[':' 1200] +( + SymbolLine[0 2500 500 2500 800] + SymbolLine[0 3500 500 3500 800] +) +Symbol[';' 1200] +( + SymbolLine[0 5000 1000 4000 800] + SymbolLine[1000 2500 1000 3000 800] +) +Symbol['<' 1200] +( + SymbolLine[0 3000 1000 2000 800] + SymbolLine[0 3000 1000 4000 800] +) +Symbol['=' 1200] +( + SymbolLine[0 2500 2000 2500 800] + SymbolLine[0 3500 2000 3500 800] +) +Symbol['>' 1200] +( + SymbolLine[0 2000 1000 3000 800] + SymbolLine[0 4000 1000 3000 800] +) +Symbol['?' 1200] +( + SymbolLine[1000 3000 1000 3500 800] + SymbolLine[1000 4500 1000 5000 800] + SymbolLine[0 1500 0 2000 800] + SymbolLine[0 1500 500 1000 800] + SymbolLine[500 1000 1500 1000 800] + SymbolLine[1500 1000 2000 1500 800] + SymbolLine[2000 1500 2000 2000 800] + SymbolLine[1000 3000 2000 2000 800] +) +Symbol['@' 1200] +( + SymbolLine[0 1000 0 4000 800] + SymbolLine[0 4000 1000 5000 800] + SymbolLine[1000 5000 4000 5000 800] + SymbolLine[5000 3500 5000 1000 800] + SymbolLine[5000 1000 4000 0 800] + SymbolLine[4000 0 1000 0 800] + SymbolLine[1000 0 0 1000 800] + SymbolLine[1500 2000 1500 3000 800] + SymbolLine[1500 3000 2000 3500 800] + SymbolLine[2000 3500 3000 3500 800] + SymbolLine[3000 3500 3500 3000 800] + SymbolLine[3500 3000 4000 3500 800] + SymbolLine[3500 3000 3500 1500 800] + SymbolLine[3500 2000 3000 1500 800] + SymbolLine[2000 1500 3000 1500 800] + SymbolLine[2000 1500 1500 2000 800] + SymbolLine[4000 3500 5000 3500 800] +) +Symbol['A' 1200] +( + SymbolLine[0 1500 0 5000 800] + SymbolLine[0 1500 500 1000 800] + SymbolLine[500 1000 2000 1000 800] + SymbolLine[2000 1000 2500 1500 800] + SymbolLine[2500 1500 2500 5000 800] + SymbolLine[0 3000 2500 3000 800] +) +Symbol['B' 1200] +( + SymbolLine[0 5000 2000 5000 800] + SymbolLine[2000 5000 2500 4500 800] + SymbolLine[2500 3500 2500 4500 800] + SymbolLine[2000 3000 2500 3500 800] + SymbolLine[500 3000 2000 3000 800] + SymbolLine[500 1000 500 5000 800] + SymbolLine[0 1000 2000 1000 800] + SymbolLine[2000 1000 2500 1500 800] + SymbolLine[2500 1500 2500 2500 800] + SymbolLine[2000 3000 2500 2500 800] +) +Symbol['C' 1200] +( + SymbolLine[500 5000 2000 5000 800] + SymbolLine[0 4500 500 5000 800] + SymbolLine[0 1500 0 4500 800] + SymbolLine[0 1500 500 1000 800] + SymbolLine[500 1000 2000 1000 800] +) +Symbol['D' 1200] +( + SymbolLine[500 1000 500 5000 800] + SymbolLine[2000 1000 2500 1500 800] + SymbolLine[2500 1500 2500 4500 800] + SymbolLine[2000 5000 2500 4500 800] + SymbolLine[0 5000 2000 5000 800] + SymbolLine[0 1000 2000 1000 800] +) +Symbol['E' 1200] +( + SymbolLine[0 3000 1500 3000 800] + SymbolLine[0 5000 2000 5000 800] + SymbolLine[0 1000 0 5000 800] + SymbolLine[0 1000 2000 1000 800] +) +Symbol['F' 1200] +( + SymbolLine[0 1000 0 5000 800] + SymbolLine[0 1000 2000 1000 800] + SymbolLine[0 3000 1500 3000 800] +) +Symbol['G' 1200] +( + SymbolLine[2000 1000 2500 1500 800] + SymbolLine[500 1000 2000 1000 800] + SymbolLine[0 1500 500 1000 800] + SymbolLine[0 1500 0 4500 800] + SymbolLine[0 4500 500 5000 800] + SymbolLine[500 5000 2000 5000 800] + SymbolLine[2000 5000 2500 4500 800] + SymbolLine[2500 3500 2500 4500 800] + SymbolLine[2000 3000 2500 3500 800] + SymbolLine[1000 3000 2000 3000 800] +) +Symbol['H' 1200] +( + SymbolLine[0 1000 0 5000 800] + SymbolLine[2500 1000 2500 5000 800] + SymbolLine[0 3000 2500 3000 800] +) +Symbol['I' 1200] +( + SymbolLine[0 1000 1000 1000 800] + SymbolLine[500 1000 500 5000 800] + SymbolLine[0 5000 1000 5000 800] +) +Symbol['J' 1200] +( + SymbolLine[0 1000 1500 1000 800] + SymbolLine[1500 1000 1500 4500 800] + SymbolLine[1000 5000 1500 4500 800] + SymbolLine[500 5000 1000 5000 800] + SymbolLine[0 4500 500 5000 800] +) +Symbol['K' 1200] +( + SymbolLine[0 1000 0 5000 800] + SymbolLine[0 3000 2000 1000 800] + SymbolLine[0 3000 2000 5000 800] +) +Symbol['L' 1200] +( + SymbolLine[0 1000 0 5000 800] + SymbolLine[0 5000 2000 5000 800] +) +Symbol['M' 1200] +( + SymbolLine[0 1000 0 5000 800] + SymbolLine[0 1000 1500 2500 800] + SymbolLine[1500 2500 3000 1000 800] + SymbolLine[3000 1000 3000 5000 800] +) +Symbol['N' 1200] +( + SymbolLine[0 1000 0 5000 800] + SymbolLine[0 1000 0 1500 800] + SymbolLine[0 1500 2500 4000 800] + SymbolLine[2500 1000 2500 5000 800] +) +Symbol['O' 1200] +( + SymbolLine[0 1500 0 4500 800] + SymbolLine[0 1500 500 1000 800] + SymbolLine[500 1000 1500 1000 800] + SymbolLine[1500 1000 2000 1500 800] + SymbolLine[2000 1500 2000 4500 800] + SymbolLine[1500 5000 2000 4500 800] + SymbolLine[500 5000 1500 5000 800] + SymbolLine[0 4500 500 5000 800] +) +Symbol['P' 1200] +( + SymbolLine[500 1000 500 5000 800] + SymbolLine[0 1000 2000 1000 800] + SymbolLine[2000 1000 2500 1500 800] + SymbolLine[2500 1500 2500 2500 800] + SymbolLine[2000 3000 2500 2500 800] + SymbolLine[500 3000 2000 3000 800] +) +Symbol['Q' 1200] +( + SymbolLine[0 1500 0 4500 800] + SymbolLine[0 1500 500 1000 800] + SymbolLine[500 1000 1500 1000 800] + SymbolLine[1500 1000 2000 1500 800] + SymbolLine[2000 1500 2000 4500 800] + SymbolLine[1500 5000 2000 4500 800] + SymbolLine[500 5000 1500 5000 800] + SymbolLine[0 4500 500 5000 800] + SymbolLine[1000 4000 2000 5000 800] +) +Symbol['R' 1200] +( + SymbolLine[0 1000 2000 1000 800] + SymbolLine[2000 1000 2500 1500 800] + SymbolLine[2500 1500 2500 2500 800] + SymbolLine[2000 3000 2500 2500 800] + SymbolLine[500 3000 2000 3000 800] + SymbolLine[500 1000 500 5000 800] + SymbolLine[500 3000 2500 5000 800] +) +Symbol['S' 1200] +( + SymbolLine[2000 1000 2500 1500 800] + SymbolLine[500 1000 2000 1000 800] + SymbolLine[0 1500 500 1000 800] + SymbolLine[0 1500 0 2500 800] + SymbolLine[0 2500 500 3000 800] + SymbolLine[500 3000 2000 3000 800] + SymbolLine[2000 3000 2500 3500 800] + SymbolLine[2500 3500 2500 4500 800] + SymbolLine[2000 5000 2500 4500 800] + SymbolLine[500 5000 2000 5000 800] + SymbolLine[0 4500 500 5000 800] +) +Symbol['T' 1200] +( + SymbolLine[0 1000 2000 1000 800] + SymbolLine[1000 1000 1000 5000 800] +) +Symbol['U' 1200] +( + SymbolLine[0 1000 0 4500 800] + SymbolLine[0 4500 500 5000 800] + SymbolLine[500 5000 1500 5000 800] + SymbolLine[1500 5000 2000 4500 800] + SymbolLine[2000 1000 2000 4500 800] +) +Symbol['V' 1200] +( + SymbolLine[0 1000 0 4000 800] + SymbolLine[0 4000 1000 5000 800] + SymbolLine[1000 5000 2000 4000 800] + SymbolLine[2000 1000 2000 4000 800] +) +Symbol['W' 1200] +( + SymbolLine[0 1000 0 5000 800] + SymbolLine[0 5000 1500 3500 800] + SymbolLine[1500 3500 3000 5000 800] + SymbolLine[3000 1000 3000 5000 800] +) +Symbol['X' 1200] +( + SymbolLine[0 1000 0 1500 800] + SymbolLine[0 1500 2500 4000 800] + SymbolLine[2500 4000 2500 5000 800] + SymbolLine[0 4000 0 5000 800] + SymbolLine[0 4000 2500 1500 800] + SymbolLine[2500 1000 2500 1500 800] +) +Symbol['Y' 1200] +( + SymbolLine[0 1000 0 1500 800] + SymbolLine[0 1500 1000 2500 800] + SymbolLine[1000 2500 2000 1500 800] + SymbolLine[2000 1000 2000 1500 800] + SymbolLine[1000 2500 1000 5000 800] +) +Symbol['Z' 1200] +( + SymbolLine[0 1000 2500 1000 800] + SymbolLine[2500 1000 2500 1500 800] + SymbolLine[0 4000 2500 1500 800] + SymbolLine[0 4000 0 5000 800] + SymbolLine[0 5000 2500 5000 800] +) +Symbol['[' 1200] +( + SymbolLine[0 1000 500 1000 800] + SymbolLine[0 1000 0 5000 800] + SymbolLine[0 5000 500 5000 800] +) +Symbol['\' 1200] +( + SymbolLine[0 1500 3000 4500 800] +) +Symbol[']' 1200] +( + SymbolLine[0 1000 500 1000 800] + SymbolLine[500 1000 500 5000 800] + SymbolLine[0 5000 500 5000 800] +) +Symbol['^' 1200] +( + SymbolLine[0 1500 500 1000 800] + SymbolLine[500 1000 1000 1500 800] +) +Symbol['_' 1200] +( + SymbolLine[0 5000 2000 5000 800] +) +Symbol['a' 1200] +( + SymbolLine[1500 3000 2000 3500 800] + SymbolLine[500 3000 1500 3000 800] + SymbolLine[0 3500 500 3000 800] + SymbolLine[0 3500 0 4500 800] + SymbolLine[0 4500 500 5000 800] + SymbolLine[2000 3000 2000 4500 800] + SymbolLine[2000 4500 2500 5000 800] + SymbolLine[500 5000 1500 5000 800] + SymbolLine[1500 5000 2000 4500 800] +) +Symbol['b' 1200] +( + SymbolLine[0 1000 0 5000 800] + SymbolLine[0 4500 500 5000 800] + SymbolLine[500 5000 1500 5000 800] + SymbolLine[1500 5000 2000 4500 800] + SymbolLine[2000 3500 2000 4500 800] + SymbolLine[1500 3000 2000 3500 800] + SymbolLine[500 3000 1500 3000 800] + SymbolLine[0 3500 500 3000 800] +) +Symbol['c' 1200] +( + SymbolLine[500 3000 2000 3000 800] + SymbolLine[0 3500 500 3000 800] + SymbolLine[0 3500 0 4500 800] + SymbolLine[0 4500 500 5000 800] + SymbolLine[500 5000 2000 5000 800] +) +Symbol['d' 1200] +( + SymbolLine[2000 1000 2000 5000 800] + SymbolLine[1500 5000 2000 4500 800] + SymbolLine[500 5000 1500 5000 800] + SymbolLine[0 4500 500 5000 800] + SymbolLine[0 3500 0 4500 800] + SymbolLine[0 3500 500 3000 800] + SymbolLine[500 3000 1500 3000 800] + SymbolLine[1500 3000 2000 3500 800] +) +Symbol['e' 1200] +( + SymbolLine[500 5000 2000 5000 800] + SymbolLine[0 4500 500 5000 800] + SymbolLine[0 3500 0 4500 800] + SymbolLine[0 3500 500 3000 800] + SymbolLine[500 3000 1500 3000 800] + SymbolLine[1500 3000 2000 3500 800] + SymbolLine[0 4000 2000 4000 800] + SymbolLine[2000 4000 2000 3500 800] +) +Symbol['f' 1000] +( + SymbolLine[500 1500 500 5000 800] + SymbolLine[500 1500 1000 1000 800] + SymbolLine[1000 1000 1500 1000 800] + SymbolLine[0 3000 1000 3000 800] +) +Symbol['g' 1200] +( + SymbolLine[1500 3000 2000 3500 800] + SymbolLine[500 3000 1500 3000 800] + SymbolLine[0 3500 500 3000 800] + SymbolLine[0 3500 0 4500 800] + SymbolLine[0 4500 500 5000 800] + SymbolLine[500 5000 1500 5000 800] + SymbolLine[1500 5000 2000 4500 800] + SymbolLine[0 6000 500 6500 800] + SymbolLine[500 6500 1500 6500 800] + SymbolLine[1500 6500 2000 6000 800] + SymbolLine[2000 3000 2000 6000 800] +) +Symbol['h' 1200] +( + SymbolLine[0 1000 0 5000 800] + SymbolLine[0 3500 500 3000 800] + SymbolLine[500 3000 1500 3000 800] + SymbolLine[1500 3000 2000 3500 800] + SymbolLine[2000 3500 2000 5000 800] +) +Symbol['i' 1000] +( + SymbolLine[0 2000 0 2500 800] + SymbolLine[0 3500 0 5000 800] +) +Symbol['j' 1000] +( + SymbolLine[500 2000 500 2500 800] + SymbolLine[500 3500 500 6000 800] + SymbolLine[0 6500 500 6000 800] +) +Symbol['k' 1200] +( + SymbolLine[0 1000 0 5000 800] + SymbolLine[0 3500 1500 5000 800] + SymbolLine[0 3500 1000 2500 800] +) +Symbol['l' 1000] +( + SymbolLine[0 1000 0 4500 800] + SymbolLine[0 4500 500 5000 800] +) +Symbol['m' 1200] +( + SymbolLine[500 3500 500 5000 800] + SymbolLine[500 3500 1000 3000 800] + SymbolLine[1000 3000 1500 3000 800] + SymbolLine[1500 3000 2000 3500 800] + SymbolLine[2000 3500 2000 5000 800] + SymbolLine[2000 3500 2500 3000 800] + SymbolLine[2500 3000 3000 3000 800] + SymbolLine[3000 3000 3500 3500 800] + SymbolLine[3500 3500 3500 5000 800] + SymbolLine[0 3000 500 3500 800] +) +Symbol['n' 1200] +( + SymbolLine[500 3500 500 5000 800] + SymbolLine[500 3500 1000 3000 800] + SymbolLine[1000 3000 1500 3000 800] + SymbolLine[1500 3000 2000 3500 800] + SymbolLine[2000 3500 2000 5000 800] + SymbolLine[0 3000 500 3500 800] +) +Symbol['o' 1200] +( + SymbolLine[0 3500 0 4500 800] + SymbolLine[0 3500 500 3000 800] + SymbolLine[500 3000 1500 3000 800] + SymbolLine[1500 3000 2000 3500 800] + SymbolLine[2000 3500 2000 4500 800] + SymbolLine[1500 5000 2000 4500 800] + SymbolLine[500 5000 1500 5000 800] + SymbolLine[0 4500 500 5000 800] +) +Symbol['p' 1200] +( + SymbolLine[500 3500 500 6500 800] + SymbolLine[0 3000 500 3500 800] + SymbolLine[500 3500 1000 3000 800] + SymbolLine[1000 3000 2000 3000 800] + SymbolLine[2000 3000 2500 3500 800] + SymbolLine[2500 3500 2500 4500 800] + SymbolLine[2000 5000 2500 4500 800] + SymbolLine[1000 5000 2000 5000 800] + SymbolLine[500 4500 1000 5000 800] +) +Symbol['q' 1200] +( + SymbolLine[2000 3500 2000 6500 800] + SymbolLine[1500 3000 2000 3500 800] + SymbolLine[500 3000 1500 3000 800] + SymbolLine[0 3500 500 3000 800] + SymbolLine[0 3500 0 4500 800] + SymbolLine[0 4500 500 5000 800] + SymbolLine[500 5000 1500 5000 800] + SymbolLine[1500 5000 2000 4500 800] +) +Symbol['r' 1200] +( + SymbolLine[500 3500 500 5000 800] + SymbolLine[500 3500 1000 3000 800] + SymbolLine[1000 3000 2000 3000 800] + SymbolLine[0 3000 500 3500 800] +) +Symbol['s' 1200] +( + SymbolLine[500 5000 2000 5000 800] + SymbolLine[2000 5000 2500 4500 800] + SymbolLine[2000 4000 2500 4500 800] + SymbolLine[500 4000 2000 4000 800] + SymbolLine[0 3500 500 4000 800] + SymbolLine[0 3500 500 3000 800] + SymbolLine[500 3000 2000 3000 800] + SymbolLine[2000 3000 2500 3500 800] + SymbolLine[0 4500 500 5000 800] +) +Symbol['t' 1000] +( + SymbolLine[500 1000 500 4500 800] + SymbolLine[500 4500 1000 5000 800] + SymbolLine[0 2500 1000 2500 800] +) +Symbol['u' 1200] +( + SymbolLine[0 3000 0 4500 800] + SymbolLine[0 4500 500 5000 800] + SymbolLine[500 5000 1500 5000 800] + SymbolLine[1500 5000 2000 4500 800] + SymbolLine[2000 3000 2000 4500 800] +) +Symbol['v' 1200] +( + SymbolLine[0 3000 0 4000 800] + SymbolLine[0 4000 1000 5000 800] + SymbolLine[1000 5000 2000 4000 800] + SymbolLine[2000 3000 2000 4000 800] +) +Symbol['w' 1200] +( + SymbolLine[0 3000 0 4500 800] + SymbolLine[0 4500 500 5000 800] + SymbolLine[500 5000 1000 5000 800] + SymbolLine[1000 5000 1500 4500 800] + SymbolLine[1500 3000 1500 4500 800] + SymbolLine[1500 4500 2000 5000 800] + SymbolLine[2000 5000 2500 5000 800] + SymbolLine[2500 5000 3000 4500 800] + SymbolLine[3000 3000 3000 4500 800] +) +Symbol['x' 1200] +( + SymbolLine[0 3000 2000 5000 800] + SymbolLine[0 5000 2000 3000 800] +) +Symbol['y' 1200] +( + SymbolLine[0 3000 0 4500 800] + SymbolLine[0 4500 500 5000 800] + SymbolLine[2000 3000 2000 6000 800] + SymbolLine[1500 6500 2000 6000 800] + SymbolLine[500 6500 1500 6500 800] + SymbolLine[0 6000 500 6500 800] + SymbolLine[500 5000 1500 5000 800] + SymbolLine[1500 5000 2000 4500 800] +) +Symbol['z' 1200] +( + SymbolLine[0 3000 2000 3000 800] + SymbolLine[0 5000 2000 3000 800] + SymbolLine[0 5000 2000 5000 800] +) +Symbol['{' 1200] +( + SymbolLine[500 1500 1000 1000 800] + SymbolLine[500 1500 500 2500 800] + SymbolLine[0 3000 500 2500 800] + SymbolLine[0 3000 500 3500 800] + SymbolLine[500 3500 500 4500 800] + SymbolLine[500 4500 1000 5000 800] +) +Symbol['|' 1200] +( + SymbolLine[0 1000 0 5000 800] +) +Symbol['}' 1200] +( + SymbolLine[0 1000 500 1500 800] + SymbolLine[500 1500 500 2500 800] + SymbolLine[500 2500 1000 3000 800] + SymbolLine[500 3500 1000 3000 800] + SymbolLine[500 3500 500 4500 800] + SymbolLine[0 5000 500 4500 800] +) +Symbol['~' 1200] +( + SymbolLine[0 3500 500 3000 800] + SymbolLine[500 3000 1000 3000 800] + SymbolLine[1000 3000 1500 3500 800] + SymbolLine[1500 3500 2000 3500 800] + SymbolLine[2000 3500 2500 3000 800] +) +Via[45000 135000 30000 10000 0 10000 "" "thermal(0S)"] +Via[255000 135000 30000 10000 0 10000 "" ""] +Via[150000 135000 30000 10000 0 10000 "" "thermal(0)"] +Layer(1 "component") +( + Polygon("clearpoly") + ( + [5000 95000] [290000 95000] [290000 175000] [5000 175000] + ) +) +Layer(2 "solder") +( +) +Layer(3 "GND") +( +) +Layer(4 "power") +( +) +Layer(5 "signal1") +( +) +Layer(6 "signal2") +( +) +Layer(7 "unused") +( +) +Layer(8 "unused") +( +) +Layer(9 "silk") +( +) +Layer(10 "silk") +( + Line[255000 180000 255000 160000 2500 10000 "clearline"] + Line[255000 160000 260000 165000 2500 10000 "clearline"] + Line[45000 160000 50000 165000 2500 10000 "clearline"] + Line[45000 160000 40000 165000 2500 10000 "clearline"] + Line[45000 180000 45000 160000 2500 10000 "clearline"] + Line[255000 160000 250000 165000 2500 10000 "clearline"] + Line[150000 160000 155000 165000 2500 10000 "clearline"] + Line[150000 160000 145000 165000 2500 10000 "clearline"] + Line[150000 180000 150000 160000 2500 10000 "clearline"] + Text[220000 190000 0 200 "no connection" ""] + Text[15000 180000 0 200 "Via/Pin with " ""] + Text[5000 190000 0 200 "solid connection " ""] + Text[225000 180000 0 200 "Via/Pin with" ""] + Text[120000 180000 0 200 "Via/Pin with " ""] + Text[130000 190000 0 200 "thermal" ""] +) Index: trunk/doc-orig/thermal.pdf =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: trunk/doc-orig/thermal.pdf =================================================================== --- trunk/doc-orig/thermal.pdf (nonexistent) +++ trunk/doc-orig/thermal.pdf (revision 1037) Property changes on: trunk/doc-orig/thermal.pdf ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: trunk/doc-orig/thermal.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: trunk/doc-orig/thermal.png =================================================================== --- trunk/doc-orig/thermal.png (nonexistent) +++ trunk/doc-orig/thermal.png (revision 1037) Property changes on: trunk/doc-orig/thermal.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: trunk/doc-orig/version.texi =================================================================== --- trunk/doc-orig/version.texi (nonexistent) +++ trunk/doc-orig/version.texi (revision 1037) @@ -0,0 +1,4 @@ +@set UPDATED 17 September 2011 +@set UPDATED-MONTH September 2011 +@set EDITION 20110918 +@set VERSION 20110918 Index: trunk/doc-orig/wire_size.tab =================================================================== --- trunk/doc-orig/wire_size.tab (nonexistent) +++ trunk/doc-orig/wire_size.tab (revision 1037) @@ -0,0 +1,102 @@ +# $Id$ +# + +97 .0059 +96 .0063 +95 .0067 +94 .0071 +93 .0075 +92 .0079 +91 .0083 +90 .0087 +89 .0091 +88 .0095 +87 .0100 +86 .0105 +85 .0110 +84 .0115 +83 .0120 +82 .0125 +81 .0130 +80 .0135 +79 .0145 +78 .0160 +77 .0180 +76 .0200 +75 .0210 +74 .0225 +73 .0240 +72 .0250 +71 .0260 +70 .0280 +69 .0292 +68 .0310 +67 .0320 +66 .0330 +65 .0350 +64 .0360 +63 .0370 +62 .0380 +61 .0390 +60 .0400 +59 .0410 +58 .0420 +57 .0430 +56 .0465 +55 .0520 +54 .0550 +53 .0595 +52 .0635 +51 .0670 +50 .0700 +49 .0730 +48 .0760 +47 .0785 +46 .0810 +45 .0820 +44 .0860 +43 .0890 +42 .0935 +41 .0960 +40 .0980 +39 .0995 +38 .1015 +37 .1040 +36 .1065 +35 .1100 +34 .1110 +33 .1130 +32 .1160 +31 .1200 +30 .1285 +29 .1360 +28 .1405 +27 .1440 +26 .1470 +25 .1495 +24 .1520 +23 .1540 +22 .1570 +21 .1590 +20 .1610 +19 .1660 +18 .1695 +17 .1730 +16 .1770 +15 .1800 +14 .1820 +13 .1850 +12 .1890 +11 .1910 +10 .1935 +9 .1960 +8 .1990 +7 .2010 +6 .2040 +5 .2055 +4 .2090 +3 .2130 +2 .2210 +1 .2280 + + Index: trunk/doc-orig/wire_size.texi =================================================================== --- trunk/doc-orig/wire_size.texi (nonexistent) +++ trunk/doc-orig/wire_size.texi (revision 1037) @@ -0,0 +1,40 @@ +@c Generated file. Do not edit directly +@c $Id$ +@multitable @columnfractions 0.167 0.167 0.167 0.167 0.167 0.167 +@item Drill @tab Diameter @tab Drill @tab Diameter @tab Drill @tab Diameter +@item Size @tab (inches) @tab Size @tab (inches) @tab Size @tab (inches) + +@item 97 @tab .0059 @tab 96 @tab .0063 @tab 95 @tab .0067 +@item 94 @tab .0071 @tab 93 @tab .0075 @tab 92 @tab .0079 +@item 91 @tab .0083 @tab 90 @tab .0087 @tab 89 @tab .0091 +@item 88 @tab .0095 @tab 87 @tab .0100 @tab 86 @tab .0105 +@item 85 @tab .0110 @tab 84 @tab .0115 @tab 83 @tab .0120 +@item 82 @tab .0125 @tab 81 @tab .0130 @tab 80 @tab .0135 +@item 79 @tab .0145 @tab 78 @tab .0160 @tab 77 @tab .0180 +@item 76 @tab .0200 @tab 75 @tab .0210 @tab 74 @tab .0225 +@item 73 @tab .0240 @tab 72 @tab .0250 @tab 71 @tab .0260 +@item 70 @tab .0280 @tab 69 @tab .0292 @tab 68 @tab .0310 +@item 67 @tab .0320 @tab 66 @tab .0330 @tab 65 @tab .0350 +@item 64 @tab .0360 @tab 63 @tab .0370 @tab 62 @tab .0380 +@item 61 @tab .0390 @tab 60 @tab .0400 @tab 59 @tab .0410 +@item 58 @tab .0420 @tab 57 @tab .0430 @tab 56 @tab .0465 +@item 55 @tab .0520 @tab 54 @tab .0550 @tab 53 @tab .0595 +@item 52 @tab .0635 @tab 51 @tab .0670 @tab 50 @tab .0700 +@item 49 @tab .0730 @tab 48 @tab .0760 @tab 47 @tab .0785 +@item 46 @tab .0810 @tab 45 @tab .0820 @tab 44 @tab .0860 +@item 43 @tab .0890 @tab 42 @tab .0935 @tab 41 @tab .0960 +@item 40 @tab .0980 @tab 39 @tab .0995 @tab 38 @tab .1015 +@item 37 @tab .1040 @tab 36 @tab .1065 @tab 35 @tab .1100 +@item 34 @tab .1110 @tab 33 @tab .1130 @tab 32 @tab .1160 +@item 31 @tab .1200 @tab 30 @tab .1285 @tab 29 @tab .1360 +@item 28 @tab .1405 @tab 27 @tab .1440 @tab 26 @tab .1470 +@item 25 @tab .1495 @tab 24 @tab .1520 @tab 23 @tab .1540 +@item 22 @tab .1570 @tab 21 @tab .1590 @tab 20 @tab .1610 +@item 19 @tab .1660 @tab 18 @tab .1695 @tab 17 @tab .1730 +@item 16 @tab .1770 @tab 15 @tab .1800 @tab 14 @tab .1820 +@item 13 @tab .1850 @tab 12 @tab .1890 @tab 11 @tab .1910 +@item 10 @tab .1935 @tab 9 @tab .1960 @tab 8 @tab .1990 +@item 7 @tab .2010 @tab 6 @tab .2040 @tab 5 @tab .2055 +@item 4 @tab .2090 @tab 3 @tab .2130 @tab 2 @tab .2210 +@item 1 @tab .2280 @tab @tab @tab @tab @end multitable +