\def{text f= \parm1 }
\def{integer pas=20}
\def{integer nombre_niveau=\parm2}
\def{real centrex=\parm3}
\def{real centrey=\parm4}
\def{real xy_size= \parm5}
\if{\parm3 issametext  NaN}{ 
\def{text f= x^2*y-x*y^2}
\def{integer pas=20}
\def{integer nombre_niveau=10}
\def{real centrex=0}
\def{real centrey=0}
\def{real xy_size= 5}}

\def{real lambd= evalue(\f,x=\centrex,y=\centrey)}
\def{real maxf=\lambd}
 \def{real minf=\lambd}
 \for{a=-\pas to \pas}{
\for{b=-\pas to \pas}
{
\def{function c=evalue(\f,x=\centrex+(\a*\xy_size/\pas),y=\centrey+(\b*\xy_size/\pas))}
\def{real maxf= max(\c,\maxf)}
\def{real minf= min(\c,\minf)}}}

\def{real nstep=\maxf-(\minf)}
\def{integer N= (-(\lambd)+(\minf))*\nombre_niveau/\nstep}
\def{integer M= (-(\lambd)+(\maxf))*\nombre_niveau/\nstep}
\def{text niveau=}
\for{i=\N to \M}
{\def{text niveau=\niveau,(\i*\nstep/\nombre_niveau)+(\lambd)}
}
\draw{200,200}
{xrange \centrex-\xy_size, \centrex+\xy_size
yrange \centrey-\xy_size, \centrey+\xy_size
parallel \centrex-\xy_size,\centrey-\xy_size,\centrex+\xy_size,\centrey-\xy_size,0,\xy_size/10,20,grey
parallel \centrex-\xy_size,\centrey-\xy_size,\centrex-\xy_size,\centrey+\xy_size,\xy_size/10,0,20,grey
arrow 0,0, 0,\xy_size,10,black
arrow 0,0, \xy_size, 0 ,10,black
vline 0,0, black
hline 0,0, black
text black, \centrex,\centrey, large, A
disk  \centrex,\centrey, 5,blue 
levelcurve green, \f, \niveau
}
