FreeCalypso > hg > ueda-linux
annotate pads2gpcb/main.c @ 75:959df5ddf7a2
pads2gpcb: command line dimension input implemented
| author | Mychaela Falconia <falcon@ivan.Harhan.ORG> |
|---|---|
| date | Mon, 01 Feb 2016 02:09:25 +0000 |
| parents | 58f11f06d831 |
| children | f640c8f005c5 |
| rev | line source |
|---|---|
|
38
aa0539cc3d41
pads2gpcb project started, skeleton compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
1 #include <stdio.h> |
|
aa0539cc3d41
pads2gpcb project started, skeleton compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
2 #include <stdlib.h> |
|
47
8fa304e2b7e1
pads2gpcb: parsing of -w options implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
42
diff
changeset
|
3 #include <unistd.h> |
|
38
aa0539cc3d41
pads2gpcb project started, skeleton compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
4 #include <ctype.h> |
|
aa0539cc3d41
pads2gpcb project started, skeleton compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
5 #include <string.h> |
|
aa0539cc3d41
pads2gpcb project started, skeleton compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
6 #include <strings.h> |
|
aa0539cc3d41
pads2gpcb project started, skeleton compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
7 #include "globals.h" |
|
aa0539cc3d41
pads2gpcb project started, skeleton compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
8 |
|
39
242f73e61ef0
pads2gpcb: implemented parsing of the header line with units spec
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
38
diff
changeset
|
9 static |
|
242f73e61ef0
pads2gpcb: implemented parsing of the header line with units spec
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
38
diff
changeset
|
10 parse_header_line() |
|
242f73e61ef0
pads2gpcb: implemented parsing of the header line with units spec
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
38
diff
changeset
|
11 { |
|
242f73e61ef0
pads2gpcb: implemented parsing of the header line with units spec
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
38
diff
changeset
|
12 char *cp; |
|
242f73e61ef0
pads2gpcb: implemented parsing of the header line with units spec
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
38
diff
changeset
|
13 |
|
242f73e61ef0
pads2gpcb: implemented parsing of the header line with units spec
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
38
diff
changeset
|
14 if (strncmp(input_line_buf, "!PADS-POWERPCB-", 15)) |
|
242f73e61ef0
pads2gpcb: implemented parsing of the header line with units spec
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
38
diff
changeset
|
15 return(-1); |
|
242f73e61ef0
pads2gpcb: implemented parsing of the header line with units spec
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
38
diff
changeset
|
16 cp = input_line_buf + 15; |
|
242f73e61ef0
pads2gpcb: implemented parsing of the header line with units spec
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
38
diff
changeset
|
17 while (isalnum(*cp) || *cp == '.') |
|
242f73e61ef0
pads2gpcb: implemented parsing of the header line with units spec
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
38
diff
changeset
|
18 cp++; |
|
242f73e61ef0
pads2gpcb: implemented parsing of the header line with units spec
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
38
diff
changeset
|
19 if (*cp++ != '-') |
|
242f73e61ef0
pads2gpcb: implemented parsing of the header line with units spec
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
38
diff
changeset
|
20 return(-1); |
|
242f73e61ef0
pads2gpcb: implemented parsing of the header line with units spec
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
38
diff
changeset
|
21 if (!strncmp(cp, "BASIC", 5)) |
|
242f73e61ef0
pads2gpcb: implemented parsing of the header line with units spec
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
38
diff
changeset
|
22 input_units_global = 'B'; |
|
242f73e61ef0
pads2gpcb: implemented parsing of the header line with units spec
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
38
diff
changeset
|
23 else if (!strncmp(cp, "MILS", 4)) |
|
242f73e61ef0
pads2gpcb: implemented parsing of the header line with units spec
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
38
diff
changeset
|
24 input_units_global = 'I'; |
|
242f73e61ef0
pads2gpcb: implemented parsing of the header line with units spec
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
38
diff
changeset
|
25 else if (!strncmp(cp, "METRIC", 6)) |
|
242f73e61ef0
pads2gpcb: implemented parsing of the header line with units spec
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
38
diff
changeset
|
26 input_units_global = 'M'; |
|
242f73e61ef0
pads2gpcb: implemented parsing of the header line with units spec
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
38
diff
changeset
|
27 else |
|
242f73e61ef0
pads2gpcb: implemented parsing of the header line with units spec
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
38
diff
changeset
|
28 return(-1); |
|
242f73e61ef0
pads2gpcb: implemented parsing of the header line with units spec
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
38
diff
changeset
|
29 return(0); |
|
242f73e61ef0
pads2gpcb: implemented parsing of the header line with units spec
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
38
diff
changeset
|
30 } |
|
242f73e61ef0
pads2gpcb: implemented parsing of the header line with units spec
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
38
diff
changeset
|
31 |
|
38
aa0539cc3d41
pads2gpcb project started, skeleton compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
32 main(argc, argv) |
|
aa0539cc3d41
pads2gpcb project started, skeleton compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
33 char **argv; |
|
aa0539cc3d41
pads2gpcb project started, skeleton compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
34 { |
|
47
8fa304e2b7e1
pads2gpcb: parsing of -w options implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
42
diff
changeset
|
35 int c; |
|
73
bdfd0b802bb0
pads2gpcb/main.c: preparations for main output of named and placed elements
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
72
diff
changeset
|
36 char *main_output; |
|
47
8fa304e2b7e1
pads2gpcb: parsing of -w options implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
42
diff
changeset
|
37 extern int optind; |
|
62
9d7e2937883d
pads2gpcb: select specific drawing levels for silk with -s
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
51
diff
changeset
|
38 extern char *optarg; |
|
47
8fa304e2b7e1
pads2gpcb: parsing of -w options implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
42
diff
changeset
|
39 |
|
72
fab9fc646044
pads2gpcb: single -f option to write loose footprint files
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
65
diff
changeset
|
40 while ((c = getopt(argc, argv, "fs:")) != EOF) |
|
47
8fa304e2b7e1
pads2gpcb: parsing of -w options implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
42
diff
changeset
|
41 switch (c) { |
|
72
fab9fc646044
pads2gpcb: single -f option to write loose footprint files
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
65
diff
changeset
|
42 case 'f': |
|
fab9fc646044
pads2gpcb: single -f option to write loose footprint files
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
65
diff
changeset
|
43 write_footprint_files = 1; |
|
fab9fc646044
pads2gpcb: single -f option to write loose footprint files
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
65
diff
changeset
|
44 continue; |
|
51
f2bcf69fce63
pads2gpcb: -s option to enable footprint silk processing
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
47
diff
changeset
|
45 case 's': |
|
f2bcf69fce63
pads2gpcb: -s option to enable footprint silk processing
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
47
diff
changeset
|
46 do_footprint_silk = 1; |
|
62
9d7e2937883d
pads2gpcb: select specific drawing levels for silk with -s
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
51
diff
changeset
|
47 select_drawlevel_for_silk(atoi(optarg)); |
|
51
f2bcf69fce63
pads2gpcb: -s option to enable footprint silk processing
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
47
diff
changeset
|
48 continue; |
|
47
8fa304e2b7e1
pads2gpcb: parsing of -w options implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
42
diff
changeset
|
49 default: |
|
8fa304e2b7e1
pads2gpcb: parsing of -w options implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
42
diff
changeset
|
50 usage: |
|
73
bdfd0b802bb0
pads2gpcb/main.c: preparations for main output of named and placed elements
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
72
diff
changeset
|
51 fprintf(stderr, |
|
bdfd0b802bb0
pads2gpcb/main.c: preparations for main output of named and placed elements
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
72
diff
changeset
|
52 "usage: %s [options] pads-file.asc [output.pcb]\n", |
|
47
8fa304e2b7e1
pads2gpcb: parsing of -w options implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
42
diff
changeset
|
53 argv[0]); |
|
8fa304e2b7e1
pads2gpcb: parsing of -w options implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
42
diff
changeset
|
54 exit(1); |
|
8fa304e2b7e1
pads2gpcb: parsing of -w options implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
42
diff
changeset
|
55 } |
|
73
bdfd0b802bb0
pads2gpcb/main.c: preparations for main output of named and placed elements
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
72
diff
changeset
|
56 if (argc < optind + 1 || argc > optind + 2) |
|
47
8fa304e2b7e1
pads2gpcb: parsing of -w options implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
42
diff
changeset
|
57 goto usage; |
|
8fa304e2b7e1
pads2gpcb: parsing of -w options implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
42
diff
changeset
|
58 input_filename = argv[optind]; |
|
73
bdfd0b802bb0
pads2gpcb/main.c: preparations for main output of named and placed elements
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
72
diff
changeset
|
59 main_output = argv[optind+1]; |
|
38
aa0539cc3d41
pads2gpcb project started, skeleton compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
60 open_input_file(); |
|
39
242f73e61ef0
pads2gpcb: implemented parsing of the header line with units spec
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
38
diff
changeset
|
61 |
|
242f73e61ef0
pads2gpcb: implemented parsing of the header line with units spec
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
38
diff
changeset
|
62 /* parse the header line with the units specification */ |
|
242f73e61ef0
pads2gpcb: implemented parsing of the header line with units spec
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
38
diff
changeset
|
63 if (!get_input_line()) { |
|
242f73e61ef0
pads2gpcb: implemented parsing of the header line with units spec
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
38
diff
changeset
|
64 invheader: fprintf(stderr, |
|
242f73e61ef0
pads2gpcb: implemented parsing of the header line with units spec
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
38
diff
changeset
|
65 "error: %s does not begin with a recognized header line\n", |
|
242f73e61ef0
pads2gpcb: implemented parsing of the header line with units spec
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
38
diff
changeset
|
66 input_filename); |
|
242f73e61ef0
pads2gpcb: implemented parsing of the header line with units spec
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
38
diff
changeset
|
67 exit(1); |
|
242f73e61ef0
pads2gpcb: implemented parsing of the header line with units spec
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
38
diff
changeset
|
68 } |
|
242f73e61ef0
pads2gpcb: implemented parsing of the header line with units spec
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
38
diff
changeset
|
69 if (parse_header_line() < 0) |
|
242f73e61ef0
pads2gpcb: implemented parsing of the header line with units spec
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
38
diff
changeset
|
70 goto invheader; |
|
242f73e61ef0
pads2gpcb: implemented parsing of the header line with units spec
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
38
diff
changeset
|
71 |
|
242f73e61ef0
pads2gpcb: implemented parsing of the header line with units spec
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
38
diff
changeset
|
72 /* process the body of the monster! */ |
|
38
aa0539cc3d41
pads2gpcb project started, skeleton compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
73 while (get_input_line()) { |
|
aa0539cc3d41
pads2gpcb project started, skeleton compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
74 if (input_line_buf[0] != '*') |
|
aa0539cc3d41
pads2gpcb project started, skeleton compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
75 continue; |
|
aa0539cc3d41
pads2gpcb project started, skeleton compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
76 parse_starline(); |
|
aa0539cc3d41
pads2gpcb project started, skeleton compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
77 loop: if (!strcmp(input_line_starkw, "PARTDECAL")) { |
|
aa0539cc3d41
pads2gpcb project started, skeleton compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
78 process_partdecal_section(); |
|
aa0539cc3d41
pads2gpcb project started, skeleton compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
79 goto loop; |
|
aa0539cc3d41
pads2gpcb project started, skeleton compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
80 } |
|
aa0539cc3d41
pads2gpcb project started, skeleton compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
81 if (!strcmp(input_line_starkw, "PARTTYPE")) { |
|
aa0539cc3d41
pads2gpcb project started, skeleton compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
82 process_parttype_section(); |
|
aa0539cc3d41
pads2gpcb project started, skeleton compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
83 goto loop; |
|
aa0539cc3d41
pads2gpcb project started, skeleton compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
84 } |
|
aa0539cc3d41
pads2gpcb project started, skeleton compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
85 if (!strcmp(input_line_starkw, "PART")) { |
|
aa0539cc3d41
pads2gpcb project started, skeleton compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
86 process_part_section(); |
|
aa0539cc3d41
pads2gpcb project started, skeleton compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
87 goto loop; |
|
aa0539cc3d41
pads2gpcb project started, skeleton compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
88 } |
|
aa0539cc3d41
pads2gpcb project started, skeleton compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
89 } |
|
74
58f11f06d831
pads2gpcb: main output implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
73
diff
changeset
|
90 if (main_output) |
|
58f11f06d831
pads2gpcb: main output implemented
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
73
diff
changeset
|
91 write_elements_pcb(main_output); |
|
38
aa0539cc3d41
pads2gpcb project started, skeleton compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
92 exit(0); |
|
aa0539cc3d41
pads2gpcb project started, skeleton compiles
Mychaela Falconia <falcon@ivan.Harhan.ORG>
parents:
diff
changeset
|
93 } |
