summaryrefslogtreecommitdiff
path: root/cad/pcb/files/pcb.info
blob: d206463fd1e3eb50e390cd4d6ec4ef7ebc9f120a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699
2700
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717
2718
2719
2720
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736
2737
2738
2739
2740
2741
2742
2743
2744
2745
2746
2747
2748
2749
2750
2751
2752
2753
2754
2755
2756
2757
2758
2759
2760
2761
2762
2763
2764
2765
2766
2767
2768
2769
2770
2771
2772
2773
2774
2775
2776
2777
2778
2779
2780
2781
2782
2783
2784
2785
2786
2787
2788
2789
2790
2791
2792
2793
2794
2795
2796
2797
2798
2799
2800
2801
2802
2803
2804
2805
2806
2807
2808
2809
2810
2811
2812
2813
2814
2815
2816
2817
2818
2819
2820
2821
2822
2823
2824
2825
2826
2827
2828
2829
2830
2831
2832
2833
2834
2835
2836
2837
2838
2839
2840
2841
2842
2843
2844
2845
2846
2847
2848
2849
2850
2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865
2866
2867
2868
2869
2870
2871
2872
2873
2874
2875
2876
2877
2878
2879
2880
2881
2882
2883
2884
2885
2886
2887
2888
2889
2890
2891
2892
2893
2894
2895
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908
2909
2910
2911
2912
2913
2914
2915
2916
2917
2918
2919
2920
2921
2922
2923
2924
2925
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936
2937
2938
2939
2940
2941
2942
2943
2944
2945
2946
2947
2948
2949
2950
2951
2952
2953
2954
2955
2956
2957
2958
2959
2960
2961
2962
2963
2964
2965
2966
2967
2968
2969
2970
2971
2972
2973
2974
2975
2976
2977
2978
2979
2980
2981
2982
2983
2984
2985
2986
2987
2988
2989
2990
2991
2992
2993
2994
2995
2996
2997
2998
2999
3000
3001
3002
3003
3004
3005
3006
3007
3008
3009
3010
3011
3012
3013
3014
3015
3016
3017
3018
3019
3020
3021
3022
3023
3024
3025
3026
3027
3028
3029
3030
3031
3032
3033
3034
3035
3036
3037
3038
3039
3040
3041
3042
3043
3044
3045
3046
3047
3048
3049
3050
3051
3052
3053
3054
3055
3056
3057
3058
3059
3060
3061
3062
3063
3064
3065
3066
3067
3068
3069
3070
3071
3072
3073
3074
3075
3076
3077
3078
3079
3080
3081
3082
3083
3084
3085
3086
3087
3088
3089
3090
3091
3092
3093
3094
3095
3096
3097
3098
3099
3100
3101
3102
3103
3104
3105
3106
3107
3108
3109
3110
3111
3112
3113
3114
3115
3116
3117
3118
3119
3120
3121
3122
3123
3124
3125
3126
3127
3128
3129
3130
3131
3132
3133
3134
3135
3136
3137
3138
3139
3140
3141
3142
3143
3144
3145
3146
3147
3148
3149
3150
3151
3152
3153
3154
3155
3156
3157
3158
3159
3160
3161
3162
3163
3164
3165
3166
3167
3168
3169
3170
3171
3172
3173
3174
3175
3176
3177
3178
3179
3180
3181
3182
3183
3184
3185
3186
3187
3188
3189
3190
3191
3192
3193
3194
3195
3196
3197
3198
3199
3200
3201
3202
3203
3204
3205
3206
3207
3208
3209
3210
3211
3212
3213
3214
3215
3216
3217
3218
3219
3220
3221
3222
3223
3224
3225
3226
3227
3228
3229
3230
3231
3232
3233
3234
3235
3236
3237
3238
3239
3240
3241
3242
3243
3244
3245
3246
3247
3248
3249
3250
3251
3252
3253
3254
3255
3256
3257
3258
3259
3260
3261
3262
3263
3264
3265
3266
3267
3268
3269
3270
3271
3272
3273
3274
3275
3276
3277
3278
3279
3280
3281
3282
3283
3284
3285
3286
3287
3288
3289
3290
3291
3292
3293
3294
3295
3296
3297
3298
3299
3300
3301
3302
3303
3304
3305
3306
3307
3308
3309
3310
3311
3312
3313
3314
3315
3316
3317
3318
3319
3320
3321
3322
3323
3324
3325
3326
3327
3328
3329
3330
3331
3332
3333
3334
3335
3336
3337
3338
3339
3340
3341
3342
3343
3344
3345
3346
3347
3348
3349
3350
3351
3352
3353
3354
3355
3356
3357
3358
3359
3360
3361
3362
3363
3364
3365
3366
3367
3368
3369
3370
3371
3372
3373
3374
3375
3376
3377
3378
3379
3380
3381
3382
3383
3384
3385
3386
3387
3388
3389
3390
3391
3392
3393
3394
3395
3396
3397
3398
3399
3400
3401
3402
3403
3404
3405
3406
3407
3408
3409
3410
3411
3412
3413
3414
3415
3416
3417
3418
3419
3420
3421
3422
3423
3424
3425
3426
3427
3428
3429
3430
3431
3432
3433
3434
3435
3436
3437
3438
3439
3440
3441
3442
3443
3444
3445
3446
3447
3448
3449
3450
3451
3452
3453
3454
3455
3456
3457
3458
3459
3460
3461
3462
3463
3464
3465
3466
3467
3468
3469
3470
3471
3472
3473
3474
3475
3476
3477
3478
3479
3480
3481
3482
3483
3484
3485
3486
3487
3488
3489
3490
3491
3492
3493
3494
3495
3496
3497
3498
3499
3500
3501
3502
3503
3504
3505
3506
3507
3508
3509
3510
3511
3512
3513
3514
3515
3516
3517
3518
3519
3520
3521
3522
3523
3524
3525
3526
3527
3528
3529
3530
3531
3532
3533
3534
3535
3536
3537
3538
3539
3540
3541
3542
3543
3544
3545
3546
3547
3548
3549
3550
3551
3552
3553
3554
3555
3556
3557
3558
3559
3560
3561
3562
3563
3564
3565
3566
3567
3568
3569
3570
3571
3572
3573
3574
3575
3576
3577
3578
3579
3580
3581
3582
3583
3584
3585
3586
3587
3588
3589
3590
3591
3592
3593
3594
3595
3596
3597
3598
3599
3600
3601
3602
3603
3604
3605
3606
3607
3608
3609
3610
3611
3612
3613
3614
3615
3616
3617
3618
3619
3620
3621
3622
3623
3624
3625
3626
3627
3628
3629
3630
3631
3632
3633
3634
3635
3636
3637
3638
3639
3640
3641
3642
3643
3644
3645
3646
3647
3648
3649
3650
3651
3652
3653
3654
3655
3656
3657
3658
3659
3660
3661
3662
3663
3664
3665
3666
3667
3668
3669
3670
3671
3672
3673
3674
3675
3676
3677
3678
3679
3680
3681
3682
3683
3684
3685
3686
3687
3688
3689
3690
3691
3692
3693
3694
3695
3696
3697
3698
3699
3700
3701
3702
3703
3704
3705
3706
3707
3708
3709
3710
3711
3712
3713
3714
3715
3716
3717
3718
3719
3720
3721
3722
3723
3724
3725
3726
3727
3728
3729
3730
3731
3732
3733
3734
3735
3736
3737
3738
3739
3740
3741
3742
3743
3744
3745
3746
3747
3748
3749
3750
3751
3752
3753
3754
3755
3756
3757
3758
3759
3760
3761
3762
3763
3764
3765
3766
3767
3768
3769
3770
3771
3772
3773
3774
3775
3776
3777
3778
3779
3780
3781
3782
3783
3784
3785
3786
3787
3788
3789
3790
3791
3792
3793
3794
3795
3796
3797
3798
3799
3800
3801
3802
3803
3804
3805
3806
3807
3808
3809
3810
3811
3812
3813
3814
3815
3816
3817
3818
3819
3820
3821
3822
3823
3824
3825
3826
3827
3828
3829
3830
3831
3832
3833
3834
3835
3836
3837
3838
3839
3840
3841
3842
3843
3844
3845
3846
3847
3848
3849
3850
3851
3852
3853
3854
3855
3856
3857
3858
3859
3860
3861
3862
3863
3864
3865
3866
3867
3868
3869
3870
3871
3872
3873
3874
3875
3876
3877
3878
3879
3880
3881
3882
3883
3884
3885
3886
3887
3888
3889
3890
3891
3892
3893
3894
3895
3896
3897
3898
3899
3900
3901
3902
3903
3904
3905
3906
3907
3908
3909
3910
3911
3912
3913
3914
3915
3916
3917
3918
3919
3920
3921
3922
3923
3924
3925
3926
3927
3928
3929
3930
3931
3932
3933
3934
3935
3936
3937
3938
3939
3940
3941
3942
3943
3944
3945
3946
3947
3948
3949
3950
3951
3952
3953
3954
3955
3956
3957
3958
3959
3960
3961
3962
3963
3964
3965
3966
3967
3968
3969
3970
3971
3972
3973
3974
3975
3976
3977
3978
3979
3980
3981
3982
3983
3984
3985
3986
3987
3988
3989
3990
3991
3992
3993
3994
3995
3996
3997
3998
3999
4000
4001
4002
4003
4004
4005
4006
4007
4008
4009
4010
4011
4012
4013
4014
4015
4016
4017
4018
4019
4020
4021
4022
4023
4024
4025
4026
4027
4028
4029
4030
4031
4032
4033
4034
4035
4036
4037
4038
4039
4040
4041
4042
4043
4044
4045
4046
4047
4048
4049
4050
4051
4052
4053
4054
4055
4056
4057
4058
4059
4060
4061
4062
4063
4064
4065
4066
4067
4068
4069
4070
4071
4072
4073
4074
4075
4076
4077
4078
4079
4080
4081
4082
4083
4084
4085
4086
4087
4088
4089
4090
4091
4092
4093
4094
4095
4096
4097
4098
4099
4100
4101
4102
4103
4104
4105
4106
4107
4108
4109
4110
4111
4112
4113
4114
4115
4116
4117
4118
4119
4120
4121
4122
4123
4124
4125
This is Info file pcb.info, produced by Makeinfo version 1.68 from the
input file pcb.texi.

INFO-DIR-SECTION PCB Layout Tool
START-INFO-DIR-ENTRY
* Pcb: (pcb).         PCB Layout Tool.
END-INFO-DIR-ENTRY

   This file documents how to use Pcb, the interactive printed circuit
board layout system for `X11'.

   Copyright (C) 1994,1995,1996 Thomas Nau

   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,  Prev: (dir),  Up: (dir)

Pcb
***

   This document is a manual for `Pcb', the interactive printed circuit
board layout system for `X11'.

* Menu:

* Copying::                `Pcb' is freely redistributable!
* History::                How it all began.
* Intro::                  A short description of the basic objects.
* Getting Started::        Introduction to `Pcb'.
* 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'.
* Installation::           Compiling, installing and troubleshooting.


File: pcb.info,  Node: Copying,  Next: History,  Prev: Top,  Up: Top

Copying
*******

   Copyright (C) 1994,1995,1996,1997 Thomas Nau

   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: Intro,  Prev: Copying,  Up: Top

History
*******

   `Pcb' is a handy tool for laying out printed circuit boards.  It was
first written for an Atari ST in 1990 and ported to `UNIX' and `X11' in
1994.  I never had the intention to create another professional layout
system, but to write a tool which supports people like you who do some
home-developing of hardware. For this reason it has no auto-router nor
auto-placement code.

   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.

   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 enhancments including a Gerber RS274X
driver and NC drill file generation have also been added.  harry eaton
(haceaton@aplcomm.jhuapl.edu) was responsible for most of the changes
found in this release.

   Release 1.6 provides automatic screen updates of changed regions.
This should elliminate 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 consistancy - 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.  Vias become the pins (or
mounting holes), lines and arcs on the solder layer become silkscreen,
and lines on the component layer become the pads. Action commands
entered via the colon command entry are no longer proceeded with "a ",
just type the command directly. Several bugs have also been fixed.  New
ones were probably introduced since extensive changes were made.  harry
eaton was responsible for these changes.

   Release 1.6.1 adds 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 harry is responsible for these changes too.

   Special thanks goes to:
     Bernhard Daeubler (Bernhard.Daeubler@physik.uni-ulm.de)
     Harald Daeubler (Harald.Daeubler@physik.uni-ulm.de)
     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)
     harry eaton (haceaton@aplcomm.jhuapl.edu)
     Andre M. Hedrick (hedrick@Astro.Dyer.Vanderbilt.Edu)

   who did most of the alpha and beta testing, helped to port `PCB' to
   several operating systems and platforms and corrected several typos
in the manuals. In addition to these, 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.


File: pcb.info,  Node: Intro,  Next: Getting Started,  Prev: History,  Up: Top

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 has its origin in the upper left corner of the screen.  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 display grid is one mil in distance on the board.  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::
* Arc Objects::
* Polygon Objects::
* Text Objects::           Objects to add symbols to your board.


File: pcb.info,  Node: Symbol Objects,  Next: Via Objects,  Up: Intro

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

Vias
====

   Vias are identical to the pins used by elements except that they can
be added or removed individually.  The purpose of vias is to provide
connections between different layers.  Don't use vias for adding
elements to the layout, even if that seems easier than creating a new
element.  Vias are useful for defining arbitrary drill points such as
those used for mounting a board.  You can assign a name to a via even
though you probably won't ever want to.  Vias reside at the first
logical level; therefore, each via exists on all layers. (*i.e.* blind
vias are not supported)


File: pcb.info,  Node: Element Objects,  Next: Layer Objects,  Prev: Via Objects,  Up: Intro

Elements
========

   Elements represent the components on a board.  Elements are loaded
from `ASCII' coded files in a similar manner to the layout file itself.
They are 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.  Element pins are
contained on the first logical level and so reside on all layers.  A
mark is used to position the element with respect to the cursor
cross-hair during pasting.  SMD elements use pads instead of pins.
Pads are handled similarly to lines on a layer but they must be oriented
either vertically or horizontally.  Pads can have either rounded or
square ends.  All parts of an element are treated as one unit.  It is
not possible to delete a single pin or break an element into pieces on
the layout.  You can resize separate pieces of an element, but doing so
is usually a bad idea.

   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.

   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
element libraries distributed with `Pcb' expect `m4' or an equivalent
to be the *elementCommand*.

   `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 an element in a netlist file.
The pin numbering for an element is defined by unique strings assigned
to each pin.  In addition to the "pin number" string, each pin has a
"name" which describes its function.  Previously element pin number was
established by the order of appearance of the pin definitions in the
layout or element file. Since the "number" strings for each pin are a
new feature, if they are absent then the numbering is again established
by the order of pin appearance in the file.  In other words, the first
pin appearing in the file is pin one, the next pin is pin two and so on.
Usually the names assigned to pins are simply numbers, but they don't
have to be.  It is only necessary that the "number" string for the pin
matches exactly the "number" string in the netlist file.  Be aware that
a few of the 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 (use the *Report Menu* to see what `Pcb'
thinks a pin's number is) before using the rats nest feature with a
library part. Hopefully sometime soon someone will volunteer to
cross-check all of the element libraries and make fixes available as
necessary.  `Pcb' can also check a layout to see that it meets minimum
spacing and overlap rules.

   You can make your own quick-and-dirty element definitions
graphically now.  Simply draw vias for the pins and lines and arcs on a
solder layer for the silkscreen outline. You should name each via with
the pin number.  If you want to create a SMD device, draw lines for the
pads on a component side layer (You must draw these in pin number order
since lines can't be named). They must be either horizontal or vertical
or they will not be recognized as pads. Once you are happy with the
geometry, select everything that is to become part of the element, then
choose "cut to buffer" from the menu.  Now select "convert buffer to
element" from the menu.  Viola'!  Afterwards you can make pin one
square (or pads) if you like, and give the element its various names.
Note that the element mark corresponds to the cut position when
everything was put into the buffer. If the vias are not named, then the
pin numbering will correspond to the order in which the vias were
placed.


File: pcb.info,  Node: Layer Objects,  Next: Line Objects,  Prev: Element Objects,  Up: Intro

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 (for details see `layerColor',
*Note Resources::) and identified by a name that you can change.
Layers are really just containers for line, 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 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 configureable from the `Edit layer groups' option in the
`Objects' 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.  Of course, you are not obligated
to put tracks on either of them.  SMD-elements always reside on either
the component-side or the solder-side layer group.  You can swap which
side of the board you are viewing by pressing *<Key>Tab*.  You can
decide which layer group will be the solder side and which will be the
component side.  The layers groups just have a name or number
associated with them - where they are sandwiched in the board is left
to the manufacturing processes.


File: pcb.info,  Node: Line Objects,  Next: Arc Objects,  Prev: Layer Objects,  Up: Intro

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 abondon the new starting point in favor
of another by pressing *Ctrl<Btn1>*.  The undo function (*<Key>u*) 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 *<Key>.*
(that is the *period* key). If the 45 degree restriction is turned on,
then the *<Key>/* can be used to cylce 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 next 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
type object by breaking it into pieces (insert point mode), moving an
end point (or the whole line) (*<Btn2Down><drag><Btn2Up>*), or changing
the layer it resides on (*<Key>m* 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 mode removes an entire line.  Feel free to experiment since
`Pcb' will allow you to undo 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.


File: pcb.info,  Node: Arc Objects,  Next: Polygon Objects,  Prev: Line Objects,  Up: Into

Arcs
====

   With version 1.6 it is possible to draw copper arcs.  The arcs are
restricted to be quarter circles.  This means they always bend a right
angle.  They are very similar to lines otherwise.  They are created on
the current 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. The start point for the arc is at the first *<Btn1>*
position.  In order to make the arc curve in the direction desired,
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 the direction you want,
you should decrease the grid spacing.  Alternatively you could drawn
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 start point is established by either the line or
arc tools it will be retained if you switch directly between the tools
(e.g. *<Key>F2* for Lines, *<Key>F8* for Arcs. Of course connection
searches, undo and all the other features you'd expect work with arcs
now.


File: pcb.info,  Node: Polygon Objects,  Next: Text Objects,  Prev: Arc Objects,  Up: Intro

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<Key>p* 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
(*<Key>u*).  With the rectangle tool, defining the two 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.  `Pcb' is capable of handling complex
polygons, but using a number of simpler ones improves performance of
the connection tracing code.

   A new feature in version 1.5 of `Pcb' automatically creates clearance
regions around pins and vias that pierce a polygon. This means that they
aren't electrically connected to the polygon unless you add "thermals"
to cross the clearance region.  Thermals can be added and removed by
selecting the thermal mode and clicking *<Btn1>* on the pin or via.
Remember that this only creates connections to the polygon on the
active layer.  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 earlier version of `Pcb',
the old behavior (shorts to all piercing pins and vias) is available.
A `ChangeSize' operation (*<Key>s*) toggles a polygon between the new
and old polygon/pin behavior.


File: pcb.info,  Node: Text Objects,  Prev: Polygon Objects,  Up: Intro

Text
====

   Text objects should be used to label a layout or to put additional
information on the board, but not to identify elements because elements
have their own labels.  Text is always horizontal when first created,
but the rotate mode can align it along 0, 90, 180 and 270 degree angles.
Text can be moved from any layer to the silk-screen layer with a
command in the `selection menu'.  Text that is moved to the silk-screen
layer will appear on the solder-side silk-screen if it originating on a
solder-side layer.  Otherwise moving it to the silk-screen layer will
put it on the component-side silk-screen.  To move text back to a
copper layer from the silk-screen, use the `MoveToCurrentLayer'
(*<Key>m*) command.  Text on the far side of the board will
automatically appear mirror-imaged.

   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: Getting Started,  Next: User Commands,  Prev: Intro,  Up: Top

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 them 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.  An example layout
may be found in `example/68HC11'.  An example illustrating some version
1.5 features is found in `example/LED' along with its corresponding
netlist file `example/LED.NET'.

   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 searchpaths.
If not, get `GNU m4'.  For other messages, see *Note problems::.
Another quick-start is provided by `pcbtest.sh' in the `src' directory.

* Menu:

* Application Window::     The elements of the main window.
* Log Window::             The optional logging window
* Library Window::         The circuit selection window
* Drawing and Removing::
* Moving and Copying::
* Loading and Saving::
* Printing::
* Connection Lists::       How to get a list of all or some connections.
* Selection::              Commands which handle more than one object.
* Rats Nest::		   Helps you place and route tracks against a netlist.
* Design Rule Checking::


File: pcb.info,  Node: Application Window,  Next: Log Window,  Up: Getting Started

The Application Window
======================

   The main window consists of five areas: the menu at the top, the
control panel in the upper left corner, the mode buttons located below
the control panel, the drawing area to the right of these, and the
status line at the bottom of the window.

* Menu:

* Status-line and Input-field::    What is the program configuration.
* Control Panel::                Switch layers on/off; change current one.
* Mode Selectors::               Select an operation mode.
* Drawing Area::		 Where the layout is drawn.
* Menu::


File: pcb.info,  Node: Status-line and Input-field,  Next: Control Panel,  Up: Application Window

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 the typed input.

   The status-line shows, from left to right, the side of the board
that you are viewing (*<Key>Tab* changes this), if an absolute (abs) or
relative (rel) grid is used, 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), the current grid values, and the zoom factor.
This information is followed by the line-width, via-size and drilling
hole in mil, text scaling, the active buffer number and the name of the
layout. An asterisk appearing at the left edge indicates 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.

   The input-field pops up (temporarily replacing the status-line)
whenever user input is required. Two keys are bound to the input field:
*<Key>Escape* aborts the input, *<Key>Return* finishes it.

   The present cursor position is displayed in the upper right corner
of the window.  Normally this position is an absolute coordinate, but
with version 1.5 of `Pcb' you can anchor a marker at the current cursor
location by pressing *Ctrl<Key>m* then the display will read both the
absolute cursor position as well as the difference between it and the
marker. Pressing *Ctrl<Key>m* again turns the marker off.


File: pcb.info,  Node: Control Panel,  Next: Mode Selectors,  Prev: Status-line and Input-field,  Up: Application Window

The Control Panel
-----------------

   The control panel, located at the left side of the window, 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 defualt.

   The upper control box is used to switch layers on and off. Click
*<Btn1Down>* on one or more of them. Each click toggles the setting.
The currently active layer can't be switched off.  The layout is
refreshed when the pointer reenters the drawing area. This prevents
excessive redrawing when the visibility of several layers is changed.
When the layers are grouped, clicking on these fields 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.  Use the `Edit layer groups' option in the `Objects' menu
to change the layer groupings.  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, thus to make an eight layer board, you cannot
group any layers.

   *far side* turns on and off the visibility of elements (including
SMD pads) on the opposite board side, as well as silk screening on that
side. It does not automatically 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 other
layers except pins/pads, vias, and silk.

   The lower control menu, named *active*, is used to change the active
drawing layer. *<Btn1Down>* pops up a menu to select a one.  Each entry
is labeled with the layer's name and drawn in its color.  The new
drawing layer is automatically made visible.  Try changing the active
layer's name to *ABC* by selecting `set name of layer' from the `File'
menu.  Changing the active layer also is available with *<Key>1..8*.


File: pcb.info,  Node: Mode Selectors,  Next: Drawing Area,  Prev: Control Panel,  Up: Application Window

The Mode Selectors
------------------

   The mode selector buttons reside below the control panel.  They are
used to select the operation mode of `Pcb'. A mode can be thought of as
a tool that gets used when *<Btn1>* is pressed.  Each mode causes the
cursor to take on a unique shape that identifies the tool.  The buttons
themselves are icons that illustrate their function.  The drawing modes
can also be selected from the keyboard:
         *<Key>Escape*   reset mode
         *<Key>F1*       via-mode
         *<Key>F2*       line-mode
         *<Key>F3*       pastebuffer-mode
         *<Key>F4*       rectangle-mode
         *<Key>F5*       text-mode
         *<Key>F6*       polygon-mode
         *<Key>Insert*   insert-point-mode
         *<Key>F7*       thermal-mode
         *<Key>F8*       arc-mode
   The *<Key>Space* cycles through all of the modes in the mode button
palette.

   Reset-mode is really no mode, and *<Btn1>* has no effect with this
setting.  Some of the modes are very simple, such as the via-mode.
Clicking *<Btn1>* while in this mode creates a via at the cross-hair
position.  The pastebuffer-mode is similar.  With this mode, *<Btn1>*
copies the contents of the active buffer to the layout, but only those
parts that reside on visible layers are copied.  The rotate-mode allows
you to rotate elements and text objects 90 degrees counter-clockwise
with each click.  The line-mode is explained in detail in *Note Line
Objects::.  The arc-mode is explained in detainl in *Note Arc Objects::.
Rectangle-mode, polygon-mode and thermal-mode are explained in detail in
*Note Polygon Objects::.  Remember that the thermal-mode will only
create and destroy thermals to polygons on the active layer.

   The insert-point-mode is an editing tool that allows you to add
points into lines or polygons.  With version 1.5 of `Pcb', the
insert-point-mode 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.  The delete-mode deletes the smallest object
beneath the cursor with each *<Btn1>* click.  If you use 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.


File: pcb.info,  Node: Drawing Area,  Next: Menu,  Prev: Mode Selectors,  Up: Application Window

Drawing Area
------------

   The drawing area is made from a viewport widget that also includes
two scrollbars. The cursor changes shape depending on the current
operation mode when the pointer is moved into the drawing area.  A
crosshair follows the X11 pointer with respect to the grid setting.
Move around and watch the cursor position displayed in the upper right
of the window.  Now select a new grid from the *Display* menu.  The new
value is updated in the statusline.  Now move again and watch the
difference. A different way to change the grid is *Shift<Key>g* to
decrease or *<Key>g* to increase it. 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 also may be moved with the
cursor keys or, for larger distances, by pressing the *shift* modifier
together with a cursor key.


File: pcb.info,  Node: Menu,  Prev: Drawing Area,  Up: Application Window

Menu
----

   The menus are located at the top of the drawing area. Most, but not
all, of their functions are also available from the keyboard.  Some of
the entries such as *center* require a certain cursor position.  In
this case a statusline will popup at the bottom 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 cursor
keys will cancel the operation. For details see *Note Actions::.

`About'
     There is no menu hiding behind this button, but a small
     information box will pop up.

`File'
     This menu offers a choice of loading, saving and printing data,
     saving connection information to a file or quitting the
     application.  You also may change the layout's or the active
     layer's name. Selecting *print layout* pops up a printer control
     dialog which is, hopefully, self explaining. This box contains a
     panner widget (only `X11R5' and later) which simplifies adjusting
     the offsets. With earlier releases the printout will always appear
     in the upper left corner with respect to the media margins.

     A selection of several device drivers is available from the
     printer control dialog. Presently *PostScript*, *encapsulated
     PostScript*, and *GerberX* are supported. *GerberD* support may be
     forthcoming.  It requires a rastering engine that pcb presently
     lacks.

`Display'
     The display menu supports the most needed functions related to
     screen output. The entries are used to change the grid to some
     popular values, the zoom factor, the displayed element name and
     also are used to center or refresh the output.  You also may
     switch grid-displaying on or off and select between absolute grid
     (origin at (0,0)) or relative grid (origin at the position where
     the grid has been changed). The relative grid position is now
     established at the actual pointer position, NOT necessarily the
     same as the crosshair position.  This allows you to shift the grid
     without changing the grid spacing.  I recommend that you zoom in
     as close as possible before setting a relative grid so that you're
     sure the grid lines fall where you want.  The clipping to
     45-degree lines is selected in this menu, as well as enabling
     rubberband mode (see description of *Mode*).

`Sizes'
     This menu allows you to select a group of line thickness, via
     diameter and via drill size (collectively called a "routing
     style") to be coppied to the "active" sizes.  You can also change
     the names given to these styles and adjust their values from this
     menu.  You can also edit the "active" sizes (the initial size of
     new vias, drilling holes, lines, text-objects and the current
     maximum size of the layout) from this menu.

`Objects'
     Displaying the pinout of an element and changing its names, the one
     that is currently selected by the *Display* menu, as well as
     editing a text object is offered by this menu. The latter two
     selections require an additional pointer button click at the
     object's position.  A dialog for changing the layer groupings is
     also reached from this menu.

`Selection'
     This menu covers most of the operations that work with selected
     objects.  You may either (un)select all visible objects of a
     layout or only the ones which have been found by the last
     connection scan. The mouse can also be used to change which things
     are and are not selected: toggle the selection of a single object
     by pressing *<Btn3Down>* and releasing without moving the mouse.
     Pressing *Mod1<Btn3Down>*, moving and releasing the button selects
     all visible objects inside the rectangle. Pressing the modifier
     key *Shift* too, unselects all objects in the area. You can delete
     all selected objects from this menu, and also move selected text
     objects to the silk-screen layer.  The other entries change the
     sizes of visible and selected objects.

`Buffer'
     This menu handles pastebuffer related actions. You may select one
     out of five (per viewing side) buffers to use, rotate or clear its
     contents and paste it to the layout. You can also gather objects
     in the buffer into an element definition from this menu.  Note:
     only visible objects are pasted to the layout.

`Connections'
     The entries available through the connections menu button allow
     the user to find connections from pins or vias and to manipulate
     these.  The connection lists may be saved by selecting entries
     from the *File* menu. In many cases it is desireable to use the
     ratsnest function to check connections against a netlist file
     instead of using the connections menu to generate text connection
     lists.

`Undo'
     This menu is a frontend for managing the reversing of operations
     such as remove, copy, move, name changes, etc. The number of
     operations is unlimited (depending on memory). The list is cleared
     if new layout data is loaded or by selecting the appropriate entry
     from this menu. The inverse operation, redo, is also available.

`Report'
     This menu allows you to generate a dialog that summerizes
     information about an object such as sizes and coordinates. You can
     also get a report about all of the drills that are used on the
     board.


File: pcb.info,  Node: Log Window,  Next: Library Window,  Prev: Application Window,  Up: Getting Started

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 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
window after startup for example by setting **log.iconic* to *true*. 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: Drawing and Removing,  Prev: Log Window,  Up: Getting Started

Library Window
==============

   First appearing in 1.4.1 the library window is one of the best new
features in my opinion. It simplifies loading circuits quiet a lot just
by selecting the appropriate type from the menu at the top. A circuit
is then selected by simply double-clicking on the text line. For
details on libraries check-out *Note Library File:: and *Note Library
Contents File::.


File: pcb.info,  Node: Drawing and Removing,  Next: Moving and Copying,  Prev: Library Window,  Up: Getting Started

Drawing and Removing Basic Objects
==================================

   There are several ways of creating new objects: you may draw them
yourself, you may copy an existing object or you may load an element
from a file or library. Creating new objects is normally related to a
special mode depending on the object type.  The notation of key and
button events is the same as described in the X11 Intrinsics manual.

   The operation mode may be selected by one of the mode selectors in
the bottom left corner, by one of the function keys listed earlier in
this chapter, or by pressing the space bar to cycle through the modes.
*<Btn1Down>* sends a notify request to the application which responds
by creating or changing the appropriate object or at least takes the
first step to do so. Switching to a mode causes the cursor to take on a
unique shape and also causes the cooresponding mode selector button to
be drawn with thick lines. You can use either cue to see which mode is
currently selected.

   Removing objects is possible using *<Key>BackSpace* (or *<Key>Delete*
on some machines) which deletes the object at the cursor location. If
more than one object is located at the same position, the smallest
matching type will be chosen.  If two or more of the same type are the
smallest at the position, then the newest one will be deleted.  You
also may change to *remove-mode* and click *<Btn1Down>* at the location
of the objects which are to be removed. If you "remove" the end-point
where two lines connect, it will remove the point of connection leaving
a single line that spans the far end points.

   Rotating works in a similar fashion. Change the mode and press
*<Btn1Down>* at the object's location. Remember only text, elements and
arcs can be rotated. (Anything including groups of objects may be
rotated inside a buffer using the rotate buffer menu option.)

   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.

* 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

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

   *<Btn1Down>* 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 crosshair 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 *Note
Translations::.


File: pcb.info,  Node: Lines,  Next: Arcs,  Prev: Common,  Up: Drawing and Removing

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 crosshair (but not necessarily
actually ending at the crosshair), two lines created such that the
first leaves the start point on a 90 degree vector and the second
arrives at the crosshair 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 crosshair 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
crosshair 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.


File: pcb.info,  Node: Arcs,  Next: Polygons,  Prev: Lines,  Up: Drawing and Removing

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 crosshair along the axis
whose distance from the crosshair 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.


File: pcb.info,  Node: Polygons,  Next: Text,  Prev: Arcs,  Up: Drawing and Removing

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
*<Btn1Down>* 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 crosshair 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.


File: pcb.info,  Node: Text,  Next: Vias,  Prev: Polygons,  Up: Drawing and Removing

Text
----

   Pressing *<Key>F5* or clicking one of the text selector buttons
changes to *text-mode*.  Each successive notify event (*<Btn1Down>*)
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 *<Btn1Down>* 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.


File: pcb.info,  Node: Vias,  Next: Elements,  Prev: Text,  Up: Drawing and Removing

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
*<Btn1Down>* 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 crosshair 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 convery it in
the first place.


File: pcb.info,  Node: Elements,  Next: Pastebuffer,  Prev: Vias,  Up: Drawing and Removing

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 *<Btn1Down>*
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
crosshair 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. Switching between them is
done by selecting a menu entry or by *Shift<Key>1..5*.  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 crosshair, change the
resource *crosshairColor* 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 *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 pallette*.  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 drawing 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 *Note Connection
Lists::.


File: pcb.info,  Node: Pastebuffer,  Prev: Elements,  Up: Drawing and Removing

Pastebuffer
-----------

   The linestack and element-buffer of former releases have been
replaced by 5 multi-purpose buffers that are selected by
*Shift<Key>1..5*. 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 crosshair 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 crosshair
position by pressing a mouse button. The objects are attached to the
pastebuffer relative to that crosshair 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

Moving and Copying
==================

   All objects can be moved including element-names, by *<Btn2Down>*,
draging 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 <Btn1Down>*.
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 *<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.


File: pcb.info,  Node: Loading and Saving,  Next: Printing,  Prev: Moving and Copying,  Up: Getting Started

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 depending on the resource
*backup*. The file is named `/tmp/PCB.%i.backup'. During critical
sections of the program or when data would be lost it is saved as
`/tmp/PCB.%i.save'.  *%i* is replaced by the process ID.


File: pcb.info,  Node: Printing,  Next: Connection Lists,  Prev: Loading and Saving,  Up: Getting Started

Printing
========

   `Pcb' now has support for device drivers, `PostScript',
*encapsulated PostScript*, and *Gerber X* drivers are available so far.
The *Gerber X* driver generates a NC drill file for automated drilling.
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 addtional information about the filenames.  The
control panel offers a number of options. Most of them are not avilable
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 boardsize 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 alignement 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: Connection Lists,  Next: Selection,  Prev: Printing,  Up: Getting Started

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: Selection,  Next: Rats Nest,  Prev: Connection Lists,  Up: Getting Started

Selection
=========

   Some commands mentioned earlier in this chapter also are able to
operate on all selected and visible objects.  Now go back to the layout
and toggle the selection flag of a single one by *<Btn3Down>*. Try
*<Btn3Down>*, move the pointer while holding the button down and
release it on a different location.  This selects all objects inside
the rectangle and unselects everything else.  Dragging with
*Mod1<Btn3Down>* adds everything in the box to the existing selection.
Dragging *Shift <Btn3Down>* unselects objects in the box.

   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: Selection,  Up: Getting Started

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::).  *<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 are drawn on
the screen with a stippled pattern 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 desireable 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 arround, 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.


File: pcb.info,  Node: Design Rule Checking,  Prev: Rats Nest,  Up: Getting Started

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: User Commands,  Next: Command-Line Options,  Prev: Getting Started,  Up: Top

User Commands
*************

   The entering of user-commands is initiated by the action routine
*Command()* (the `(":")' character) and finished by either *<Key>Return*
or *<Key>Escape* to confirm or to abort. These two keybindings cannot
be changed from the resource file.  The triggering event, normally a
key press, is ignored.  The input area will replace the bottom
statusline. It pops up when *Command()* is called. The arguments of the
user-commands are passed to the external commands without modification.
See also, the resource *saveInTMP*.

   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*.  The netlist received by pcb must have this simple text
     form:

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

     where "netname" is the name of the net (currently its value is
     ignored but it must be present nonetheless), NAME is the
     layout-name given to an element, and PINNUM is the (usually
     numeric) pin number of the element that is part of the net (see
     *Note Element Objects:: for details on pin numbering).  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 the NAME ends with a lower-case letter, all
     lower-case letters are stripped from end of the NAME to determine
     the matching name-on-board name.  For example:

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

     would specifiy that pin 3 of U1 be connected to pin 4 of U2, to
     pin 7 of FLOP1 and to pin A9 of Uabc3.  Note that if pin numbers
     contain alphabetic characters, they must match the case contained
     in the "number" string defining the pin number on the
     cooresponding element.  It is up to you to name the elements so
     that their layout-names agrees with the netlist.  Netlists are
     used for generating rats nest (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 accomodate 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

Command-Line Options
********************

   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::.

   The synopsis is:

   `pcb [-option ...] [-toolkit_option ...] [layout-file]'

   or

   `pcb -specialoption'

* Menu:

* Options::                `Pcb' command-line options.
* Special Options::        Version and copyright information.


File: pcb.info,  Node: Options,  Next: Special Options,  Up: Command-Line Options

Options
=======

`-alldirections/+alldirections'
     Disables or enables line clipping to 45 degree angles. Overwrites
     the resource *allDirectionLines*.

`-backup value'
     Time between two backups in seconds. Passing zero disables the
     backup feature.  Overwrites the resource *backupInterval*.

`-c value'
     Number of characters per output line. The resource
     *charactersPerLine* is overwritten.

`-fontfile filename'
     The default set of symbols (font) for a new layout is read from
     this file.  All directories as defined by the resource *fontPath*
     are scanned for the file. The scan is only performed if the
     filename doesn't contain a directory component. The *fontFile*
     resource is changed.

`-lelement command-line'
     Sets the command to be executed when an element is loaded from a
     file to the paste buffer. The command may contain %f and %p to
     pass the requested filename and the searchpath to the command. It
     must write the data to its standard output. The related resource
     is *elementCommand*.

`-lfile command-line'
     Sets the command to be executed when a new layout is loaded from a
     file.  The command may contain %f and %p to pass the requested
     filename and the searchpath to the command. It must write the data
     to its standard output. The related resource is *fileCommand*.

`-lfont command-line'
     Sets the command to be executed when a font is loaded from a file.
     The command may contain %f and %p to pass the requested filename
     and the searchpath to the command. It must write the data to its
     standard output. The related resource is *fontCommand*.

`-lg layergroups'
     This option overwrites the resource *layerGroups*. See its
     description for more information. The value is used for new
     layouts only.

`-libname filename'
     The default filename for the library. Overwrites the resource
     *libraryFilename*.

`-libpath path'
     The default search path for the the library. Overwrites the
     resource *libraryPath*.

`-llib command-line'
     Sets the command to be executed when an element is loaded from the
     library.  The command may contain %f and %p to pass the requested
     filename and the searchpath to the command. %a is replaces by the
     three arguments *template*, *value* and *package*. The command
     must write the data to its standard output. The related resource
     is *libraryCommand*.

`-llibcont command-line'
     The command lists the contents of the library.  The command may
     contain %f and %p to pass the library filename and the searchpath
     to the command. Also refer to *Note Library File:: and *Note
     Library Contents File::.  The related resource is
     *libraryContentsCommand*.

`-loggeometry geometry'
     Determines the geometry of the log window.

`-pnl value'
     Restricts the displayed length of the name of a pin in the pinout
     window to the passed value. See also, the resource
     *pinoutNameLength*.

`-pz value'
     Sets the zoom factor for the pinout window according to the
     formula: scale = 1:(2 power value). The related resource is
     *pinoutZoom*.

`-reset/+reset'
     If enabled, all connections are reset after each element is
     scanned.  This feature is only used while scanning connections to
     all elements.  See also, *resetAfterElement*.

`-ring/+ring'
     Overrides the resource *ringBellWhenFinished*. If enabled, the bell
     sounds when connection searching has finished.

`-rs string'
     Overrides the resource *routeStyle*. The string defines a colon
     separated list of route styles. The route styles consist of 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"

`-s/+s'
     Enables/Disables the saving of the previous commandline. Overrides
     the *saveLastCommand* resource.

`-save/+save'
     See the resource description of *saveInTMP* for details.

`-sfile command-line'
     Sets the command to be executed when an layout file is saved.  The
     command may contain %f which is replaced by the filename. The
     command must read its data from the standard input.  The resource
     *saveCommand* is overwritten.

`-size <width>x<height>'
     Overrides the resource *size* which determines the maximum size of
     a layout.

`-v value'
     Sets the volume of the X speaker. The value is passed to `XBell()'
     and must be in the range -100..100.


File: pcb.info,  Node: Special Options,  Prev: Options,  Up: Command-Line Options

Special Options
===============

   There are some special options available in addition to normal
command line options. Each of these must be the only option specified
on a command line.  The available special options are:

`-copyright'
     Prints out the copyright notice and terminates.

`-version'
     Prints out the version ID and terminates.

`-help'
     Prints out the usage message and terminates.


File: pcb.info,  Node: X11 Interface,  Next: File Formats,  Prev: Command-Line Options,  Up: Top

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

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.

`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'.  *%i* is replaced by the process ID.  See
     also, the command-line option *-backup*.

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

`charactersPerLine (int)'
     `Pcb' uses this value to determine the page width when creating
     lists.  N, the number of characters per line, defaults to *80*.
     See also, the command-line option *-c*.

`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*.

`crosshairColor (color)'
     This color is used to draw the crosshair cursor. The color is a
     result of a *XOR* operation with the contents of the drawing 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 *-lelement*.

`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 elementname. 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 *-lfile*.

`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 *-lfont*.

`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'.  See
     also, the command-line option *-fontfile*.

`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 drawing 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)'
     Elements localted on the opposite side of the board are drawn in
     this color.  The default is *XtDefaultForeground*.

`layerColor1..8 (color)'
`layerSelectedColor1..8 (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 layernumbers (1..8). All layers within one group are
     switched on/off together. The default setting is *1:2:3:...:8*
     which means all layers are handled separatly. Grouping layers one
     to three looks like *1,2,3:4:...:8* See also, the command-line
     option *-lg*.

`layerName1..8 (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
              /usr/X11R6/lib/X11/pcb/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.
          	/usr/X11R6/lib/X11/pcb/ListLibraryContents.sh %p %f
     is the default.

`libraryFilename (string)'
     The resource specifies the name of the library. The default value
     is *pcblib*.

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

`lineThickness (dimension)'
     The value, int the range [1..250], 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.

`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.  See also, the
     command-line option *-pnl*.

`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.  See also, the command-line option
     *-pz*.

`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.  See also, the command-line option *-reset, +reset*.

`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, +ring*.

`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 *-rs* 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 *-sfile*.

`saveInTMP (boolean)'
     Enabling this resource will save all data which would otherwise be
     lost in a temporary file `/tmp/PCB.%i.save'.  *%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, +save*.

`saveLastCommand (boolean)'
     Enables the saving of the last entered user command. The option is
     *disabled* by default.  See also, the command-line option *-s, +s*.

`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*.

`stipllePolygons (boolean)'
     Determines whether to display polygons on the screen with a
     stippled pattern.  Stippling can create some amount of
     transperency 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..250] 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

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
`X11/lib/app-defaults' 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 crosshair 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 are drawn on the screen with a stippled pattern 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)

`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.

`ChangeDrillSize(Object, value)'
`ChangeDrillSize(SelectedPins|SelectedVias, value)'
     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.  Default:
          !Mod1<Key>s:       Change2ndSize(Object, +5)
          !Mod1 Shift<Key>s: Change2ndSize(Object, -5)

`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)

`ChangeSize(Object, value)'
`ChangeSize(SelectedLines|SelectedPins|SelectedVias, value)'
`ChangeSize(SelectedPads|SelectedTexts|SelectedNames, value)'
`ChangeSize(SelectedElements, value)'
     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.  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)

`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)

`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 1_DISTANCE 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.

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

`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.

`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 crosshair
     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 crosshair. Each call to
     *Mode(Notify)* pastes this contents to the layout. *Mode(Cycle)*
     cycles through the modes available in the mode-button pallete.
     *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<Btn1Down>:          Mode(Notify)
          !Shift Ctrl<Btn1Down>:   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 Mod1<Btn2Down>: Mode(Save) Mode(RubberbandMove) Mode(Notify)

`MovePointer(delta_x, delta_y)'
     With this function it is possible to move the crosshair 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 crosshair location or
     all selected objects to the current layer. Elements are not
     moveable 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 *Note
     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 (extention)             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 postprocessor 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 thicknes, via diameter, and via drill
     size.  Defaults:
          !Ctrl<Key>1: RouteStyle(1)
          ...
          !Ctrl<Key>4: RouteStyle(4)

`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 crosshair
     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
     expression search, always case insensitive, to select the objects.
     Default:
          None<Btn3Down>:  Select(ToggleObject)
          None<Btn3Down>,None<Btn3Motion>: See resource file - this is complex

`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 numer 1..8 the current one.  Default:
          None<Key>1:        SwitchDrawingLayer(1)
          ...
          None<Key>8:        SwitchDrawingLayer(8)

`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)

`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)

`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)


File: pcb.info,  Node: Translations,  Prev: Actions,  Up: X11 Interface

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.

`None<Key>BackSpace:'

`None<key>Delete:'
`!Shift<Key>BackSpace:'
`!Shift Ctrl<Btn1Down>:'
     The object at the cursor location is removed by
     *None<Key>BackSpace* or *Shift Ctrl<Btn1Down>* 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 crosshair 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.


File: pcb.info,  Node: File Formats,  Next: Installation,  Prev: X11 Interface,  Up: Top

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::. Rat lines are added on the current layer
using the current 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:

* Basic Types::            Basic types used by all data files.
* Layout File::
* Element File::
* Font File::
* Library Contents File::
* Library File::


File: pcb.info,  Node: Basic Types,  Next: Layout File,  Up: File Formats

Basic Types
===========

   Here are the basic type definitions used in the other sections of
this chapter.

     Description     = Name
     DeltaAngle      = Number
     DrillingHole    = Number
     Flags           = Number
     FontPosition    = Number
     Grid            = Number
     GridOffsetX     = Number
     GridOffsetY     = Number
     Group           = GroupMember [,GroupMember]...
     GroupMember     = decimal | [cs]
     GroupString     = """ Group [:Group]... """
     StyleString	= """ Style [:Style]... """
     Height          = Number
     LayerNumber     = Number
     LayoutName      = Name
     Name            = quoted_string
     Number          = decimal | hex
     PinNumber	= quoted_string
     Spacing         = Number
     StartAngle      = Number
     SymbolID        = Number | charconst
     Thickness       = Number
     TextData        = quoted_string
     TextFlags       = Flags
     TextScale       = scale
     TextX           = Number
     TextY           = Number
     Value           = Name
     Width           = Number
     X               = Number
     X1              = Number
     X2              = Number
     Y               = Number
     Y1              = Number
     Y2              = Number
     charconst       = "'" <any character> "'"
     comment         = "#" {<any character up to a newline>}...
     decimal         = [0-9]+
     direction       = [0-3]
     hex             = 0x[0-9a-fA-F]+
     scale           = [1-<positive integer>]
     quoted_string   = """ <anything except \n and \r> """
     zoom            = [0-MAX]


File: pcb.info,  Node: Layout File,  Next: Element File,  Prev: Basic Types,  Up: File Formats

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.

     File            = Header Font PCBData
     Header          = PCBName [GridData] [CursorData] [PCBFlags] [Groups]
     PCBName         = "PCB(" Name Width Height ")"
     GridData        = "Grid(" Grid GridOffsetX GridOffsetY ")"
     CursorData      = "Cursor(" X Y zoom ")"
     PCBFlags        = "Flags(" Flags ")"
     Groups          = "Groups(" GroupString ")"
     Styles		= "Styles(" StyleString ")"
     Font            = {FontData}...
     FontData        = {Symbol}...
     Symbol          = "Symbol(" SymbolID Spacing ")"
                           "(" {SymbolData}... ")"
     SymbolData      = {SymbolLine}...
     SymbolLine      = "SymbolLine(" X1 Y1 X2 Y2 Thickness ")"
     PCBData         = {Via | Layer | Element}...
     
     Via             = "Via(" X Y Thickness DrillingHole Name Flags ")"
     
     Element         = "Element(" Flags Description LayoutName Value \
                           TextX TextY direction scale TextFlags")"
                           "(" {ElementData}... [Mark] ")"
     ElementData     = {ElementLine | Pad | Pin | ElementArc }...
     ElementArc      = "ElementArc(" X Y Width Height
                           StartAngle DeltaAngle Thickness ")"
     ElementLine     = "ElementLine(" X1 Y1 X2 Y2 Thickness ")"
     Mark            = "Mark(" X Y ")"
     Pad             = "Pad(" X1 Y1 X2 Y2 Thickness Name PinNumber Flags")"
     Pin             = "Pin(" X Y Thickness DrillingHole Name PinNumber Flags ")"
     
     Layer           = "Layer(" LayerNumber Name ")"
                           "(" {LayerData}... ")"
     LayerData       = {Line | Polygon | Text}...
     Line            = "Line(" X1 Y1 X2 Y2 Thickness Flags")"
     Arc		= "Arc(" X Y Width Height StartAngle DeltaAngle Thickness Flags")"
     Polygon         = "Polygon(" Flags ")" \
                           "(" {Points}... ")"
     Points          = "(" X Y ")"
     Text            = "Text(" X Y direction scale TextData Flags")"

`PCBName'
     is used to define the layout's name which is independent of its
     filename.  It is displayed in the lower left corner of the main
     window.

`GridData'
     is optional and is used to save the grid setting and offset which
     were set at the time the layout was saved.

`CursorData'
     also is an optional parameter to save the last cursor location and
     zoom value.  The real zoom factor is calculated by scale = 1:(2
     power value).

`PCBFlags'
     determine how to draw lines and which name of the elements should
     be displayed.
              bit 4:  do rubberband moves and rotates if set
              bit 5:  display description of elements if set
              bit 6:  display unique name of an element if set
              bit 7:  use absolute grid if set
              bit 8:  don't clip lines to 45 degrees

`Groups'
     Layergroups are saved by using this optional parameter. The only
     way of changing them is to use an editor and alter the appropriate
     line. The characters *c,s* idenify the component- and solder-side
     for SMD objects.

`Symbol'
     See the description of font files in this chapter.

`Via'
     Vias are always connected to all layers which also means vias are
     one logical level ahead of layers. Vias are defined by position,
     size, name and by some flags.
              bit 0:  always clear
              bit 1:  always set
              bit 2:  set if via was found during a connection search
              bit 4:  set if via is a hole (has no copper annulus)
              bit 5:  display the vias name
              bit 6:  via has been selected
              bit 12: set if via has octagonal shape
              Other bits have special meaning and should not be changed
              by the user.  See const.h for more information

`Element'
     See the description of element files in this chapter.

`Layer'
     A layer is the central object from the user's point of view. It
     holds all connections and all text objects. Up to 8 may be used
     individually.  Its number, starting with one, and its name are
     read as arguments.

    `Line'
          All lines are identified by their start and endpoints
          together with their thickness and some flags. They have to
          fit a 45 degree scheme.
                   bit 2:  set if line was found during a connection search
                   bit 4:  line is a rat-line
                   bit 6:  line has been selected

    `Polygon'
          used to fill a larger area with `copper'. The coordinates
          specify the corners. The flags are:
                   bit 2:  set if polygon was found during a connection search
                   bit 4:  polygon is a 1.5 style polygon that automatically clears pins
                   bit 6:  polygon has been selected

    `Text'
          You may use text objects to add information to your board. An
          example would be naming a connector or marking pin one of it.
          The position marks the lower left corner of the string which
          is also a fixpoint for rotations.  Text directions are
          independent to those of lines. They are counted from zero to
          three with a meaning of zero to 270 degree rotations
          counter-clockwise.  The scaling value is a positive integer
          which determines a zoom factor in percent.
                   bit 6:  the text has been selected
                   bit 7:  the text is on the solder (back) side of the board
                   bit 10: the text is on the silkscreen layer


File: pcb.info,  Node: Element File,  Next: Font File,  Prev: Layout File,  Up: File Formats

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 squential 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 subobjects of an element are
used as an attachment point for the crosshair cursor of the main window.

     File            = {Element}...
     Element         = "Element(" Flags Description LayoutName Value \
                           TextX TextY direction scale TextFlags")"
                           "(" {ElementData}... [Mark] ")"
     ElementData     = {ElementLine | Pad | Pin | ElementArc }...
     ElementArc      = "ElementArc(" X Y Width Height
                           StartAngle DeltaAngle Thickness ")"
     ElementLine     = "ElementLine(" X1 Y1 X2 Y2 Thickness ")"
     Mark            = "Mark(" X Y ")"
     Pad             = "Pad(" X1 Y1 X2 Y2 Thickness Name PinNumber Flags ")"
     Pin             = "Pin(" X Y Thickness DrillingHole Name PinNumber Flags ")"

`Element'
     Objects of type element are determined by flags,  some names, a
     canonical and a layout name as well as a value. Additional fields
     are text position, their direction counted from zero to three (n *
     90 degrees counter-clockwise) and element data.

    `Flags'
          The flag field determines the state of an element.  The bit
          values are:
                   bit 4:  the element name is hidden
                   bit 6:  element has been selected
                   bit 7:  element is located on the solder side

    `TextFlags'
    `scale'
    `direction'
          See the description of text object earlier in this chapter.

    `ElementLine'
          A line is defined by its start and end points and by its
          size, or width.

    `ElementArc'
          Defines an arc by its center, width, height, startangle, its
          length in degrees and its size. Remember the y axis on the
          screen grows downwards.

    `Mark'
          is just a hint to make positioning easier. The crosshair will
          be positioned here. Its center is passed as the two arguments.

    `Pad'
          A pad is very similar to a line except it may not be
          disconnected from its element and it has an associated name.
          Is is defined by two end point position, size, name and by
          some flags.
                   bit 2:  set if pad was found during a connection search
                   bit 5:  display the pads name
                   bit 6:  pad has been selected
                   bit 7:  pad is located on the solder side

    `Pin'
          A pin is very similar to a via except it may not be
          disconnected from its element.
                   bit 0:  always set
                   bit 1:  always clear
                   bit 2:  set if pin was found during a connection search
                   bit 3:  set if pin is only a mounting hole (no copper annulus)
                   bit 5:  display the pins name
                   bit 6:  pin has been selected
                   bit 8:  pin is drawn as a square
                   bit 12: set if pin is drawn with an octagonal shape


File: pcb.info,  Node: Font File,  Next: Library Contents File,  Prev: Element File,  Up: File Formats

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            = Font
     Font            = {FontData}...
     FontData        = {Symbol}...
     Symbol          = "Symbol(" SymbolID FontPosition ")"
                           "(" {SymbolData}... ")"
     SymbolData      = {SymbolLine}...

`Symbol'
     The two arguments are the `ASCII' code of the symbol and its
     distance to the next symbol. Undefined symbols are drawn as filled
     rectangles.  The `ASCII' code may be passed as a character
     constant or as a hexadecimal value.

    `SymbolLine'
          The symbol data itself is made up of several entries of type
          *SymbolLine*.


File: pcb.info,  Node: Library Contents File,  Next: Library File,  Prev: Font File,  Up: File Formats

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)
fetures 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 whitespaces 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,  Prev: Library Contents File,  Up: File Formats

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 prepended.

   The list file uses a syntax:
     template:package:value[:more values]

   This means that the shown example will create two element entries
with the sam 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: Installation,  Prev: File Formats,  Up: Top

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) 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

Compiling and Installing
========================

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

* Menu:

* config.h::      Editing `config.h' options.
* manuals::       Creating the man page, info file and this manual.
* make::          Creating the `Makefile', compiling and installing.


File: pcb.info,  Node: config.h,  Next: manuals,  Up: compiling

Editing config.h
----------------

   Most `X11' related options are automatically covered by `imake'
which is called from `xmkmf'. The ones special to `Pcb' have to be
edited in `config.h'.  In order of appearance:

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

`/usr/X11R6/lib/X11/pcb'
     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.

`gm4'
     the name of GNUs m4 version.

`Mod1'
     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.

`EXTRA_INCLUDES'
     Some systems do not have the Athena Widget include files in their
     normal place as configured by `X11's config files. Define this as
     follows:
              EXTRA_INCLUDES = -I/usr/openwin/share/include
     This is probably true for Suns which use `OpenWindows'.

`PATCHES'
     This symbol is passed to the compiler. Use it to define additional
     compiler flags.  Add the *-DNEED_STRDUP* flag, if your system does
     not have a strdup() library function.

`HAS_REGEX'
     Set to *-DHAS_REGEX* if your system supports regular expressions.
     This enables the actions *Select(*ByName)*.

`EXITCALL'
     The symbol *EXITCALL* should be defined according to the *call on
     exit* functions supported by your system. There are three choices:
              EXITCALL = -DHAS_ATEXIT    if atexit() is supported (SYSV)
              EXITCALL = -DHAS_ON_EXIT   if on_exit() and no atexit() is supported
              EXITCALL =                 if none of them is supported
     Please check your manpages for details.

`SYS_LIBRARIES'
     This symbol is used to pass additional libraries to the linker.
     The only additional libraries which are used are the math and lex
     library.

   If you have to make system dependent changes please include them
into a *#ifdef Architecture* ...  *#endif* construct and mail a copy to
the author (Thomas.Nau@rz.uni-ulm.de).

   Now run `xmkmf -a' which creates the `Makefiles' and runs `make
depend'. This should finish without any problems except some systems
which complain about missing include files. Don't worry about any such
warnings at this time, the package should compile without any problems.


File: pcb.info,  Node: manuals,  Next: make,  Prev: config.h,  Up: compiling

Manuals
-------

   After `xmkmf -a' has created the new `Makefile' you are able to
create the manpages, the application resource, the info file, the `TeX'
output and a reference card by executing
     	(cd doc; make)
     	(cd src; make Pcb.ad)
   You'll need `TeX', `texindex' and, if you want `PostScript', `dvips'
to build the manuals. Preformatted documentation for the default
configuration may be found in the `./doc.ps' directory.  A simple
*make* builds everything.  Generate a printed copy to make your life
easier.  `TeX-3.0' failed, `TeX-3.14' worked just fine.


File: pcb.info,  Node: make,  Prev: manuals,  Up: compiling

Compiling the Package
---------------------

   After reaching this point, it is time for `make'. It should build
everything without any errors.  If it doesn't refer to *Note problems::.

   You have to be root to install the package or at least a user with
the appropriate priveleges in some `X11' directories. Set the umask to
*022* or else some files will not be found because the directory isn't
world readable.

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

   `make install' and `make install.man' install the program, the
fonts, the application default resource file, all element and package
data as well as the manpage into the `X11' directories.  `make
install.info' does the same for the `GNU' info file.


File: pcb.info,  Node: problems,  Prev: compiling,  Up: Installation

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.

   If the shell script `create_sed_script.sh' fails with an error of
`awk' check your system for `nawk' or get the `GNU gawk'.  See the
script for details.

   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.  You will
have to add *-lfl* to the SYS_LIBRARIES identifier in `Imakefile'. See
also, *Note FreeBSD::.

   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
* FreeBSD::         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

HP Series 700 and 800
---------------------

   You have to install several `X11' tools (`imake') and 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

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::.

   If `xmkmf' is missing, try
         /usr/openwin/bin/imake -DUseInstalled -I/usr/openwin/lib/config
         make Makefile
         make includes
         make depend
   instead. I got it compiled but the linker complained about missing
symbols.  The problem may be related to the mixed `OpenWindows' -
`X11R5' environment which is installed on the test machine.  Anyway the
code was executable and I haven't got a core yet.


File: pcb.info,  Node: SGI,  Next: DEC Alpha,  Prev: Sun,  Up: problems

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 except some additionally needed compiler flags. For known
problems with `X11R4', see *Note X11::. Check `Imakefile', too.


File: pcb.info,  Node: DEC Alpha,  Next: SCO,  Prev: SGI,  Up: problems

DEC Alpha
---------

   `Pcb' compiled and runs without problems on `DEC UNIX V3.2c' if you
do the following instead of calling `xmkmf -a':
         xmkmf
         make Makefiles
         make includes
         make depend


File: pcb.info,  Node: SCO,  Next: Linux,  Prev: DEC Alpha,  Up: problems

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.


File: pcb.info,  Node: Linux,  Next: FreeBSD,  Prev: SCO,  Up: problems

Linux
-----

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


File: pcb.info,  Node: FreeBSD,  Next: X11,  Prev: Linux,  Up: problems

FreeBSD and NetBSD
------------------

   If `Pcb' complains about syntax errors even in the demo files get
rid of your `lex' and `yacc' implementation. Replace them by `GNU flex'
and `bison'. Don't forget to change the SYS_LIBRARIES in `Imakefile'
from *-ll* to *-lfl*. You also need to define:
         YACC = bison -y
         LEX = flex


File: pcb.info,  Node: X11,  Next: TeX and Manuals,  Prev: FreeBSD,  Up: problems

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.
If you want to try it anyway you have to add an additional path for
include files and define another symbol in `Imakefile',
         EXTRA_INCLUDES = -I/usr/openwin/include

   `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

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.

Index of Resources
******************

* Menu:

* /usr/X11R6/lib/X11/pcb:                config.h.
* absoluteGrid:                          Resources.
* alignmentDistance:                     Resources.
* allDirectionLines <1>:                 Resources.
* allDirectionLines:                     Options.
* backupInterval <1>:                    Resources.
* backupInterval:                        Options.
* bloat:                                 Resources.
* charactersPerLine <1>:                 Resources.
* charactersPerLine:                     Options.
* connectedColor:                        Resources.
* crosshairColor:                        Resources.
* default font:                          Options.
* DEFAULTFONT:                           config.h.
* DEFAULTLIBRARY:                        config.h.
* elementColor:                          Resources.
* elementCommand <1>:                    File Formats.
* elementCommand <2>:                    Resources.
* elementCommand:                        Options.
* elementContentsCommand:                Resources.
* elementPath:                           Resources.
* elementSelectedColor:                  Resources.
* EXITCALL:                              config.h.
* EXTRA_INCLUDES:                        config.h.
* fileCommand <1>:                       Options.
* fileCommand <2>:                       File Formats.
* fileCommand:                           Resources.
* filePath:                              Resources.
* fontCommand <1>:                       Options.
* fontCommand <2>:                       File Formats.
* fontCommand:                           Resources.
* fontFile <1>:                          Options.
* fontFile:                              Resources.
* fontPath:                              Resources.
* gm4:                                   config.h.
* grid:                                  Resources.
* gridColor:                             Resources.
* HAS_REGEX:                             config.h.
* INFOLIBDIR:                            config.h.
* invisibleObjectsColor:                 Resources.
* layerColor:                            Resources.
* layerGroups <1>:                       Options.
* layerGroups:                           Resources.
* layerName:                             Resources.
* layerSelectedColor:                    Resources.
* libraryCommand <1>:                    Options.
* libraryCommand <2>:                    File Formats.
* libraryCommand:                        Resources.
* libraryContentsCommand <1>:            File Formats.
* libraryContentsCommand:                Options.
* libraryFilename <1>:                   Options.
* libraryFilename:                       Resources.
* libraryPath <1>:                       Options.
* libraryPath:                           Resources.
* lineThickness:                         Resources.
* media:                                 Resources.
* Mod1:                                  config.h.
* offLimitColor:                         Resources.
* PATCHES:                               config.h.
* pinColor:                              Resources.
* pinoutFont0..4:                        Resources.
* pinoutNameLength <1>:                  Options.
* pinoutNameLength:                      Resources.
* pinoutOffsetX:                         Resources.
* pinoutOffsetY:                         Resources.
* pinoutTextOffsetX:                     Resources.
* pinoutTextOffsetY:                     Resources.
* pinoutZoom <1>:                        Resources.
* pinoutZoom:                            Options.
* pinSelectedColor:                      Resources.
* printCommand:                          Resources.
* raiseLogWindow:                        Resources.
* ratCommand:                            Resources.
* ratPath:                               Resources.
* resetAfterElement <1>:                 Options.
* resetAfterElement:                     Resources.
* ringBellWhenFinished <1>:              Resources.
* ringBellWhenFinished:                  Options.
* routeStyle <1>:                        Resources.
* routeStyle:                            Options.
* rubberBandMode:                        Resources.
* saveCommand <1>:                       Options.
* saveCommand <2>:                       File Formats.
* saveCommand:                           Resources.
* saveInTMP <1>:                         Options.
* saveInTMP:                             Resources.
* saveLastCommand <1>:                   Resources.
* saveLastCommand:                       Options.
* shrink:                                Resources.
* size <1>:                              Options.
* size:                                  Resources.
* stipplePolygons:                       Resources.
* SYS_LIBRARIES:                         config.h.
* textScale:                             Resources.
* useLogWindow:                          Resources.
* viaColor:                              Resources.
* viaDrillingHole:                       Resources.
* viaSelectedColor:                      Resources.
* viaThickness:                          Resources.
* volume <1>:                            Options.
* volume:                                Resources.
* warnColor:                             Resources.
* zoom:                                  Resources.

Index of Actions, Commands and Options
**************************************

* Menu:

* +alldirections:                        Options.
* +reset:                                Options.
* +ring:                                 Options.
* +s:                                    Options.
* +save:                                 Options.
* -alldirections:                        Options.
* -backup:                               Options.
* -c:                                    Options.
* -copyright:                            Special Options.
* -fontfile:                             Options.
* -help:                                 Special Options.
* -lelement:                             Options.
* -lfile:                                Options.
* -lfont:                                Options.
* -lg:                                   Options.
* -libname:                              Options.
* -libpath:                              Options.
* -llib:                                 Options.
* -llibcont:                             Options.
* -loggeometry:                          Options.
* -pnl:                                  Options.
* -pz:                                   Options.
* -reset:                                Options.
* -ring:                                 Options.
* -rs:                                   Options.
* -s:                                    Options.
* -save:                                 Options.
* -sfile:                                Options.
* -size:                                 Options.
* -v:                                    Options.
* -version:                              Special Options.
* :actionCommand():                      User Commands.
* :l:                                    User Commands.
* :le:                                   User Commands.
* :m:                                    User Commands.
* :q:                                    User Commands.
* :rn:                                   User Commands.
* :s:                                    User Commands.
* :w[q]:                                 User Commands.
* AddRats():                             Actions.
* Atomic():                              Actions.
* Bell():                                Actions.
* ChangeDrillSize():                     Actions.
* ChangeHole():                          Actions.
* ChangeName():                          Actions.
* ChangeOctagon():                       Actions.
* ChangeSize():                          Actions.
* ChangeSquare():                        Actions.
* Command():                             Actions.
* Connection():                          Actions.
* DeleteRats():                          Actions.
* Display():                             Actions.
* DRC():                                 Actions.
* EditLayerGroups():                     Actions.
* Load():                                Actions.
* MarkCrosshair():                       Actions.
* Mode():                                Actions.
* MovePointer():                         Actions.
* MoveToCurrentLayer():                  Actions.
* New():                                 Actions.
* PasteBuffer():                         Actions.
* Polygon():                             Actions.
* Print():                               Actions.
* Quit():                                Actions.
* Redo():                                Actions.
* RemoveSelected():                      Actions.
* Report():                              Actions.
* RouteStyle():                          Actions.
* Save():                                Actions.
* Select():                              Actions.
* SetValue():                            Actions.
* SwapSides():                           Actions.
* SwitchDrawingLayer():                  Actions.
* ToggleHideName():                      Actions.
* Undo():                                Actions.
* Unselect():                            Actions.

Index of Concepts
*****************

* Menu:

* /tmp <1>:                              Options.
* /tmp <2>:                              Loading and Saving.
* /tmp:                                  Resources.
* about, command button:                 Menu.
* action command:                        User Commands.
* actions:                               Actions.
* Actions, initiating:                   User Commands.
* alignment:                             Resources.
* alignment targets:                     Printing.
* Alpha:                                 DEC Alpha.
* arc:                                   Arc Objects.
* arc, an example:                       Arcs.
* architecture <1>:                      SCO.
* architecture <2>:                      Linux.
* architecture <3>:                      Sun.
* architecture <4>:                      DEC Alpha.
* architecture <5>:                      SGI.
* architecture:                          HP.
* ASCII files, format of:                File Formats.
* Atari version:                         History.
* atomic:                                Actions.
* backup <1>:                            Options.
* backup <2>:                            Loading and Saving.
* backup <3>:                            Resources.
* backup <4>:                            Options.
* backup:                                Resources.
* basic types:                           Basic Types.
* bell:                                  Actions.
* bloat:                                 Resources.
* buffer, an example:                    Pastebuffer.
* buffer, convert contents to element:   Elements.
* buffer, popup menu:                    Menu.
* buffer, selecting a:                   Actions.
* button translations:                   Actions.
* cat:                                   Resources.
* centering:                             Actions.
* change active layer:                   Control Panel.
* change drawing layer:                  Actions.
* change object name:                    Actions.
* change settings:                       Actions.
* change sizes:                          Actions.
* change square flag:                    Actions.
* change viewing side:                   Actions.
* characters per line <1>:               Resources.
* characters per line:                   Options.
* clipping lines to 45 degree <1>:       Resources.
* clipping lines to 45 degree:           Actions.
* clipping of lines:                     Options.
* closing a polygon:                     Actions.
* color printout:                        Printing.
* color, warning:                        Resources.
* colors:                                Resources.
* command-line options:                  Command-Line Options.
* compile, how to:                       compiling.
* config.h:                              config.h.
* connection, removing an:               Translations.
* connections, colors:                   Resources.
* connections, creating list of:         Connection Lists.
* connections, popup menu:               Menu.
* connections, reseting:                 Actions.
* connections, reseting after element <1>: Resources.
* connections, reseting after element:   Options.
* connections, searching for:            Actions.
* control panel:                         Control Panel.
* copy an object:                        Translations.
* copying objects:                       Actions.
* copying, an example:                   Moving and Copying.
* copyright:                             Special Options.
* creating objects:                      Common.
* cursor color:                          Resources.
* cursor movements:                      Actions.
* cursor position:                       Actions.
* cursor steps:                          Resources.
* cutting objects:                       Actions.
* DEC:                                   DEC Alpha.
* default font <1>:                      Options.
* default font:                          Resources.
* default layout size:                   Resources.
* default library:                       Resources.
* default text scaling:                  Resources.
* default translations:                  Translations.
* design rule checking <1>:              Actions.
* design rule checking:                  Design Rule Checking.
* device, selecting an output:           Printing.
* directory /tmp <1>:                    Options.
* directory /tmp <2>:                    Loading and Saving.
* directory /tmp:                        Resources.
* display:                               Resources.
* display, popup menu:                   Menu.
* displaying element names <1>:          Actions.
* displaying element names:              Menu.
* displaying pinout:                     Actions.
* displaying status information:         Status-line and Input-field.
* DOS filenames:                         Printing.
* drawing objects:                       Drawing and Removing.
* drc <1>:                               Resources.
* drc <2>:                               Actions.
* drc:                                   Design Rule Checking.
* drill:                                 Actions.
* drilling hole, changing of objects:    Actions.
* drilling hole, setting of initial size: Actions.
* DVI format of manual:                  manuals.
* element name, hiding:                  Actions.
* element name, removing from silk-screen: Actions.
* element, an example:                   Elements.
* element, an overview:                  Element Objects.
* element, color:                        Resources.
* element, command <1>:                  Resources.
* element, command:                      Options.
* element, creating a new package:       Elements.
* element, display names of <1>:         Menu.
* element, display names of:             Actions.
* element, fileformat:                   Element File.
* element, files <1>:                    Options.
* element, files:                        Resources.
* element, loading to buffer:            User Commands.
* element, move name of:                 Translations.
* entering user commands:                User Commands.
* erasing objects:                       Drawing and Removing.
* example files:                         Elements.
* example of buffer handling:            Pastebuffer.
* example of connection lists:           Connection Lists.
* example of copying:                    Moving and Copying.
* example of creating an element:        Elements.
* example of element handling:           Elements.
* example of line handling:              Lines.
* example of loading:                    Loading and Saving.
* example of loading an element file:    Elements.
* example of moving:                     Moving and Copying.
* example of pastebuffer handling:       Pastebuffer.
* example of pin handling:               Elements.
* example of polygon handling:           Polygons.
* example of printing:                   Printing.
* example of rectangle handling:         Polygons.
* example of saving:                     Loading and Saving.
* example of text handling:              Text.
* example of via handling:               Vias.
* exit <1>:                              Actions.
* exit:                                  User Commands.
* file format, element data:             Element File.
* file format, font data:                Font File.
* file format, layout data:              Layout File.
* file format, libraries:                Library File.
* file format, library contents:         Library Contents File.
* file formats:                          File Formats.
* file formats, basic types:             Basic Types.
* file load command <1>:                 Resources.
* file load command:                     Options.
* file save command <1>:                 Resources.
* file save command:                     Options.
* file, popup menu:                      Menu.
* font command <1>:                      Options.
* font command:                          Resources.
* font file, format of:                  Font File.
* font files <1>:                        Resources.
* font files <2>:                        Options.
* font files:                            Resources.
* font, an overview:                     Symbol Objects.
* font, used for pin names:              Resources.
* format of element files:               Element File.
* format of font files:                  Font File.
* format of layout files:                Layout File.
* format of libraries:                   Library File.
* format of library contents:            Library Contents File.
* FreeBSD:                               FreeBSD.
* grid <1>:                              Resources.
* grid:                                  Drawing Area.
* grid color:                            Resources.
* grid, absolute and relative <1>:       Actions.
* grid, absolute and relative:           Menu.
* grid, display <1>:                     Actions.
* grid, display:                         Menu.
* grid, setting of:                      Actions.
* groups <1>:                            Resources.
* groups:                                Options.
* groups, editing of:                    Actions.
* Hewlett Packard:                       HP.
* hide element name:                     Actions.
* how to start:                          Getting Started.
* HP:                                    HP.
* info file:                             manuals.
* information about objects:             Actions.
* input-field, position of:              Status-line and Input-field.
* inputfield, saving entered command-line <1>: Options.
* inputfield, saving entered command-line: Resources.
* inputfield, start user input:          Actions.
* install, how to:                       compiling.
* key translations:                      Actions.
* keyboard bell <1>:                     Resources.
* keyboard bell:                         Options.
* layer, change active:                  Actions.
* layer, name of:                        Resources.
* layers, an overview:                   Layer Objects.
* layers, changing active one:           Control Panel.
* layers, colors:                        Resources.
* layers, editing of groups:             Actions.
* layers, groups <1>:                    Resources.
* layers, groups:                        Options.
* layers, switching on/off:              Control Panel.
* layout files <1>:                      Resources.
* layout files <2>:                      Options.
* layout files <3>:                      Resources.
* layout files:                          Options.
* layout files, format of:               Layout File.
* layout files, saving of:               User Commands.
* layout objects, an overview:           Intro.
* layout size:                           Options.
* layout, default size of:               Resources.
* layout, loading a:                     User Commands.
* layout, loading to buffer:             User Commands.
* layout, merging a:                     User Commands.
* layout, printing a:                    Actions.
* layout, start a new:                   Actions.
* layout-name <1>:                       Element Objects.
* layout-name:                           User Commands.
* length of a pin name <1>:              Resources.
* length of a pin name:                  Options.
* length of outputline:                  Options.
* library command <1>:                   Options.
* library command:                       Resources.
* library contents command <1>:          Options.
* library contents command:              Resources.
* library contents file, format of:      Library Contents File.
* library file, format of:               Library File.
* library name <1>:                      Resources.
* library name:                          Options.
* library search path:                   Options.
* library searchpath:                    Resources.
* library window:                        Library Window.
* line clipping:                         Options.
* linelength:                            Resources.
* lines, an example:                     Lines.
* lines, an overview:                    Line Objects.
* lines, clipping to 45 degree <1>:      Resources.
* lines, clipping to 45 degree:          Actions.
* lines, setting of initial size:        Actions.
* lines, size:                           Resources.
* Linux:                                 Linux.
* list of connections:                   Resources.
* listing libraries:                     Options.
* listing library contents:              Resources.
* loading a layout to buffer:            User Commands.
* loading elements <1>:                  Resources.
* loading elements:                      Options.
* loading elements to buffer:            User Commands.
* loading files:                         Actions.
* loading fonts <1>:                     Resources.
* loading fonts:                         Options.
* loading layouts <1>:                   User Commands.
* loading layouts <2>:                   Options.
* loading layouts:                       Resources.
* loading symbols <1>:                   Resources.
* loading symbols:                       Options.
* loading, an example:                   Loading and Saving.
* log window <1>:                        Options.
* log window <2>:                        Resources.
* log window:                            Log Window.
* m4:                                    Resources.
* m4, preprocessing example files:       Elements.
* make:                                  make.
* Makefile:                              config.h.
* manuals:                               manuals.
* mark:                                  Actions.
* media:                                 Resources.
* media margin:                          Resources.
* media, size of:                        Printing.
* menus:                                 Menu.
* merging layouts:                       User Commands.
* messages <1>:                          Resources.
* messages <2>:                          Options.
* messages:                              Log Window.
* mirroring printout:                    Printing.
* mode selection:                        Mode Selectors.
* mode, selecting of:                    Actions.
* mounting holes:                        Actions.
* move:                                  Resources.
* move an object:                        Translations.
* moving objects to current layer:       Actions.
* moving, an example:                    Moving and Copying.
* name of an element:                    Actions.
* name, change an objects:               Actions.
* namelength of pins <1>:                Options.
* namelength of pins:                    Resources.
* NetBSD:                                FreeBSD.
* netlist <1>:                           Actions.
* netlist <2>:                           Resources.
* netlist <3>:                           User Commands.
* netlist <4>:                           Rats Nest.
* netlist:                               Actions.
* object, change name of:                Actions.
* object, changing the size of an:       Common.
* object, copy an:                       Translations.
* object, creating an:                   Common.
* object, drawing and removing:          Drawing and Removing.
* object, move an:                       Translations.
* object, removing an <1>:               Translations.
* object, removing an:                   Common.
* object, selecting an:                  Menu.
* objects, moving to current layer:      Actions.
* objects, popup menu:                   Menu.
* octagonal pins and vias:               Actions.
* off limit color:                       Resources.
* offset of pinnames:                    Resources.
* offset of pinout:                      Resources.
* offset of printout:                    Printing.
* OpenWindows:                           Sun.
* operation modes, selecting of:         Actions.
* outline printout:                      Printing.
* output device:                         Printing.
* outputline, length of:                 Options.
* overlap, minimum:                      Design Rule Checking.
* pastebuffer, an example:               Pastebuffer.
* pastebuffer, convert contents to element: Elements.
* pastebuffer, popup menu:               Menu.
* pastebuffer, selecting a:              Actions.
* path for element files:                Resources.
* path for font files:                   Resources.
* path for layout files:                 Resources.
* path for libraries:                    Resources.
* PC UNIX <1>:                           SCO.
* PC UNIX <2>:                           Linux.
* PC UNIX:                               FreeBSD.
* pin color:                             Resources.
* pin, name of <1>:                      Options.
* pin, name of:                          Resources.
* pinout of elements:                    Menu.
* pinout, display of:                    Actions.
* pinout, font to display pin names:     Resources.
* pinout, zoomfactor of display <1>:     Resources.
* pinout, zoomfactor of display:         Options.
* pins, an example:                      Elements.
* pins, changing shape of:               Actions.
* pointer, moving of:                    Actions.
* polygon:                               Resources.
* polygon point, go back to previous:    Actions.
* polygon, an example:                   Polygons.
* polygon, an overview:                  Polygon Objects.
* polygon, closing a:                    Actions.
* popping up menus:                      Menu.
* postprocessing layout data <1>:        Resources.
* postprocessing layout data:            Options.
* preprocessing element data <1>:        Options.
* preprocessing element data:            Resources.
* preprocessing font data <1>:           Options.
* preprocessing font data:               Resources.
* preprocessing layout data <1>:         Options.
* preprocessing layout data:             Resources.
* preventing loss of data <1>:           Loading and Saving.
* preventing loss of data <2>:           Options.
* preventing loss of data:               Resources.
* print command:                         Printing.
* print media <1>:                       Printing.
* print media:                           Resources.
* print offset:                          Printing.
* printing:                              Resources.
* printing a layout:                     Actions.
* printing, an example:                  Printing.
* problems:                              problems.
* quit <1>:                              Actions.
* quit:                                  User Commands.
* rat-line <1>:                          Actions.
* rat-line:                              Rats Nest.
* rats nest <1>:                         User Commands.
* rats nest <2>:                         Actions.
* rats nest <3>:                         Resources.
* rats nest <4>:                         Actions.
* rats nest:                             Rats Nest.
* recover:                               Actions.
* rectangle, an example:                 Polygons.
* redo:                                  Actions.
* redrawing layout:                      Actions.
* refreshing layout:                     Actions.
* release, current:                      Special Options.
* removing connections:                  Translations.
* removing objects <1>:                  Translations.
* removing objects <2>:                  Drawing and Removing.
* removing objects:                      Common.
* removing selected objects:             Actions.
* report:                                Actions.
* report, popup menu:                    Menu.
* reseting found connections <1>:        Actions.
* reseting found connections <2>:        Options.
* reseting found connections:            Resources.
* resources:                             Resources.
* rotate:                                Resources.
* rotating a buffer:                     Actions.
* rotating printout:                     Printing.
* routing style <1>:                     Options.
* routing style <2>:                     Resources.
* routing style:                         Actions.
* rubberband <1>:                        Actions.
* rubberband:                            Resources.
* saving connections:                    Actions.
* saving files:                          Actions.
* saving found connections:              Actions.
* saving last entered user command <1>:  Resources.
* saving last entered user command:      Options.
* saving layouts <1>:                    Loading and Saving.
* saving layouts <2>:                    Options.
* saving layouts <3>:                    Resources.
* saving layouts <4>:                    Options.
* saving layouts:                        User Commands.
* saving, an example:                    Loading and Saving.
* scaling a printout:                    Printing.
* scanning connections:                  Actions.
* SCO:                                   SCO.
* scrolling:                             Translations.
* searching connections:                 Actions.
* searchpath for element files:          Resources.
* searchpath for font files:             Resources.
* searchpath for layout files:           Resources.
* searchpath for libraries:              Resources.
* selected object, removing an:          Actions.
* selected objects, changing size:       Menu.
* selected objects, removing:            Menu.
* selecting a buffer:                    Actions.
* selecting a new mode:                  Mode Selectors.
* selecting objects <1>:                 Actions.
* selecting objects:                     Menu.
* selection:                             Actions.
* selection, an example:                 Selection.
* selection, popup menu:                 Menu.
* SGI:                                   SGI.
* shrink:                                Resources.
* signal:                                Actions.
* Silicon Graphics:                      SGI.
* size of a layout:                      Options.
* size of lines:                         Resources.
* size of lines and vias:                Actions.
* size of vias:                          Resources.
* sizes, changing of objects:            Actions.
* sizes, popup menu:                     Menu.
* Solaris:                               Sun.
* spacing, minimum:                      Design Rule Checking.
* speaker volume <1>:                    Resources.
* speaker volume:                        Options.
* square flag, changing of objects:      Actions.
* start user input:                      Actions.
* starting a new layout:                 Actions.
* starting Pcb:                          Command-Line Options.
* status information:                    Status-line and Input-field.
* strings, an example:                   Text.
* strings, an overview:                  Text Objects.
* Sun:                                   Sun.
* symbols <1>:                           Options.
* symbols:                               Resources.
* symbols, an overview:                  Symbol Objects.
* temporary files <1>:                   Resources.
* temporary files <2>:                   Options.
* temporary files:                       Loading and Saving.
* TeX, problems:                         TeX and Manuals.
* texinfo file:                          manuals.
* text, an example:                      Text.
* text, an overview:                     Text Objects.
* text, default scaling:                 Resources.
* text, editing:                         Menu.
* thickness of lines:                    Resources.
* thickness of objects:                  Common.
* thickness of vias:                     Resources.
* thickness, changing of objects:        Actions.
* translations <1>:                      Actions.
* translations:                          Translations.
* troubleshooting:                       problems.
* undo:                                  Actions.
* undo, multi-action resources:          Actions.
* undo, popup menu:                      Menu.
* unix command <1>:                      Options.
* unix command <2>:                      Resources.
* unix command <3>:                      Options.
* unix command <4>:                      Resources.
* unix command <5>:                      Options.
* unix command <6>:                      Resources.
* unix command <7>:                      Options.
* unix command:                          Resources.
* unselect objects:                      Actions.
* user commands:                         User Commands.
* user input:                            Translations.
* version, current:                      Special Options.
* vias, an example:                      Vias.
* vias, an overview:                     Via Objects.
* vias, changing shape of:               Actions.
* vias, color:                           Resources.
* vias, converting to mounting hole:     Actions.
* vias, setting of initial size:         Actions.
* vias, size:                            Resources.
* viewing side, changing of:             Actions.
* volume of speaker <1>:                 Options.
* volume of speaker:                     Resources.
* X11:                                   X11 Interface.
* X11 default translations:              Translations.
* X11 resources:                         Resources.
* X11 translations:                      Actions.
* X11, problems:                         X11.
* xmkmf:                                 config.h.
* zoom of drawing window:                Resources.
* zoom of pinout window <1>:             Options.
* zoom of pinout window:                 Resources.
* zoom, setting:                         Menu.
* zoom, setting of:                      Actions.



Tag Table:
Node: Top723
Node: Copying1468
Node: History2088
Node: Intro6464
Node: Symbol Objects7604
Node: Via Objects8179
Node: Element Objects8865
Node: Layer Objects13372
Node: Line Objects15314
Node: Arc Objects17330
Node: Polygon Objects18696
Node: Text Objects20812
Node: Getting Started21890
Node: Application Window23822
Node: Status-line and Input-field24472
Node: Control Panel26349
Node: Mode Selectors28678
Node: Drawing Area31137
Node: Menu32120
Node: Log Window37656
Node: Library Window38448
Node: Drawing and Removing38955
Node: Common42106
Node: Lines43875
Node: Arcs45425
Node: Polygons46597
Node: Text48478
Node: Vias49463
Node: Elements50833
Node: Pastebuffer56184
Node: Moving and Copying57883
Node: Loading and Saving58911
Node: Printing59987
Node: Connection Lists64148
Node: Selection65952
Node: Rats Nest66796
Node: Design Rule Checking71884
Node: User Commands74218
Node: Command-Line Options78975
Node: Options79523
Node: Special Options84130
Node: X11 Interface84625
Node: Resources85092
Node: Actions98785
Node: Translations122057
Node: File Formats123597
Node: Basic Types125267
Node: Layout File126939
Node: Element File132784
Node: Font File136592
Node: Library Contents File137593
Node: Library File138638
Node: Installation141066
Node: compiling141493
Node: config.h141887
Node: manuals144357
Node: make145012
Node: problems145895
Node: HP147499
Node: Sun148170
Node: SGI148947
Node: DEC Alpha149323
Node: SCO149622
Node: Linux150094
Node: FreeBSD150284
Node: X11150701
Node: TeX and Manuals151681

End Tag Table