proc DrawRect(X0, Y0, W, H, Color); int X0, Y0, W, H, Color, Y; for Y:= Y0 to Y0+H-1 do [Move(X0, Y); Line(X0+W-1, Y, Color)]; proc DrawEdge(PX, PY, Colors, Edge); int PX, PY, Colors, Edge; int C; [C:= Colors(Edge); Move(PX, PY); Line(PX+11, PY, C(0)); Line(PX+11, PY+11, C(1)); Line(PX, PY+11, C(2)); Line(PX, PY, C(3)); ]; def ScrW=256, ScrH=256; def LT=0, TR=1, RB=2, BL=3; \left top, etc. def White = $ffffff, Black = 0; def LightOlive = $d3d004, PaleBlue = $3250ff; int Edges, Colors, X, Y, PX, PY; [SetFB(ScrW, ScrH, 24); \Signifies white and black edges on the blue squares Edges:= [ [LT, BL, BL, RB, RB, TR, TR, LT, LT, BL, BL, RB], [LT, LT, BL, BL, RB, RB, TR, TR, LT, LT, BL, BL], [TR, LT, LT, BL, BL, RB, RB, TR, TR, LT, LT, BL], [TR, TR, LT, LT, BL, BL, RB, RB, TR, TR, LT, LT], [RB, TR, TR, LT, LT, BL, BL, RB, RB, TR, TR, LT], [RB, RB, TR, TR, LT, LT, BL, BL, RB, RB, TR, TR], [BL, RB, RB, TR, TR, LT, LT, BL, BL, RB, RB, TR], [BL, BL, RB, RB, TR, TR, LT, LT, BL, BL, RB, RB], [LT, BL, BL, RB, RB, TR, TR, LT, LT, BL, BL, RB], [LT, LT, BL, BL, RB, RB, TR, TR, LT, LT, BL, BL], [TR, LT, LT, BL, BL, RB, RB, TR, TR, LT, LT, BL], [TR, TR, LT, LT, BL, BL, RB, RB, TR, TR, LT, LT] ]; Colors:= [ [White, Black, Black, White], [White, White, Black, Black], [Black, White, White, Black], [Black, Black, White, White] ]; DrawRect(0, 0, ScrW, ScrH, LightOlive); for X:= 0 to 11 do [PX:= 27 + X*17; for Y:= 0 to 11 do [PY:= 27 + Y*17; DrawRect(PX, PY, 12, 12, PaleBlue); DrawEdge(PX, PY, Colors, Edges(Y,X)); ]; ]; ]