home *** CD-ROM | disk | FTP | other *** search
/ Simtel MSDOS - Coast to Coast / simteldosarchivecoasttocoast2.iso / turbopas / mousefix.zip / MOUSEFIX.PAS < prev    next >
Pascal/Delphi Source File  |  1991-04-29  |  2KB  |  78 lines

  1. program mousefix;
  2.  
  3. { Program to intercept mouse calls; make sure that hide/show mouse calls
  4.   balance between saves/restores of the mouse state }
  5.  
  6. { Usage:  Run MOUSEFIX after loading your mouse driver, before running
  7.           the TP6 IDE. It's a 27K TSR; if you like it, you'll probably
  8.           want to rewrite it in assembler.
  9.  
  10.   Written for the public domain by Duncan Murdoch.  Send comments to me
  11.   at
  12.     dmurdoch@watstat.waterloo.edu   (Internet)
  13.     DJ Murdoch at 1:221/177.40      (Fidonet)
  14.     71631,122                       (Compuserve)
  15. }
  16.  
  17. uses
  18.   opint,optsr;
  19.  
  20. const
  21.   mousehandle = 20;
  22. var
  23.   hidecounter : integer;
  24.  
  25. procedure hidemouse;
  26. var
  27.   regs : intregisters;
  28. begin
  29.   regs.ax := 2;
  30.   emulateint(regs,israrray[mousehandle].origaddr);
  31. end;
  32.  
  33. procedure showmouse;
  34. var
  35.   regs : intregisters;
  36. begin
  37.   regs.ax := 1;
  38.   emulateint(regs,israrray[mousehandle].origaddr);
  39. end;
  40.  
  41. procedure mouseservice(bp : word); interrupt;
  42. var
  43.   regs : intregisters absolute bp;
  44.   i : integer;
  45. begin
  46.   with regs do
  47.   begin
  48.     if ah = 0 then
  49.     begin
  50.       case al of
  51.       0,$16,$21 : hidecounter := 0;   { Reset, save state }
  52.       1 : dec(hidecounter);       { show }
  53.       2 : inc(hidecounter);       { hide }
  54.       $17 : begin                 { restore state }
  55.               if hidecounter > 0 then
  56.                 for i:=1 to hidecounter do
  57.                   showmouse
  58.               else if hidecounter < 0 then
  59.                 for i:=-1 downto hidecounter do
  60.                   hidemouse;
  61.               hidecounter := 0;
  62.             end;
  63.       end;
  64.     end;
  65.   end;
  66.   chainint(regs,israrray[mousehandle].origaddr);
  67. end;
  68.  
  69. begin
  70.   if not initvector($33, MouseHandle, @Mouseservice) then
  71.   begin
  72.     writeln('Couldn''t get mouse vector!!!');
  73.     halt(99);
  74.   end;
  75.   stayres(ParagraphsToKeep,0);
  76.   writeln('Failed to go resident!!');
  77. end.
  78.