UNIT Mouse; INTERFACE VAR a, b: Array [1..5] of Byte; x, y, xmin, ymin, xmax, ymax: Integer; sens: Byte; left, right, both: Boolean; Procedure Scan; Procedure LimitX(x1,x2: Integer); Procedure LimitY(y1,y2: Integer); Procedure Go(x0,y0: Integer); Procedure Sensitivity(sens0: Byte); Procedure AddKursor(x,y: Integer; a0,b0,n: Byte); Procedure SetKursor(n: Byte); Procedure Show; Function Area(x1, y1, x2, y2: Integer): Boolean; IMPLEMENTATION Uses Dos, VGraph; Var mask: Array [1..5] of Pointer; reg: Registers; i,j,m: Byte; Procedure Scan; begin reg.ax:=3; intr($33,reg); x:=Round(reg.cx/sens); y:=Round(reg.dx/sens); case reg.bx of 1: begin left:=true; right:=false; both:=false end; 2: begin left:=false; right:=true; both:=false end; 3: begin left:=true; right:=true; both:=true end else begin left:=false; right:=false; both:=false end end {case} end; {Scan} Procedure LimitX(x1,x2: Integer); begin reg.ax:=7; reg.cx:=Round(x1*sens); reg.dx:=Round(x2*sens); intr($33,reg); xmin:=x1; xmax:=x2 end; {LimitX} Procedure LimitY(y1,y2: Integer); begin reg.ax:=8; reg.cx:=Round(y1*sens); reg.dx:=Round(y2*sens); intr($33,reg); ymin:=y1; ymax:=y2 end; {LimitY} Procedure Go(x0,y0: Integer); begin reg.ax:=4; reg.cx:=Round(x0*sens); reg.dx:=Round(y0*sens); intr($33,reg); x:=x0; y:=y0 end; {Go} Procedure Sensitivity(Sens0: Byte); begin sens:=sens0; Go(x,y); LimitX(xmin,xmax); LimitY(ymin,ymax) end; {Sensitivity} Procedure AddKursor(x,y: Integer; a0,b0,n: Byte); var i, j: Byte; begin FreeMem(mask[n], a[n]*b[n]); a[n]:=a0; b[n]:=b0; GetMem(mask[n], a[n]*b[n]); for i:=0 to b[n]-1 do for j:=0 to a[n]-1 do Mem[Seg(mask[n]^):(i*a[n]+j)]:=GetPixel(x+j,y+i) end; {AddKursor} Procedure SetKursor(n: Byte); begin m:=n end; {SetKursor} Procedure Show; var i, j: Byte; begin for i:=0 to b[m]-1 do for j:=0 to a[m]-1 do if Mem[Seg(mask[m]^):(i*a[m]+j)] <> 0 then PutPixel(x+j, y+i, Mem[Seg(mask[m]^):(i*a[m]+j)]) end; {Show} Function Area(x1, y1, x2, y2: Integer): Boolean; begin if (x >= x1)and(x <= x2)and(y >= y1)and(y <= y2) then Area:=true else Area:=false end; {Area} BEGIN sens:=1; m:=1; a[m]:=15; b[m]:=15; GetMem(mask[m],a[m]*b[m]); for i:=0 to 14 do for j:=0 to 14 do if (i <= 9-j)or(i = j)or(i = j+1)or(i = j-1) then Mem[Seg(mask[m]^):(i*a[m]+j)]:=15 else Mem[Seg(mask[m]^):(i*a[m]+j)]:=0; LimitX(0,639); LimitY(0,479); Go(100,100) END.