shithub: cardgen

Download patch

ref: 1793e1013312086ebf77222bf984aa184e59946e
parent: d6198959f03e4369688f0f13808f5dbad0c0c948
author: sirjofri <sirjofri@sirjofri.de>
date: Fri Feb 13 20:29:17 EST 2026

improves card generation, adds default syms

--- a/cardgen.c
+++ b/cardgen.c
@@ -12,9 +12,9 @@
 
 int cardwid = 200;
 int cardhgt = 300;
+int cardrad = 7;
 int symwid = 30;
 int symhgt = 30;
-int ncards = 15; /* max number */
 
 Point symlocs[2] = {
 	{ 10, 10 },
@@ -45,10 +45,10 @@
 	"8",
 	"9",
 	"10",
-	"J",
-	"Q",
-	"K",
-	"A",
+	"J (11)",
+	"Q (12)",
+	"K (13)",
+	"A (14)",
 };
 
 
@@ -62,6 +62,8 @@
 	Memimage *mi;
 	int fcard;
 	int fsym;
+	Rectangle r;
+	Point p;
 	
 	fcard = create("tcard", OWRITE, 0664);
 	if (fcard < 0)
@@ -73,27 +75,41 @@
 #define LN(A, B) memimageline(mi, A, B, Endsquare, Endsquare, 1, memblack, ZP, S)
 #define FINISH(A) writememimage(A, mi);freememimage(mi);close(A);
 	
-	mi = allocmemimage(Rect(0, 0, cardwid, cardhgt), RGB24);
+	mi = allocmemimage(Rect(-1, -1, cardwid+1, cardhgt+1), RGBA32);
 	if (!mi)
 		sysfatal("%r");
 	
-	memfillcolor(mi, DWhite);
-	LN(Pt(-1, -1), Pt(cardwid, -1));
-	LN(Pt(cardwid, -1), Pt(cardwid, cardhgt));
-	LN(Pt(cardwid, cardhgt), Pt(-1, cardhgt));
-	LN(Pt(-1, cardhgt), Pt(-1, -1));
+	memfillcolor(mi, DTransparent);
+	p = Pt(cardrad*2, cardrad*2);
+	memimageline(mi, p, p, Enddisc, Enddisc, cardrad*2, memwhite, ZP, SoverD);
+	p = Pt(cardwid-cardrad*2, cardrad*2);
+	memimageline(mi, p, p, Enddisc, Enddisc, cardrad*2, memwhite, ZP, SoverD);
+	p = Pt(cardwid-cardrad*2, cardhgt-cardrad*2);
+	memimageline(mi, p, p, Enddisc, Enddisc, cardrad*2, memwhite, ZP, SoverD);
+	p = Pt(cardrad*2, cardhgt-cardrad*2);
+	memimageline(mi, p, p, Enddisc, Enddisc, cardrad*2, memwhite, ZP, SoverD);
+	r.min = Pt(cardrad*2, 0);
+	r.max = Pt(cardwid-cardrad*2, cardhgt);
+	memdraw(mi, r, memwhite, ZP, nil, ZP, S);
+	r.min = Pt(0, cardrad*2);
+	r.max = Pt(cardwid, cardhgt-cardrad*2);
+	memdraw(mi, r, memwhite, ZP, nil, ZP, S);
+	LN(Pt(-2, -2), Pt(cardwid+1, -2));
+	LN(Pt(cardwid+1, -2), Pt(cardwid+1, cardhgt+1));
+	LN(Pt(cardwid+1, cardhgt+1), Pt(-2, cardhgt+1));
+	LN(Pt(-2, cardhgt+1), Pt(-2, -2));
 	
 	FINISH(fcard)
 	
-	mi = allocmemimage(Rect(0, 0, symwid, symhgt), RGBA32);
+	mi = allocmemimage(Rect(-1, -1, symwid+1, symhgt+1), RGBA32);
 	if (!mi)
 		sysfatal("%r");
 	
 	memfillcolor(mi, DTransparent);
-	LN(Pt(-1, -1), Pt(symwid, -1));
-	LN(Pt(symwid, -1), Pt(symwid, symhgt));
-	LN(Pt(symwid, symhgt), Pt(-1, symhgt));
-	LN(Pt(-1, symhgt), Pt(-1, -1));
+	LN(Pt(-2, -2), Pt(symwid+1, -2));
+	LN(Pt(symwid+1, -2), Pt(symwid+1, symhgt+1));
+	LN(Pt(symwid+1, symhgt+1), Pt(-2, symhgt+1));
+	LN(Pt(-2, symhgt+1), Pt(-2, -2));
 	FINISH(fsym);
 	
 #undef LN
@@ -128,6 +144,7 @@
 	char *label;
 	Point text;
 	Point p;
+	Rectangle r;
 	
 	label = labels[num];
 	if (!label)
@@ -136,13 +153,15 @@
 	defont = getmemdefont();
 	text = memsubfontwidth(defont, label);
 	
-	mi = allocmemimage(Rect(0, 0, cardwid, cardhgt), RGB24);
+	mi = allocmemimage(Rect(0, 0, cardwid, cardhgt), RGBA32);
 	if (!mi)
 		sysfatal("%r");
 	
+	memfillcolor(mi, DTransparent);
 	memdraw(mi, mi->r, card, ZP, nil, ZP, S);
+	r = insetrect(sym->r, 1);
 	for (i = 0; i < nelem(symlocs); i++) {
-		memdraw(mi, rectaddpt(sym->r, symlocs[i]), sym, ZP, nil, ZP, SatopD);
+		memdraw(mi, rectaddpt(r, symlocs[i]), sym, ZP, nil, ZP, SatopD);
 	}
 	
 	for (i = 0; i < nelem(lbllocs); i++) {
binary files /dev/null b/sym0 differ
binary files /dev/null b/sym1 differ
binary files /dev/null b/sym2 differ
binary files /dev/null b/sym3 differ
--