IPC-D-356 netlist exporter.
[geda-pcb/pcjc2.git] / tools / PCB2HPGL
blob9b18f88d1913a5b1771fcb5d1d83e1ef4c378dff
1 #!/usr/bin/perl
3 #
4 # Der der Autor ist kein geringerer wie <smilebef@web.de> der Smilie
5 # Also Fragen zu Hpgl oder Plotter,
6 # möglicherweise kann ich ja helfen
8 # Also ganz einfach die Layer.Dateien mit diesen Program erzeugen
9 # mit "Program pcb-Datei"
10 # das ganze in einem Verzeichnis wo ihr auch schreibrechte habt
11 # und dann ganz einfach den gewünchten Layer auf den Plotter kopieren
12 # zBsp. so "cat Layer.1.jenachdem.hpgl > /dev/lp0
13 # den Stift müßt ihr dem Plotter in die Hand geben
14 # und den Stiftrevolver entnehmen daß es eine Kollision giebt.
16 if( $ARGV[0] )
19 else{print "use ".$0." [pcb-file] to convert to hpgl\n";
20 exit;};
22 sub abschnitt
25 close(DATEI);
26 if(/Layer.(\d)\s.(\w+)../)
28 $da="Layer.$1.$2.hpgl";
30 open(DATEI , ">$da");
35 sub via
39 open(DATE,">>Layer.Via.hpgl");
40 if(/Via.(\S+)\s(\S+)\s(\S+)\s(\S+)/)
42 print(DATE "PA".($1).",".($2).";CI".($4).";");
44 close(DATE);
46 sub pin
49 open(DATE,">>Layer.Pin.hpgl");
50 if(/\tPin.(\S+)\s(\S+)\s(\S+)\s(\S+)/)
52 print(DATE "PA".($1).",".($2).";CI".($4).";");
54 close(DATE);
60 sub text
63 open(DATE,">>Layer.Text.hpgl");
64 if(/\tText.(\S+)\s(\S+)\s(\S+)\s(\S+)\s"(\S+)"/)
66 if($3==0){$di=";DI0,1;";};
67 if($3==1){$di=";DI1,0;";};
68 print(DATE "PA".$1.",".$2.$di."SI".($4/450).",".($4/675).";LB".$5."\e;");
70 close(DATE);
76 sub linie
79 if(/\tLine.(\S+)\s(\S+)\s(\S+)\s(\S+)/)
81 print (DATEI "PU".($1).",".($2).";PD".($3).",".($4).";PU;");
87 sub arc
90 if(/\tArc.(\S+)\s(\S+)\s(\S+)\s(\S+)\s(\S+)\s(\S+)\s(\S+)/)
92 if($6==90){$sin=1;$cos=0;}
93 if($6==-90){$sin=-1;$cos=0;}
94 if($6==0){$sin=0;$cos=1;}
95 if($6==180){$sin=0;$cos=-1;}
96 if($6==-180){$sin=0;$cos=-1;}
97 if($6==270){$sin=-1;$cos=0;}
98 if($6==-270){$sin=1;$cos=0;}
99 print (DATEI "PA".($1-($3*$cos)).",".($2+($3*$sin)).";PD;AA".($1).",".($2).",".($7*(-1)).";PU;");
105 sub polygon
108 if(/\t\t.(\S+)\s(\S+).\s.(\S+)\s(\S+).\s.(\S+)\s(\S+).\s.(\S+)\s(\S)./)
110 print (DATEI "PA".$1.",".$2.";RA".$5.",".$6.";");
114 # ist noch nicht eingebunden.
115 #sub polygon
118 #s/\t\t./PU/;
119 #s/\s/,/;
120 #while(/\)\s\(/)
121 #{s/\)\s\(/\;PD/;}
122 #while(/\S\s\S/)
123 #{s/\s/,/;}
124 #s/\)/\;PU\;/;
125 #print (DATEI $_);
129 open(DATE,">Layer.Via.hpgl");
130 close(DATE);
131 open(DATE,">Layer.Text.hpgl");
132 print(DATE "DT\e;");
133 close(DATE);
134 open(DATE,">Layer.Pin.hpgl");
135 close(DATE);
136 while(<>)
138 if(/\tPin/){&pin}
139 if(/Layer/){&abschnitt;}
140 if(/Via/){&via;}
141 if(/\tArc/){&arc;}
142 if(/\tLine/){ &linie;}
143 if(/\t\t/){&polygon;}
144 if(/\tText\(/){&text;}
146 close(DATEI);