{$A+,B-,D-,E-,F+,G-,I-,L-,N-,O-,R-,S-,V-,X-} {$M 1024,0,655360} Unit mouse; interface type resetrec = record exists : boolean; nbuttons : integer; end; locrec = record buttonstatus : integer; opcount : integer; column : integer; row : integer; end; moverec = record hcount : integer; vcount : integer; end; procedure mreset(var mouse:resetrec); procedure mshow; procedure mhide; procedure mpos(var mouse:locrec); procedure mmoveto(col, row:integer); procedure mpressed(button:integer;var mouse:locrec); procedure mreleased(button:integer;var mouse:locrec); procedure mcolrange(min,max:integer); procedure mrowrange(min,max:integer); procedure mgraphcursor(hhot,vhot:integer;maskseg,maskofs:word); procedure mtextcursor(ctype,p1,p2:word); procedure mmotion(var moved:moverec); procedure minsttask(mask,taskseg,taskofs:word); procedure mlpenon; procedure mlpenoff; procedure mratio(horiz,vert:integer); implementation uses crt,dos; const MDD = $33; var reg : registers; function lower(n1,n2:integer):integer; begin if (n1n2) then upper:=n1 else upper:=n2; end; procedure mreset; begin reg.ax:=0; intr(mdd,reg); if (reg.ax<>0) then mouse.exists:=true else mouse.exists:=false; mouse.nbuttons:=reg.bx; end; procedure mshow; begin reg.ax:=1; intr(mdd,reg); end; procedure mhide; begin reg.ax:=2; intr(mdd,reg); end; procedure mpos; begin reg.ax:=3; intr(mdd,reg); mouse.buttonstatus:=reg.bx; mouse.column:=integer(reg.cx); mouse.row:=integer(reg.dx); end; procedure mmoveto; begin reg.ax:=4; reg.cx:=col; reg.dx:=row; intr(mdd,reg); end; procedure mpressed; begin reg.ax:=5; reg.bx:=button; intr(mdd,reg); mouse.buttonstatus:=reg.ax; mouse.opcount:=reg.bx; mouse.column:=reg.cx; mouse.row:=reg.dx; end; procedure mreleased; begin reg.ax:=6; reg.bx:=button; intr(mdd,reg); mouse.buttonstatus:=reg.ax; mouse.opcount:=reg.bx; mouse.column:=reg.cx; mouse.row:=reg.dx; end; procedure mcolrange; begin reg.ax:=7; reg.cx:=lower(min,max); reg.dx:=upper(min,max); intr(mdd,reg); end; procedure mrowrange; begin reg.ax:=8; reg.cx:=lower(min,max); reg.dx:=upper(min,max); intr(mdd,reg); end; procedure mgraphcursor; begin reg.ax:=9; reg.bx:=hhot; reg.cx:=vhot; reg.dx:=maskofs; reg.es:=maskseg; intr(mdd,reg); end; procedure mtextcursor; begin reg.ax:=10; reg.bx:=ctype; reg.cx:=p1; reg.dx:=p2; intr(mdd,reg); end; procedure mmotion; begin reg.ax:=11; intr(mdd,reg); moved.hcount:=integer(reg.cx); moved.vcount:=integer(reg.dx); end; procedure minsttask; begin reg.ax:=12; reg.cx:=mask; reg.dx:=taskofs; reg.es:=taskseg; intr(mdd,reg); end; procedure mlpenon; begin reg.ax:=14; intr(mdd,reg); end; procedure mlpenoff; begin reg.ax:=15; intr(mdd,reg); end; procedure mratio; begin reg.ax:=15; reg.cx:=horiz; reg.dx:=vert; end; end.