[Back to MOUSE SWAG index] [Back to Main SWAG index] [Original]

    {
    > Are you the DJ Murdoch that has a mouse fix for the TP IDE?

    I wrote a little program to work around some bugs in some mouse drivers that
    showed up in TP 6.  You can find it as "MOUSEFIX.ZIP" in various places.
    Here's the source in its entirety; you'll need TurboPower's Object Professional
    library to recompile, or you can supply your own replacements for the various
    TSR support routines.
    }
      program mousefix;

      { Program to intercept mouse calls; make sure that hide/show mouse calls
        balance between saves/restores of the mouse state }

      { Usage:  Run MOUSEFIX after loading your mouse driver, before running
                the TP6 IDE. It's a 27K TSR; if you like it, you'll probably
                want to rewrite it in assembler.

        Written for the public domain by Duncan Murdoch.  Send comments to me
        at
          dmurdoch@mast.queensu.ca        (Internet)
          DJ Murdoch at 1:249/1.5         (Fidonet)
          71631,122                       (Compuserve)
      }

      uses
        opint,optsr;

      const
        mousehandle = 20;
      var
        hidecounter : integer;

      procedure hidemouse;
      var
        regs : intregisters;
      begin
        regs.ax := 2;
        emulateint(regs,israrray[mousehandle].origaddr);
      end;

      procedure showmouse;
      var
        regs : intregisters;
      begin
        regs.ax := 1;
        emulateint(regs,israrray[mousehandle].origaddr);
      end;

      procedure mouseservice(bp : word); interrupt;
      var
        regs : intregisters absolute bp;
        i : integer;
      begin
        with regs do
        begin
          if ah = 0 then
          begin
            case al of
            0,$16,$21 : hidecounter := 0;   { Reset, save state }
            1 : dec(hidecounter);       { show }
            2 : inc(hidecounter);       { hide }
            $17 : begin                 { restore state }
                    if hidecounter > 0 then
                      for i:=1 to hidecounter do
                        showmouse
                    else if hidecounter < 0 then
                      for i:=-1 downto hidecounter do
                        hidemouse;
                    hidecounter := 0;
                  end;
            end;
          end;
        end;
        chainint(regs,israrray[mousehandle].origaddr);
      end;

      begin
        if not initvector($33, MouseHandle, @Mouseservice) then
        begin
          writeln('Couldn''t get mouse vector!!!');
          halt(99);
        end;
        stayres(ParagraphsToKeep,0);
        writeln('Failed to go resident!!');
      end.

[Back to MOUSE SWAG index] [Back to Main SWAG index] [Original]