% This is `chessdiag.mf' version 1.2 as of 10/91 % METAfounded by Piet Tutelaers (internet: rcpt@urc.tue.nl) % file generates a complete chess diagram in a X-window % most versions of METAFONT have memorylimits so generating a complete % diagram of 160 X 160 points for a 300 DPI printer is not possible mode_setup; input chessbase; def draw_pieces(text piece_list) = string piece, location; for p=piece_list: l:=length p; exitunless (l=2) or (l=3); if l=2: piece:="p"; i:=0; else: piece:=substring(0,1) of p; i:=1; fi; column:=ASCII substring(i,i+1) of p - ASCII "a"; row:=ASCII substring(i+1,i+2) of p - ASCII "1"; if not odd(column+row): background:=dark; else: background:=light; fi; scantokens piece(d, column,row); endfor; enddef; def w(text piece_list) = color:=white; empty_board(d); draw_pieces(piece_list); enddef; def b(text piece_list) = color:=black; draw_pieces(piece_list); enddef; M=8; % number of squares d#:=100pt#/M; % size per square fine#:=1/100*d#; thin#:=1/90*d#; thick#:=1/36*d#; border#:=1/20*d#; define_blacker_pixels(fine, thin, thick, border); define_whole_pixels(d); pickup pencircle scaled fine; fine_pen:=savepen ; % for drawing dark squares pickup pencircle scaled border; border_pen:=savepen ; % for border ofboard pickup pencircle scaled thin; thin_pen:=savepen ; % for drawing pieces pickup pencircle scaled thick; thick_pen:=savepen; % for drawing inside pieces light=0; dark=1; white=0; black=1; % put here the wanted diagram (ex.: mate in three problem) w("Kc2","Nb4","Bf8","b3","g7"); b("Ka3","b6"); % Next function draws the picture on the screen (Showit is derived from % showit in plain.mf). The value of screen_rows is redefined because % otherwise the MF-picture will be truncated. To fit the picture in a % X-window the next geometry definition in ~/.Xdefaults is assumed: % % Metafont*geometry: 500x500+200+200 % % This geometry together with the offset (-40, 460) in the line % furtheron did the job on my NCD16 X-terminal! Perhaps you need to fiddle % with the constants to get it right for your display. screen_rows:=500; def Openit = openwindow currentwindow from origin to (screen_rows,screen_cols) at (-40,460) enddef; def Showit = Openit; let Showit=Showit_; Showit enddef; % first time only def Showit_ = display currentpicture inwindow currentwindow enddef; Showit; message("White mates in three moves. Do you see how?"); StopMe; end;