mirror of
git://projects.qi-hardware.com/eda-tools.git
synced 2024-12-23 18:55:31 +02:00
sch2fig/: better error reporting; add features of Neo900 sheet 2
This commit is contained in:
parent
9f8a09b2d5
commit
8ad734ff39
@ -34,5 +34,5 @@ sch:
|
||||
test: $(NAME)
|
||||
./$(NAME) $(NEO900_HW)/neo900.lib \
|
||||
$(KICAD_LIBS)/powered.lib \
|
||||
$(NEO900_HW)/neo900_SS_1.sch \
|
||||
$(NEO900_HW)/neo900_SS_2.sch \
|
||||
>out.fig
|
||||
|
@ -14,7 +14,9 @@
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <math.h>
|
||||
#include <assert.h>
|
||||
|
||||
#include "util.h"
|
||||
#include "style.h"
|
||||
#include "text.h"
|
||||
#include "fig.h"
|
||||
@ -96,8 +98,8 @@ void fig_glabel(int x, int y, const char *s, int dir, int dim,
|
||||
.vert = text_mid,
|
||||
};
|
||||
int n = 6;
|
||||
int vx[5];
|
||||
int vy[5];
|
||||
int vx[7];
|
||||
int vy[7];
|
||||
int half = (dim >> 1) + GLABEL_OFFSET;
|
||||
|
||||
switch (dir) {
|
||||
@ -106,7 +108,7 @@ void fig_glabel(int x, int y, const char *s, int dir, int dim,
|
||||
txt.hor = text_max;
|
||||
break;
|
||||
default:
|
||||
abort();
|
||||
assert(0);
|
||||
}
|
||||
|
||||
switch (shape) {
|
||||
@ -136,8 +138,24 @@ void fig_glabel(int x, int y, const char *s, int dir, int dim,
|
||||
text_rel(&txt, text_min, text_mid, -GLABEL_OFFSET- half, 0,
|
||||
vx + 5, vy + 5);
|
||||
break;
|
||||
case fig_bidir:
|
||||
text_shift(&txt, txt.hor, text_mid, -GLABEL_OFFSET - half, 0);
|
||||
n = 7;
|
||||
text_rel(&txt, text_min, text_min,
|
||||
-GLABEL_OFFSET, GLABEL_OFFSET, vx + 1, vy + 1);
|
||||
text_rel(&txt, text_max, text_min,
|
||||
GLABEL_OFFSET, GLABEL_OFFSET, vx + 2, vy + 2);
|
||||
text_rel(&txt, text_max, text_mid, GLABEL_OFFSET + half, 0,
|
||||
vx + 3, vy + 3);
|
||||
text_rel(&txt, text_max, text_max,
|
||||
GLABEL_OFFSET, -GLABEL_OFFSET, vx + 4, vy + 4);
|
||||
text_rel(&txt, text_min, text_max,
|
||||
-GLABEL_OFFSET, -GLABEL_OFFSET, vx + 5, vy + 5);
|
||||
text_rel(&txt, text_min, text_mid, -GLABEL_OFFSET- half, 0,
|
||||
vx + 6, vy + 6);
|
||||
break;
|
||||
default:
|
||||
abort();
|
||||
assert(0);
|
||||
}
|
||||
|
||||
text_fig(&txt, COLOR_GLABEL, LAYER_GLABEL);
|
||||
@ -159,6 +177,17 @@ void fig_junction(int x, int y)
|
||||
}
|
||||
|
||||
|
||||
void fig_noconn(int x, int y)
|
||||
{
|
||||
int vx[2] = { x - NOCONN_LEN, x + NOCONN_LEN };
|
||||
int vy[2] = { y - NOCONN_LEN, y + NOCONN_LEN };
|
||||
|
||||
fig_poly(2, vx, vy, COLOR_NOCONN, LAYER_NOCONN);
|
||||
swap(vy[0], vy[1]);
|
||||
fig_poly(2, vx, vy, COLOR_NOCONN, LAYER_NOCONN);
|
||||
}
|
||||
|
||||
|
||||
void fig_wire(int sx, int sy, int ex, int ey)
|
||||
{
|
||||
// TypeStyle FillCol AreaFil Cap FwdAr
|
||||
|
@ -22,6 +22,7 @@ enum fig_shape {
|
||||
fig_in, // Input
|
||||
fig_out, // Output
|
||||
fig_tri, // 3State
|
||||
fig_bidir, // Bidirectional
|
||||
};
|
||||
|
||||
|
||||
@ -35,6 +36,7 @@ void fig_glabel(int x, int y, const char *s, int dir, int dim,
|
||||
enum fig_shape shape);
|
||||
|
||||
void fig_junction(int x, int y);
|
||||
void fig_noconn(int x, int y);
|
||||
|
||||
void fig_wire(int sx, int sy, int ex, int ey);
|
||||
void fig_line(int sx, int sy, int ex, int ey);
|
||||
|
@ -262,7 +262,7 @@ static enum text_style decode_style(const char *s)
|
||||
{
|
||||
if (!strcmp(s, "Normal"))
|
||||
return text_normal;
|
||||
abort();
|
||||
assert(0);
|
||||
}
|
||||
|
||||
|
||||
|
@ -16,6 +16,7 @@
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <assert.h>
|
||||
|
||||
#include "util.h"
|
||||
#include "misc.h"
|
||||
@ -38,6 +39,8 @@ static enum fig_shape do_decode_shape(const char *s)
|
||||
return fig_out;
|
||||
if (!strcmp(s, "3State"))
|
||||
return fig_tri;
|
||||
if (!strcmp(s, "BiDi"))
|
||||
return fig_bidir;
|
||||
fprintf(stderr, "unknown shape: \"%s\"\n", s);
|
||||
exit(1);
|
||||
}
|
||||
@ -110,7 +113,7 @@ static bool parse_field(struct sch_ctx *ctx, const char *line)
|
||||
txt->rot = 90;
|
||||
break;
|
||||
default:
|
||||
abort();
|
||||
assert(0);
|
||||
}
|
||||
|
||||
switch (hor) {
|
||||
@ -124,7 +127,7 @@ static bool parse_field(struct sch_ctx *ctx, const char *line)
|
||||
txt->hor = text_max;
|
||||
break;
|
||||
default:
|
||||
abort();
|
||||
assert(0);
|
||||
}
|
||||
|
||||
switch (vert) {
|
||||
@ -138,7 +141,7 @@ static bool parse_field(struct sch_ctx *ctx, const char *line)
|
||||
txt->vert = text_max;
|
||||
break;
|
||||
default:
|
||||
abort();
|
||||
assert(0);
|
||||
}
|
||||
|
||||
// @@@ decode font
|
||||
@ -249,6 +252,13 @@ bool sch_parse(struct sch_ctx *ctx, const char *line)
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* NoConn */
|
||||
|
||||
if (sscanf(line, "NoConn ~ %d %d", &x, &y) == 2) {
|
||||
fig_noconn(x, y);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* Wire */
|
||||
|
||||
if (sscanf(line, "Wire Wire Line%n", &n) == 0 && n) {
|
||||
@ -347,5 +357,5 @@ bool sch_parse(struct sch_ctx *ctx, const char *line)
|
||||
void sch_init(struct sch_ctx *ctx)
|
||||
{
|
||||
ctx->state = sch_descr;
|
||||
ctx->lineno++;
|
||||
ctx->lineno = 0;
|
||||
}
|
||||
|
@ -24,6 +24,7 @@
|
||||
#define COLOR_SHEET_DWG COLOR_BLUE
|
||||
#define COLOR_TEXT COLOR_BLUE
|
||||
#define COLOR_WIRE COLOR_GREEN4
|
||||
#define COLOR_NOCONN COLOR_BLUE
|
||||
#define COLOR_GLABEL COLOR_RED4
|
||||
#define COLOR_FIELD COLOR_CYAN3
|
||||
#define COLOR_PIN_NAME COLOR_FIELD
|
||||
@ -33,6 +34,7 @@
|
||||
|
||||
#define LAYER_GLABEL 20
|
||||
#define LAYER_TEXT 30
|
||||
#define LAYER_NOCONN 40
|
||||
#define LAYER_WIRES 50
|
||||
#define LAYER_FIELD 60
|
||||
#define LAYER_PIN_NAME LAYER_FIELD
|
||||
@ -46,6 +48,8 @@
|
||||
|
||||
#define JUNCTION_R 40
|
||||
|
||||
#define NOCONN_LEN 25
|
||||
|
||||
#define GLABEL_OFFSET 20
|
||||
|
||||
#endif /* !STYLE_H */
|
||||
|
@ -38,6 +38,10 @@
|
||||
stralloc_tmp; })
|
||||
|
||||
|
||||
#define swap(a, b) \
|
||||
({ typeof(a) _tmp = (a); a = (b); b = _tmp; })
|
||||
|
||||
|
||||
#define unsupported(s) \
|
||||
fprintf(stderr, __FILE__ ":%d: unsupported: " s "\n", __LINE__)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user