def soloman_corner =
	z0 = (w,.5h);
	penpos0(croswid, a2);
	z1 = z0;
	penpos1(knotwid, a2);
	z2 = (.75w,.25h);
	penpos2(knotwid, a2);
	z3 = (.25w,.25h);
	penpos3(knotwid, a1);
	z4 = (.25w,.75h);
	penpos4(knotwid, a4);
	z5 = z6r;
	penpos5(knotwid, a4);
	z6 = (.5w,h);
	penpos6(croswid, a3);
	z7 = z6;
	penpos7(knotwid, a3);
	z8 = z0r;
	penpos8(knotwid, a3);

	llrrexp(8);
	penstroke z1e---z2e---z3e---z4e---z5e;
	penstroke z7e---z8e;
enddef;

beginchar ("@", sqwid#, sqht#, 0); "soloman ll";
	soloman_corner;
endchar;

beginchar ("A", sqwid#, sqht#, 0); "soloman lr";
	soloman_corner;
	currentpicture := (currentpicture rotated 90) shifted (w, 0);
endchar;

beginchar ("B", sqwid#, sqht#, 0); "soloman ur";
	soloman_corner;
	currentpicture := (currentpicture rotated 180) shifted (w, h);
endchar;

beginchar ("C", sqwid#, sqht#, 0); "soloman ul";
	soloman_corner;
	currentpicture := (currentpicture rotated 270) shifted (0, h);
endchar;

def soloman_side =
	z0 = (0w,.5h);
	penpos0(croswid, a4);
	z1 = z0;
	penpos1(knotwid, a4);
	z2 = (.25w,.75h);
	penpos2(knotwid, a4);
	z3 = (.75w,.75h);
	penpos3(knotwid, a3);
	z4 = z5r;
	penpos4(knotwid, a3);
	z5 = (w,.5h);
	penpos5(croswid, a2);
	z6 = z5;
	penpos6(knotwid, a2);
	z7 = z8r;
	penpos7(knotwid, a2);
	z8 = (.5w,0h);
	penpos8(croswid, a1);
	z9 = z8;
	penpos9(knotwid, a1);
	z10 = z0r;
	penpos10(knotwid, a1);

	llrrexp(10);
	penstroke z1e---z2e---z3e---z4e;
	penstroke z6e---z7e;
	penstroke z9e---z10e;
enddef;

beginchar ("D", sqwid#, sqht#, 0); "soloman u";
	soloman_side;
endchar;

beginchar ("E", sqwid#, sqht#, 0); "soloman b";
	soloman_side;
	currentpicture := (currentpicture rotated 180) shifted (w, h);
endchar;

beginchar ("F", sqwid#, sqht#, 0); "soloman l";
	soloman_side;
	currentpicture := (currentpicture rotated 90) shifted (w, 0);
endchar;

beginchar ("G", sqwid#, sqht#, 0); "soloman r";
	soloman_side;
	currentpicture := (currentpicture rotated 270) shifted (0, h);
endchar;

beginchar ("H", sqwid#, sqht#, 0); "soloman mid";
	z0 = (.5w,h);
	penpos0(croswid, a3);
	z1 = z0;
	penpos1(knotwid, a3);
	z2 = z3r;
	penpos2(knotwid, a3);
	z3 = (w,.5h);
	penpos3(croswid, a2);
	z4 = z3;
	penpos4(knotwid, a2);
	z5 = z6r;
	penpos5(knotwid, a2);
	z6 = (.5w, 0h);
	penpos6(croswid, a1);
	z7 = z6;
	penpos7(knotwid, a1);
	z8 = z9r;
	penpos8(knotwid, a1);
	z9 = (0w,.5h);
	penpos9(croswid, a4);
	z10 = z9;
	penpos10(knotwid, a4);
	z11 = z0r;
	penpos11(knotwid, a4);

	llrrexp(11);
	penstroke z1e---z2e;
	penstroke z4e---z5e;
	penstroke z7e---z8e;
	penstroke z10e---z11e;
endchar;
