Board index » delphi » Vesa SVGA Pascal Routine With MOUSE CURSOR ON (Source Code for SWAG

Vesa SVGA Pascal Routine With MOUSE CURSOR ON (Source Code for SWAG

Hello Pedro!

 PC> @RFC.Gate: Sat, 28 Oct 95 20:08:58

 PC> From: pjscorr...@telepac.pt (Pedro Correia)

 >> Thou shalt not post binaries, forsooth that thine shall be stricked down
 >> by thine demonic Macintosh!!! :)  Also, since when do you need to
 >> UUEncode a textfile?

 PC> sorry! but how can i send source codes to here?
 PC> my FreeAgent only allow attachement (binaries) i think...

Import the codefragment you wish to include, as a textfile.

=== Cut ===
{
 *15* *KIL* Dansk Pascal conf (2:236/86.28) ****************** PASCAL_R23.PUB
Brev : 149 af 438 - 148 Fra  : Peter Bach                          2:238/10.22
S.n 08 Jan 95 11:32 Til  : Kristoffer S.rensen Emne : effect
*******************************************************************************
Hi Kristoffer,

In a message of <Sun 8 Jan 95 22:31> to All (), you wrote:

 KS> Davzzz derude... er der nogen der har nogle FEDE effecter I gerne vil
 KS> af
 KS> med??

Her igen:

Quote
}

{$G+}

program flames;

uses crt;
const palette : array [1..768] of byte = (

    0,    0,    0,    0,    0,    24,    0,    0,    24,    0,    0,    28,
    0,    0,   32,    0,    0,    32,    0,    0,    36,    0,    0,    40,
    8,    0,   40,   16,    0,    36,   24,    0,    36,   32,    0,    32,
   40,    0,   28,   48,    0,    28,   56,    0,    24,   64,    0,    20,
   72,    0,   20,   80,    0,    16,   88,    0,    16,   96,    0,    12,
  104,    0,    8,  112,    0,     8,  120,    0,     4,  128,    0,     0,
  128,    0,    0,  132,    0,     0,  136,    0,     0,  140,    0,     0,
  144,    0,    0,  144,    0,     0,  148,    0,     0,  152,    0,     0,
  156,    0,    0,  160,    0,     0,  160,    0,     0,  164,    0,     0,
  168,    0,    0,  172,    0,     0,  176,    0,     0,  180,    0,     0,
  184,    4,    0,  188,    4,     0,  192,    8,     0,  196,    8,     0,
  200,   12,    0,  204,   12,     0,  208,   16,     0,  212,   16,     0,
  216,   20,    0,  220,   20,     0,  224,   24,     0,  228,   24,     0,
  232,   28,    0,  236,   28,     0,  240,   32,     0,  244,   32,     0,
  252,   36,    0,  252,   36,     0,  252,   40,     0,  252,   40,     0,
  252,   44,    0,  252,   44,     0,  252,   48,     0,  252,   48,     0,
  252,   52,    0,  252,   52,     0,  252,   56,     0,  252,   56,     0,
  252,   60,    0,  252,   60,     0,  252,   64,     0,  252,   64,     0,
  252,   68,    0,  252,   68,     0,  252,   72,     0,  252,   72,     0,
  252,   76,    0,  252,   76,     0,  252,   80,     0,  252,   80,     0,
  252,   84,    0,  252,   84,     0,  252,   88,     0,  252,   88,     0,
  252,   92,    0,  252,   96,     0,  252,   96,     0,  252,  100,     0,
  252,  100,    0,  252,  104,     0,  252,  104,     0,  252,  108,     0,
  252,  108,    0,  252,  112,     0,  252,  112,     0,  252,  116,     0,
  252,  116,    0,  252,  120,     0,  252,  120,     0,  252,  124,     0,
  252,  124,    0,  252,  128,     0,  252,  128,     0,  252,  132,     0,
  252,  132,    0,  252,  136,     0,  252,  136,     0,  252,  140,     0,
  252,  140,    0,  252,  144,     0,  252,  144,     0,  252,  148,     0,
  252,  152,    0,  252,  152,     0,  252,  156,     0,  252,  156,     0,
  252,  160,    0,  252,  160,     0,  252,  164,     0,  252,  164,     0,
  252,  168,    0,  252,  168,     0,  252,  172,     0,  252,  172,     0,
  252,  176,    0,  252,  176,     0,  252,  180,     0,  252,  180,     0,
  252,  184,    0,  252,  184,     0,  252,  188,     0,  252,  188,     0,
  252,  192,    0,  252,  192,     0,  252,  196,     0,  252,  196,     0,
  252,  200,    0,  252,  200,     0,  252,  204,     0,  252,  208,     0,
  252,  208,    0,  252,  208,     0,  252,  208,     0,  252,  208,     0,
  252,  212,    0,  252,  212,     0,  252,  212,     0,  252,  212,     0,
  252,  216,    0,  252,  216,     0,  252,  216,     0,  252,  216,     0,
  252,  216,    0,  252,  220,     0,  252,  220,     0,  252,  220,     0,
  252,  220,    0,  252,  224,     0,  252,  224,     0,  252,  224,     0,
  252,  224,    0,  252,  228,     0,  252,  228,     0,  252,  228,     0,
  252,  228,    0,  252,  228,     0,  252,  232,     0,  252,  232,     0,
  252,  232,    0,  252,  232,     0,  252,  236,     0,  252,  236,     0,
  252,  236,    0,  252,  236,     0,  252,  240,     0,  252,  240,     0,
  252,  244,    0,  252,  244,     0,  252,  244,     0,  252,  248,     0,
  252,  248,    0,  252,  248,     0,  252,  248,     0,  252,  252,     0,
  252,  252,    4,  252,  252,     8,  252,  252,    12,  252,  252,    16,
  252,  252,   20,  252,  252,    24,  252,  252,    28,  252,  252,    32,
  252,  252,   36,  252,  252,    40,  252,  252,    40,  252,  252,    44,
  252,  252,   48,  252,  252,    52,  252,  252,    56,  252,  252,    60,
  252,  252,   64,  252,  252,    68,  252,  252,    72,  252,  252,    76,
  252,  252,   80,  252,  252,    84,  252,  252,    84,  252,  252,    88,
  252,  252,   92,  252,  252,    96,  252,  252,   100,  252,  252,   104,
  252,  252,  108,  252,  252,   112,  252,  252,   116,  252,  252,   120,
  252,  252,  124,  252,  252,   124,  252,  252,   128,  252,  252,   132,
  252,  252,  136,  252,  252,   140,  252,  252,   144,  252,  252,   148,
  252,  252,  152,  252,  252,   156,  252,  252,   160,  252,  252,   164,
  252,  252,  168,  252,  252,   168,  252,  252,   172,  252,  252,   176,
  252,  252,  180,  252,  252,   184,  252,  252,   188,  252,  252,   192,
  252,  252,  196,  252,  252,   200,  252,  252,   204,  252,  252,   208,
  252,  252,  208,  252,  252,   212,  252,  252,   216,  252,  252,   220,
  252,  252,  224,  252,  252,   228,  252,  252,   232,  252,  252,   236,
  252,  252,  240,  252,  252,   244,  252,  252,   248,  252,  252,   252,
  252,  252,  240,  252,  252,   244,  252,  252,   248,  252,  252,   252);

   radius    = 1.9;
   frequency = 2;
   angleinc  = 3 * pi / frequency;

var
   count       : word;
   delta       : integer;
   path        : array[0..199] of word;
   buffer      : array[0..102,0..159] of integer;

procedure buildpath;
   var
      count     : byte;
      currangle : real;
   begin
      currangle := pi;
      for count := 0 to 199 do
         begin
            path[count] := 320 + round(radius*sin(currangle));

            { the sin path _must_ lie on an even number }
            { otherwise the picture will be garbage     }

            if path[count] mod 2 <> 0 then
               if path[count] > 320 then
                  dec(path[count])            { round down }
               else
                  inc(path[count]);           { round up   }

            { the path is rounded to the closest even number to 320 }

            currangle := currangle + angleinc;
         end;
   end;

begin
  randomize;
  buildpath;

  asm
     mov   ax,13h              { ; AX := 13h                            }
     int   10h                 { ; Set Mode 13h (320x200x256)           }

     xor   ax,ax               { ; AX := 0                              }
     mov   cx,768              { ; CX := # of palette entries           }
     mov   dx,03C8h            { ; DX := VGA Port                       }
     mov   si,offset palette   { ; SI := palette[0]                     }

     out   dx,al               { ; send zero to index port              }
     inc   dx                  { ; inc to write port                    }

   @l1:

     mov   bl,[si]             { ; set palette entry                    }
     shr   bl,2                { ; divide by 4                          }
     mov   [si],bl             { ; save entry                           }
     outsb                     { ; and write to port                    }
     dec   cx                  { ; CX := CX - 1                         }
     jnz   @l1                 { ; if not done then loop                }

     mov   ax,seg buffer       { ; AX := segment of buffer              }
     mov   es,ax               { ; ES := AX                             }
     mov   di,offset buffer    { ; DI := buffer[0]                      }
     mov   cx,8109             { ; CX := sizeof(buffer) div 2           }
     xor   ax,ax               { ; AX := 0                              }
     rep   stosw               { ; clear every element in buffer to zero}
  end;

  repeat

     asm
        mov   bx,1             { ; BX := 1                              }
        mov   si,offset path   { ; SI := path[0]                        }

        mov   cx,16160         { ; CX := # of elements to change        }
        mov   di,offset buffer { ; DI := buffer[0]                      }
        add   di,320           { ; DI := buffer[320] (0,1)              }

     @l2:

        mov   ax,ds:[di-2]     { ; AX := buffer[DI-2]    (x-1,y)        }
        add   ax,ds:[di]       { ; AX += buffer[DI]      (x  ,y)        }
        add   ax,ds:[di+2]     { ; AX += buffer[DI+2]    (x+1,y)        }
        add   ax,ds:[di+320]   { ; AX += buffer[DI+320]  (x,y+1)        }
        shr   ax,2             { ; AX := AX div 4 (calc average)        }

        jz    @l3              { ; if AX = 0 then skip next line        }
        dec   ax               { ; else AX--                            }

     @l3:

        push  di               { ; save DI                              }
        sub   di,ds:[si]       { ; DI := (x + or - sin,y-1)             }
        mov   word ptr ds:[di],ax { store AX somewhere one line up      }
        pop   di               { ; restore DI                           }

        inc   di               { ; DI++                                 }
        inc   di               { ; DI++ (move to next word)             }

        inc   bx               { ; BX++                                 }
        cmp   bx,320           { ; if bx <> 320                         }
        jle   @l4              { ; then jump to @l4                     }
        mov   bx,1             { ; else
...

read more »

 

Re:Vesa SVGA Pascal Routine With MOUSE CURSOR ON (Source Code for SWAG


hi Mikkel!

Quote
>Import the codefragment you wish to include, as a textfile.

tnks for you program... so... lets try :)

= cut =

program vesamouse;
uses crt;

{ mouse pointer }
const seta:array[0..15,0..7] of word=(
 (  0,999,999,999,999,999,999,999),
 (  0,  0,999,999,999,999,999,999),
 (  0,241,  0,999,999,999,999,999),
 (  0,241,241,  0,999,999,999,999),
 (  0,241,241,241,  0,999,999,999),
 (  0,241,241,241,241,  0,999,999),
 (  0,241,241,241,241,  0,999,999),
 (  0,  0,  0,241,  0,999,999,999),
 (  0,999,  0,241,  0,999,999,999),
 (999,999,  0,241,  0,  0,999,999),
 (999,999,999,  0,241,  0,999,999),
 (999,999,999,  0,241,  0,999,999),
 (999,999,999,  0,241,  0,999,999),
 (999,999,999,999,  0,241,  0,999),
 (999,999,999,999,  0,  0,  0,999),
 (999,999,999,999,999,999,999,999)
 );

var mode,co,n,m,xmax,ymax,mxmax:word;
    c:char;
    buf:array[0..255] of byte;
    sos,ooo:word;
    bank:byte;
    mx,my,mb:word;
    mask:array[0..15,0..7] of byte;  { mask of mouse pointer }
    oldseg,oldofs,oldmask:word;
    newseg,newofs,newmask:word;
    oldbank:word;

{$F+}
procedure SetPixel(X, Y : Word; C : word);  { VESA putpixel }
var b,z1,z2,z3,q,w:longint;
    bnk:word;

begin
 if c<=255 then
  begin       { if color <256 change, else dont put the pixel }
   z1:=y;z2:=xmax;            { swaping x,y to longint vars }
   q:=z1*z2+x;                { calculating offset }
   z3:=memw[sos:ooo+6];
   z3:=z3*1024;
   if z3=0 then z3:=1;
   b:=q div z3;
   bnk:=b*bank;                 { calculating effective Bank # }
   if oldbank<>b then
    begin
     asm
      mov ax,$4f05
      mov bx,0
      mov dx,bnk
      int $10
     end;   { Change to Bank # }
     oldbank:=b;
    end;
   if ((x<xmax) and (y<ymax)) then mem[$a000:q]:=c; {screen
dimmensions}
 end;
end;

function GetPixel(X, Y : Word):byte;
var z1,z2,q,w:longint;
    b:word;
begin
 z1:=y;z2:=xmax;
 q:=z1*z2+x;
 b:=q div 65536;
 b:=b*bank;
 if oldbank<>b then
  begin
   asm
    mov ax,$4f05
    mov bx,0
    mov dx,b
    int $10
   end;
   oldbank:=b;
  end;
 getpixel:=mem[$a000:q];
end;

procedure line(x1,y1,x2,y2,color:integer);

  function sign(x:integer):integer; {like sgn(x) in basic}
  begin if x<0 then sign:=-1 else if x>0 then sign:=1 else sign:=0
end;
  var
    x,y,count,xs,ys,xm,ym:integer;
  begin
    x:=x1;y:=y1;

    xs:=x2-x1;    ys:=y2-y1;

    xm:=sign(xs); ym:=sign(ys);
    xs:=abs(xs);  ys:=abs(ys);

    setpixel(x,y,color);

  if xs > ys
    then begin {flat line <45 deg}
      count:=-(xs div 2);
      while (x <> x2 ) do begin
        count:=count+ys;
        x:=x+xm;
        if count>0 then begin
          y:=y+ym;
          count:=count-xs;
          end;
        setpixel(x,y,color);
        end;
      end
    else begin {steep line >=45 deg}
      count:=-(ys div 2);
      while (y <> y2 ) do begin
        count:=count+xs;
        y:=y+ym;
        if count>0 then begin
          x:=x+xm;
          count:=count-ys;
          end;
        setpixel(x,y,color);
        end;
      end;
  end;

procedure boxed(ex,ey,exx,eyy,ec:word);
var tt:word;
begin
 for tt:=ey to eyy do
  line(ex,tt,exx,tt,ec);
end;

procedure box(ex,ey,exx,eyy,ec:word);
var tt:word;
begin
 line(ex,ey,exx,ey,ec);
 line(exx,ey,exx,eyy,ec);
 line(ex,eyy,exx,eyy,ec);
 line(ex,ey,ex,eyy,ec);
end;

{ function to show mouse pointer }
procedure newmouse(Flags,CS,IP,AX,BX,CX,DX,SI,DI,DS,ES,BP :
word);interrupt;
var hx,hy,hb,ev:word;
    hn,hm:integer;
begin
 ev:=ax;
 hx:=cx div 4;
 hy:=dx;
 hb:=bx;
 if ((hx<>mx) or (hy<>my)) then
  begin
   for hn:=0 to 15 do
    for hm:=0 to 7 do
     setpixel(mx+hm,my+hn,mask[hn,hm]);
   for hn:=0 to 15 do
    for hm:=0 to 7 do
     mask[hn,hm]:=getpixel(hx+hm,hy+hn);
   for hn:=0 to 15 do
    for hm:=0 to 7 do
     setpixel(hx+hm,hy+hn,seta[hn,hm]);
   mx:=hx;
   my:=hy;
  end;
 inline ($8B/ $E5/ $5D/ $07/ $1F/ $5F/ $5E/ $5A/ $59/$5B/ $58/ $CB);
end;

{$F-}

var qcor,qcb,qcf,qrr,qgg,qbb,qr,qg,qb,qr1,qg1,qb1,qrr1,qgg1,qbb1:byte;
    qoldy,qtl,qtc:integer;
    qn,x,y:word;
    ega:array[0..640] of record r,g,b,cb,cf:byte;c:char;end;
    c16:array[0..640] of record r,g,b:byte;end;

function existe:boolean;
var w:integer;
begin
 existe:=false;
 for w:=0 to qn-1 do
  if ((ega[w].r=ega[qn].r) and (ega[w].g=ega[qn].g) and
(ega[w].b=ega[qn].b)) then
    existe:=true;
end;

function cores(cr,cg,cb:byte):integer;
var w:integer;
begin
 cores:=0;
 for w:=0 to qtc do
  if ((ega[w].r=cr) and (ega[w].g=cg) and (ega[w].b=cb)) then
    cores:=w;
end;

function choose(c:char;vv:byte):byte;
var r,g,b:byte;
begin
 choose:=0;

{ if ((c='') or (c='') or (c='.') or (c='-') or (c='|') or (c='3')
or (c='?')) then c:='t';}
 if (c in ['!'..'','','y']) then c:=' ';
 if (c=#255) then c:=' ';
 if (c=#254) then c:='2';
 if not (c in ['','','2',' ',#219..#223{,#179,#191,#196,#217,#218}])
then c:=' ';

 if ((c='') and (vv=0)) then c:=' ';
 if ((c='') and (vv=1)) then c:=' ';
 if ((c='') and (vv=2)) then c:='2';
 if ((c='') and (vv=3)) then c:='2';

 if ((c='Y') and (vv=0)) then c:='2';
 if ((c='Y') and (vv=1)) then c:=' ';
 if ((c='Y') and (vv=2)) then c:='2';
 if ((c='Y') and (vv=3)) then c:=' ';

 if ((c='T') and (vv=0)) then c:=' ';
 if ((c='T') and (vv=1)) then c:='2';
 if ((c='T') and (vv=2)) then c:=' ';
 if ((c='T') and (vv=3)) then c:='2';

 if ((c='?') and (vv=0)) then c:='2';
 if ((c='?') and (vv=1)) then c:='2';
 if ((c='?') and (vv=2)) then c:=' ';
 if ((c='?') and (vv=3)) then c:=' ';

 if ((c='?')) then
  begin
   r:=c16[qcf].r;
   g:=c16[qcf].g;
   b:=c16[qcf].b;
   choose:=cores(r,g,b);
  end;
 if c=' ' then
  begin
   r:=c16[qcb].r;
   g:=c16[qcb].g;
   b:=c16[qcb].b;
   choose:=cores(r,g,b);
  end;
 if c='' then
  begin
   r:=round((c16[qcf].r*0.5)+(c16[qcb].r*0.5));
   g:=round((c16[qcf].g*0.5)+(c16[qcb].g*0.5));
   b:=round((c16[qcf].b*0.5)+(c16[qcb].b*0.5));
   choose:=cores(r,g,b);
  end;
 if c='' then
  begin
   r:=round((c16[qcf].r*0.25)+(c16[qcb].r*0.75));
   g:=round((c16[qcf].g*0.25)+(c16[qcb].g*0.75));
   b:=round((c16[qcf].b*0.25)+(c16[qcb].b*0.75));
   choose:=cores(r,g,b);
  end;
 if c='2' then
  begin
   r:=round((c16[qcf].r*0.75)+(c16[qcb].r*0.25));
   g:=round((c16[qcf].g*0.75)+(c16[qcb].g*0.25));
   b:=round((c16[qcf].b*0.75)+(c16[qcb].b*0.25));
   choose:=cores(r,g,b);
  end;
end;

procedure putgr(c:char);
begin
   qcor:=choose(c,0);
   setpixel(x*2,y*2,qcor);
   qcor:=choose(c,1);
   setpixel(x*2+1,y*2,qcor);
   qcor:=choose(c,2);
   setpixel(x*2,y*2+1,qcor);
   qcor:=choose(c,3);
   setpixel(x*2+1,y*2+1,qcor);
end;

procedure ansi_pal;
begin
for qn:=0 to 15 do
 begin
  port[967]:=qn;
  c16[qn].r:=port[969];
  c16[qn].g:=port[969];
  c16[qn].b:=port[969];
 end;
 qn:=0;
 for qcb:=0 to 7 do
 for qcf:=0 to 15 do
  begin

  ega[qn].cf:=qcf;
  ega[qn].cb:=qcb;
  ega[qn].c:='';
  ega[qn].r:=round((c16[qcf].r*0.5)+(c16[qcb].r*0.5));
  ega[qn].g:=round((c16[qcf].g*0.5)+(c16[qcb].g*0.5));
  ega[qn].b:=round((c16[qcf].b*0.5)+(c16[qcb].b*0.5));
  if not existe then inc(qn);

  ega[qn].cf:=qcf;
  ega[qn].cb:=qcb;
  ega[qn].c:='2';
  ega[qn].r:=round((c16[qcf].r*0.75)+(c16[qcb].r*0.25));
  ega[qn].g:=round((c16[qcf].g*0.75)+(c16[qcb].g*0.25));
  ega[qn].b:=round((c16[qcf].b*0.75)+(c16[qcb].b*0.25));
  if not existe then inc(qn);

  ega[qn].cf:=qcf;
  ega[qn].cb:=qcb;
  ega[qn].c:='';
  ega[qn].r:=round((c16[qcf].r*0.25)+(c16[qcb].r*0.75));
  ega[qn].g:=round((c16[qcf].g*0.25)+(c16[qcb].g*0.75));
  ega[qn].b:=round((c16[qcf].b*0.25)+(c16[qcb].b*0.75));
  if not existe then inc(qn);

  ega[qn].cf:=qcf;
  ega[qn].cb:=qcb;
  ega[qn].c:=' ';
  ega[qn].r:=c16[qcb].r;
  ega[qn].g:=c16[qcb].g;
  ega[qn].b:=c16[qcb].b;
  if not existe then inc(qn);

  ega[qn].cf:=qcf;
  ega[qn].cb:=qcb;
  ega[qn].c:='?';
  ega[qn].r:=c16[qcf].r;
  ega[qn].g:=c16[qcf].g;
  ega[qn].b:=c16[qcf].b;
  if not existe then inc(qn);

 end;
 qtc:=qn-1;

end;

procedure ord_pal;
var bbb:boolean;
    ggg:word;
    hr,hg,hb,hc:longint;
    gr,gg,gb,gc:longint;
begin
{ repeat
  bbb:=false;
  for ggg:=0 to qtc-1 do
   begin
    hr:=ega[ggg].r;
    hg:=ega[ggg].g;
    hb:=ega[ggg].b;
    gr:=ega[ggg+1].r;
    gg:=ega[ggg+1].g;
    gb:=ega[ggg+1].b;
    hc:=(hr*65536)+(hg*256)+hb;
    gc:=(gr*65536)+(gg*256)+gb;
    if hr<gr then
     begin
      bbb:=true;
      ega[640]:=ega[ggg];
      ega[ggg]:=ega[ggg+1];
      ega[ggg+1]:=ega[640];
     end;
   end;
 until bbb=false;}
 for n:=0 to qtc do
  begin
   port[968]:=n;
   port[969]:=ega[n].r;
   port[969]:=ega[n].g;
   port[969]:=ega[n].b;
  end;
end;

begin
 mx:=0;
 my:=0;
 mode:=$101; { Vesa mode }
 sos:=seg(buf);
 ooo:=ofs(buf[0]); { pointing VESA information Buffer }
 oldbank:=0;
 asm
  mov ax,$4f02
  mov bx,mode
  int $10
 end;           { Change to VESA MODE (mode) }
 asm
  mov ax,$4f01
  mov cx,mode
  mov es,sos
  mov di,ooo
  int $10
 end; { Get VESA info }

 if memw[sos:ooo+4]=0 then memw[sos:ooo+4]:=1;
 bank:=memw[sos:ooo+6] div memw[sos:ooo+4];
 { Granularity }

 xmax:=memw[sos:ooo+$12];
 ymax:=memw[sos:ooo+$14];
 if xmax=0 then begin xmax:=320;ymax:=200;bank:=0;end;
 { Get Screen Size }

 ansi_pal;
 ord_pal;

 { Starting Screen Fill }
 co:=0;
 for m:=0 to 6 do
 for n:=0 to (xmax-1) div 16 do
  begin
   if co<242 then begin
   box(n*16,ymax-(7-m)*16,n*16+16,ymax-(7-m)*16+16,241);
   boxed(n*16+1,ymax-(7-m)*16+1,n*16+16-1,ymax-(7-m)*16+16-1,co);
   inc(co);
   end;
  end;

 { pick up (0,0) mask }
 for n:=0 to 15 do
  for m:=0 to 7 do
   mask[n,m]:=getpixel(m,n);

 newseg:=seg(newmouse);
 newofs:=ofs(newmouse); { pointing to new mouse routine }
 newmask:=1;

 mxmax:=xmax*4;
 asm
  mov ax,0
  int $33    { mouse ? }
  mov ax,1
  int $33    { Show Mouse }
  mov ax,2
  int $33    { Hide Mouse }
  mov ax,7
  mov cx,0
  mov dx,mxmax
  int $33
  mov ax,8
  mov cx,0
  mov dx,ymax  { Set YMAX for mouse windows }
  int $33
  mov ax,20
  mov cx,newmask
  mov es,newseg
  mov dx,newofs
  int $33      { Active USER Mouse Routine }
  mov ax,$000f
  mov cx,4
  mov dx,4
  int $33
 end;

 c:=readkey;
...

read more »

Other Threads