FreeCalypso > hg > fc-small-hw
view lunakpd1/placetool/placetool.c @ 18:8d93467a4260
lunakpd1.pcb complete
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sat, 09 May 2020 08:08:42 +0000 |
parents | 7e564c546dde |
children |
line wrap: on
line source
#include <ctype.h> #include <string.h> #include <strings.h> #include <stdio.h> #include <stdlib.h> char *infname; FILE *inf; int xstart, xstep, ystart, ystep; char linebuf[512], parsebuf[512], *fields[11]; int lineno; parse_element_line() { int count; char *cp; cp = parsebuf; for (count = 0; ; ) { if (!isdigit(*cp) && *cp != '-' && *cp != '\"') { inv: fprintf(stderr, "%s line %d: invalid Element line\n", infname, lineno); exit(1); } if (count >= 11) goto inv; fields[count++] = cp; while (*cp && *cp != ' ' && *cp != ']') cp++; if (!*cp) goto inv; if (*cp == ']') { *cp++ = '\0'; break; } *cp++ = '\0'; } if (count != 11 || *cp != '\n') goto inv; } emit_new_element_line() { int row, col; row = fields[2][2] - '0'; col = fields[2][3] - '0'; printf("Element[%s %s %s %s %dmm %dmm %s %s %s %s %s]\n", fields[0], fields[1], fields[2], fields[3], xstart + col * xstep, ystart + row * ystep, fields[6], fields[7], fields[8], fields[9], fields[10]); } main(argc, argv) char **argv; { if (argc != 6) { fprintf(stderr, "usage: %s input-file x-start x-step y-start y-step\n", argv[0]); exit(1); } infname = argv[1]; xstart = atoi(argv[2]); xstep = atoi(argv[3]); ystart = atoi(argv[4]); ystep = atoi(argv[5]); inf = fopen(infname, "r"); if (!inf) { perror(infname); exit(1); } for (lineno = 1; fgets(linebuf, sizeof linebuf, inf); lineno++) { if (!index(linebuf, '\n')) { fprintf(stderr, "%s line %d: missing newline\n", infname, lineno); exit(1); } if (strncmp(linebuf, "Element[", 8)) { fputs(linebuf, stdout); continue; } strcpy(parsebuf, linebuf + 8); parse_element_line(); if (fields[2][0] != '\"' || fields[2][1] != 'S' || !isdigit(fields[2][2]) || !isdigit(fields[2][3]) || fields[2][4] != '\"' || fields[2][5]) { fputs(linebuf, stdout); continue; } emit_new_element_line(); } exit(0); }