view pads2gpcb/main.c @ 61:ff1d565d233c

pads2gpcb: handle dummy decals with no pins (found in the E-Sample PCB)
author Mychaela Falconia <falcon@ivan.Harhan.ORG>
date Sun, 31 Jan 2016 05:02:49 +0000
parents f2bcf69fce63
children 9d7e2937883d
line wrap: on
line source

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <ctype.h>
#include <string.h>
#include <strings.h>
#include "globals.h"

static
parse_header_line()
{
	char *cp;

	if (strncmp(input_line_buf, "!PADS-POWERPCB-", 15))
		return(-1);
	cp = input_line_buf + 15;
	while (isalnum(*cp) || *cp == '.')
		cp++;
	if (*cp++ != '-')
		return(-1);
	if (!strncmp(cp, "BASIC", 5))
		input_units_global = 'B';
	else if (!strncmp(cp, "MILS", 4))
		input_units_global = 'I';
	else if (!strncmp(cp, "METRIC", 6))
		input_units_global = 'M';
	else
		return(-1);
	return(0);
}

static void
process_write_option()
{
	extern char *optarg;

	if (strlen(optarg) != 1) {
inv:		fprintf(stderr, "usage error: invalid -w option\n");
		exit(1);
	}
	switch (optarg[0]) {
	case 'd':
		write_decal_files = 1;
		return;
	case 'p':
		write_parttype_files = 1;
		return;
	case 'e':
		write_final_elements = 1;
		return;
	default:
		goto inv;
	}
}

main(argc, argv)
	char **argv;
{
	int c;
	extern int optind;

	while ((c = getopt(argc, argv, "sw:")) != EOF)
		switch (c) {
		case 's':
			do_footprint_silk = 1;
			continue;
		case 'w':
			process_write_option();
			continue;
		default:
		usage:
			fprintf(stderr, "usage: %s [options] pads-file.asc\n",
				argv[0]);
			exit(1);
		}
	if (argc != optind + 1)
		goto usage;
	input_filename = argv[optind];
	open_input_file();

	/* parse the header line with the units specification */
	if (!get_input_line()) {
invheader:	fprintf(stderr,
		"error: %s does not begin with a recognized header line\n",
			input_filename);
		exit(1);
	}
	if (parse_header_line() < 0)
		goto invheader;

	/* process the body of the monster! */
	while (get_input_line()) {
		if (input_line_buf[0] != '*')
			continue;
		parse_starline();
loop:		if (!strcmp(input_line_starkw, "PARTDECAL")) {
			process_partdecal_section();
			goto loop;
		}
#if 0
		if (!strcmp(input_line_starkw, "PARTTYPE")) {
			process_parttype_section();
			goto loop;
		}
		if (!strcmp(input_line_starkw, "PART")) {
			process_part_section();
			goto loop;
		}
#endif
	}
	exit(0);
}