#define XPIX (param->xpix)
#define YPIX 100
+/* We work internally in smaller units, though. */
+#define SCALE 2
+#define XPIX_S (XPIX * SCALE)
+#define YPIX_S (YPIX * SCALE)
+
/* Position of diagonal lines within pixels */
-#define XQTR (XPIX/4)
-#define YQTR (YPIX/4)
+#define XQTR_S (XPIX_S/4)
+#define YQTR_S (YPIX_S/4)
void doprologue(void);
void dochar(char const data[YSIZE], unsigned flags);
if (!started) printf("Fore\nSplineSet\n");
started = 1;
do {
- printf(" %d %d %s 1\n",
- p->v.x, p->v.y - 3*YPIX,
+ printf(" %.0f %.0f %s 1\n",
+ (double)p->v.x / SCALE,
+ (double)p->v.y / SCALE - 3*YPIX,
p == &points[i] && p->next ? "m" : "l");
p1 = p->next;
p->prev = p->next = NULL;
static void
blackpixel(int x, int y, int bl, int br, int tr, int tl)
{
- x *= XPIX; y *= YPIX;
+ x *= XPIX_S; y *= YPIX_S;
if (bl) moveto(x, y);
- else { moveto(x+XQTR, y); lineto(x, y+YQTR); }
- if (tl) lineto(x, y+YPIX);
- else { lineto(x, y+YPIX-YQTR); lineto(x+XQTR, y+YPIX); }
- if (tr) lineto(x+XPIX, y+YPIX);
- else { lineto(x+XPIX-XQTR, y+YPIX); lineto(x+XPIX, y+YPIX-YQTR); }
- if (br) lineto(x+XPIX, y);
- else { lineto(x+XPIX, y+YQTR); lineto(x+XPIX-XQTR, y); }
+ else { moveto(x+XQTR_S, y); lineto(x, y+YQTR_S); }
+ if (tl) lineto(x, y+YPIX_S);
+ else { lineto(x, y+YPIX_S-YQTR_S); lineto(x+XQTR_S, y+YPIX_S); }
+ if (tr) lineto(x+XPIX_S, y+YPIX_S);
+ else { lineto(x+XPIX_S-XQTR_S, y+YPIX_S);
+ lineto(x+XPIX_S, y+YPIX_S-YQTR_S); }
+ if (br) lineto(x+XPIX_S, y);
+ else { lineto(x+XPIX_S, y+YQTR_S); lineto(x+XPIX_S-XQTR_S, y); }
closepath();
}
static void
whitepixel(int x, int y, int bl, int br, int tr, int tl)
{
- x *= XPIX; y *= YPIX;
+ x *= XPIX_S; y *= YPIX_S;
if (bl) {
- moveto(x, y); lineto(x, y+YPIX-YQTR);
- if (br) { lineto(x+XPIX/2, y+YPIX/2-YQTR); lineto(x+XQTR, y); }
- else lineto(x+XPIX-XQTR, y);
+ moveto(x, y); lineto(x, y+YPIX_S-YQTR_S);
+ if (br) { lineto(x+XPIX_S/2, y+YPIX_S/2-YQTR_S);
+ lineto(x+XQTR_S, y); }
+ else lineto(x+XPIX_S-XQTR_S, y);
closepath();
}
if (tl) {
- moveto(x, y+YPIX); lineto(x+XPIX-XQTR, y+YPIX);
- if (bl) { lineto(x+XPIX/2-XQTR, y+YPIX/2);
- lineto(x, y+YPIX-YQTR); }
- else lineto(x, y+YQTR);
+ moveto(x, y+YPIX_S); lineto(x+XPIX_S-XQTR_S, y+YPIX_S);
+ if (bl) { lineto(x+XPIX_S/2-XQTR_S, y+YPIX_S/2);
+ lineto(x, y+YPIX_S-YQTR_S); }
+ else lineto(x, y+YQTR_S);
closepath();
}
if (tr) {
- moveto(x+XPIX, y+YPIX); lineto(x+XPIX, y+YQTR);
- if (tl) { lineto(x+XPIX/2, y+YPIX/2+YQTR);
- lineto(x+XPIX-XQTR, y+YPIX); }
- else lineto(x+XQTR, y+YPIX);
+ moveto(x+XPIX_S, y+YPIX_S); lineto(x+XPIX_S, y+YQTR_S);
+ if (tl) { lineto(x+XPIX_S/2, y+YPIX_S/2+YQTR_S);
+ lineto(x+XPIX_S-XQTR_S, y+YPIX_S); }
+ else lineto(x+XQTR_S, y+YPIX_S);
closepath();
}
if (br) {
- moveto(x+XPIX, y); lineto(x+XQTR, y);
- if (tr) { lineto(x+XPIX/2+XQTR, y+YPIX/2);
- lineto(x+XPIX, y+YQTR); }
- else lineto(x+XPIX, y+YPIX-YQTR);
+ moveto(x+XPIX_S, y); lineto(x+XQTR_S, y);
+ if (tr) { lineto(x+XPIX_S/2+XQTR_S, y+YPIX_S/2);
+ lineto(x+XPIX_S, y+YQTR_S); }
+ else lineto(x+XPIX_S, y+YPIX_S-YQTR_S);
closepath();
}
}
static void
tile(int x0, int y0, int x1, int y1)
{
- x0 *= XPIX; y0 *= YPIX;
- x1 *= XPIX; y1 *= YPIX;
+ x0 *= XPIX_S; y0 *= YPIX_S;
+ x1 *= XPIX_S; y1 *= YPIX_S;
moveto(x0, y0); lineto(x0, y1); lineto(x1, y1); lineto(x1, y0);
closepath();
}