procedure xturn(t:integer); begin course:=course+t; if course > 4 then course:=course-4; end; procedure forwrd(f:integer); var i:integer; begin case course of 1:y:=y+f*ysize; 2:x:=x+2*f*xsize; 3:y:=y-f*ysize; 4:x:=x-2*f*xsize; end; moveto(x,y); end; procedure jump(j:integer); begin case course of 1:y:=y+j*ysize; 2:x:=x+2*j*xsize; 3:y:=y-j*ysize; 4:x:=x-2*xsize; end; grxx1:=x; grxy1:=y; end; procedure hilbert(A,XSIZE,YSIZE:INTEGER); begin case flag of 1:begin if a=0 then xturn(3) else begin a:=a-1; flag:=2; hilbert(A,XSIZE,YSIZE); forwrd(2); xturn(3); flag:=1; hilbert(A,XSIZE,YSIZE); xturn(1); forwrd(2); flag:=1; hilbert(A,XSIZE,YSIZE); forwrd(2); xturn(3); flag:=2; hilbert(A,XSIZE,YSIZE); a:=a+1; end; end; 2:begin if a=0 then xturn(1) else begin a:=a-1; flag:=1; hilbert(A,XSIZE,YSIZE); xturn(1); forwrd(2); flag:=2; hilbert(A,XSIZE,YSIZE); forwrd(2); xturn(3); flag:=2; hilbert(A,XSIZE,YSIZE); xturn(1); forwrd(2); flag:=1; hilbert(A,XSIZE,YSIZE); a:=a+1 end end end end;