Path: utzoo!utgpu!jarvis.csri.toronto.edu!mailrus!tut.cis.ohio-state.edu!ucbvax!hplabs!hpl-opus!hpccc!hpcc01!azarian From: azarian@hpcc01.HP.COM (Randy Azarian) Newsgroups: comp.lang.pascal Subject: Re: TSR Programming Message-ID: <1780005@hpcc01.HP.COM> Date: 3 Jan 90 23:19:55 GMT References: <1736@uwm.edu> Organization: HP Corporate Computing Center Lines: 93 Following is a Turbo Pascal (4.0) TSR that will compile and execute. The results of which are probably less than desirable. It converts the blinking cursor on the PC to that of a static block (an inverse character attribute, to be exact). Like I say, it compiles and executes, but when the screen scrolls you won't be happy (probably). The only application that is moderately tolerable was Walker, Richer, & Quinn's Reflection 7+ terminal emulator. It depends upon how badly you hate the blinking cursor. This was something I started a while ago (at the request of my boss), and never had the time to complete. Good luck. And if anyone does finish it or has a good idea, please send it my way. azarian@hpcc01.hp.com 415 857-5637 BTW, although I can't say for sure, but I have a feeling the results would be totally unsatisfactory on a VGA screen without modification to the CURSOR procedure (or its calls). I wrote it on a EGA screen with a 12Mhz 80286 Vectra ES/12 PC. Also, since I never did finish it. It may have extraneous variable declarations that I used in experimentation. {$M 16384,0,6000} uses dos, crt; const timer = $1C; type screenptr = ^screentype; screentype = array[1..25,1..80] of record ch : char; 5t : byte; end; var vector : pointer; tempx, tempy, tempchar, i : integer; procedure cursor(startline,endline:integer); (* this procedure alters size of the cursor off/on *) (* stype and ttype define scan lines of cursor *) var regs : registers; begin fillchar(regs,sizeof(regs),0); regs.ah:=$01; regs.cl:=endline; regs.ch:=startline; intr($10, regs); end; function keyready : boolean; var regs : registers; begin fillchar(regs,sizeof(regs),0); regs.ah := $01; intr($16,regs); if (regs.flags and fzero) = fzero then keyready := true else keyready := false; end; (***********) procedure IntHandler(Flags,CS,IP,AX,BX,CX,DX,SI,DI,DS,ES,BP : word); interrupt; var regs : registers; procedure cli; inline($FA); procedure sti; inline($FB); begin cli; { disable interrupts } cursor(16,0); { turn cursor off, diff screens may require diff parms } if keyready then if (wherex <> tempx) or (wherey <> tempy) then begin mem[$B800:(80*(tempy-1)+tempx-1)*2+1] := tempchar; tempchar := mem[$B800:(80*(wherey-1)+wherex-1)*2+1]; mem[$B800:(80*(wherey-1)+wherex-1)*2+1] := not mem[$B800:(80*(wherey-1)+wherex-1)*2+1] - 128; { inverse attrib } tempx := wherex; tempy := wherey; end; sti; { enable interrupts } end; (***********) begin clrscr; cursor(16,0); getintvec(timer,vector); setintvec(timer,@inthandler); keep(exitcode); end.