borcelf@jacobs.cs.orst.edu (Fernando Borcel) (02/21/90)
I like the idea of an animated cursor, such as a beach ball or the hourglass in the old RedRyder term program. I also noticed most programs do the change of cursor synchroneously (i.e. change it every time it goes around a loop). I wrote these procedures to make it work as a VBL task. Everything works great, except that the A5 register seems to get a bit corrupted, screwing up some handles later in the program. I'm making sure all my handles are locked, but I don't have IM vIII, so I'm not sure whether SetCursor moves memory and is not supposed to be called from inside of a VBL task. In any case, here are the three routines I wrote, if you have any idea what might be wrong (if anything), please lemme know! --------------------------- unit CursorStuff; interface procedure BeginBeachBall; procedure EndBeachBall; implementation const NumOfFrames = 6; var ballframe: integer; Ball: array[1..NumOfFrames] of cursHandle; BallVBLTask: VBLTask; Error: integer; {$D-} procedure BeachBall; {Change cursor every 10/60ths} begin SetUpA5; if (BallFrame >= 1) and (BallFrame <= 6) then {Make sure BallFrame isn't corrupted} begin SetCursor(Ball[BallFrame]^^); if BallFrame = NumOfFrames then BallFrame := 1 else BallFrame := BallFrame + 1; BallVBLTask.vblCount := 10; end; RestoreA5; end; {$D+} procedure BeginBeachBall; {Get curs resources, lock the handles, and install the} {VBL task} var i: integer; begin BallFrame := 1; for i := 1 to NumOfFrames do {curs resources are 200..205} begin Ball[i] := GetCursor(199 + i); HLock(Handle(Ball[i])); end; with BallVBLTask do begin qType := ord(vType); vblCount := 10; {Set the VBL counter to 10/60th} vblPhase := 0; vblAddr := @BeachBall; end; error := VInstall(@BallVBLTask); if error <> noErr then SysBeep(1); end; procedure EndBeachBall; {Remove the VBL task and dispose curs handles} var i: integer; begin if error = noErr then begin error := VRemove(@BallVBLTask); for i := 1 to NumOfFrames do ReleaseResource(Handle(Ball[i])); end; end; end. ---------------------------------' Fernando Borcel Internet: borcelf@jacobs.cs.ORST.EDU FidoNet: Nando @ 1:152/208