view pads2gpcb/main.c @ 72:fab9fc646044

pads2gpcb: single -f option to write loose footprint files
author Mychaela Falconia <falcon@ivan.Harhan.ORG>
date Mon, 01 Feb 2016 00:26:04 +0000
parents 2b71943a311b
children bdfd0b802bb0
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);
}

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

	while ((c = getopt(argc, argv, "fs:")) != EOF)
		switch (c) {
		case 'f':
			write_footprint_files = 1;
			continue;
		case 's':
			do_footprint_silk = 1;
			select_drawlevel_for_silk(atoi(optarg));
			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 (!strcmp(input_line_starkw, "PARTTYPE")) {
			process_parttype_section();
			goto loop;
		}
		if (!strcmp(input_line_starkw, "PART")) {
			process_part_section();
			goto loop;
		}
	}
	exit(0);
}